2014-12-05 19 views
8

배치 파일에서 powershell 스크립트로 전환하는 이유는 프로세스의 오류 검사를 개선하기 위해서입니다. 복사에 대한 cmdlet에는 이점이 있습니까?PowerShell에서 xcopy, robocopy 또는 copy-item을 사용합니다.

xcopy를 사용하여 파일 이름별로 파일을 복사하는 배치 파일이 이미 존재하는 경우 구문을 copy-item로 변환하면 어떤 이점이 있습니까?

robocopy, xcopy 및 copy-item을 (서로 비교하여) 사용하면 어떤 이점이 있습니까? 예를 들어, robocopy는 신뢰할 수있는 네트워크를 통해 많은 수의 작은 파일로 작업 할 때 장점이 있습니다. 이 스크립트를 수백 대의 컴퓨터에서 동시에 실행하여 수백 개의 파일을 복사하는 경우 결정에 영향을 미칩니 까? 결정은 주로 파일의 사용 권한에 초점을 맞추어야합니까?

+2

당신이하고 싶은 일에 전적으로 달려 있습니다. 귀하의 목록에서 Robocopy를 놓쳤습니다. –

+0

이것은 너무 광범위합니다. 우리는 당신이 무엇을 움직이고 있는지 얼마나 모릅니다. 많은 차이점이 있으며 일괄 작업의 경우 기본 복사 항목보다 항상 xcopy/robocopy를 사용하려고합니다. – Matt

+0

제목이 모호한 반면 게시글은 자신의 기존 배치 파일에있는'xcopy '을 PS 네이티브'Copy-Item' cmdlet으로 변환해야하는지 아니면 그냥 그대로 두어야하는지 분명하게 묻고 있습니다. 우리는 더 많은 정보를 필요로하지만, 나는 의견이나 과소 평가가 지나치게 엄격하다고 생각한다. – TheMadTechnician

답변

6

가장 큰 장점은 문자열 또는 파일 스펙 대신 파이프를 통해 Copy-Item에 객체를 보낼 수 있다는 것입니다. 그래서 당신은 할 수 : 가난한 예 종류의

Get-ChildItem '\\fileserver\photos\*.jpeg' -File | ` 
    Where-Object { ($_.LastAccessTime -ge (Get-Date).AddDays(-1)) -and ($_.Length -le 500000) } | ` 
    Copy-Item -Destination '\\webserver\photos\' 

을 (당신은 Copy-Item -Filter로 할 수있다)하지만, 온 - 더 - 플라이로 올 수있는 쉬운 하나입니다. Get-ChildItem의 파이프 라인으로 끝내기 위해 파일 작업을 할 때 꽤 흔한 일이며, 개인적으로는 Remove-Item-Recurse -Include 버그로 개인적으로 많이하는 경향이 있습니다.

또한 PowerShell의 오류 트래핑, -Passthru, -WhatIf, -UseTransaction 및 모든 일반 매개 변수와 같은 특수 매개 변수도 얻을 수 있습니다. Copy-Item -Recurse은 xcopy의 트리 복사 기능 중 일부를 복제 할 수 있지만 예쁜 베어 본입니다.

지금, 당신은 ACL을 소유, 감사, 등, 다음 xcopy 또는 robocopy 아마. 그 기능이 내장되어 있기 때문에 훨씬 쉬울거야 Copy-Item 핸들이 암호화 된 파일을 복사하는 방법을 잘 모르겠어요을 유지해야하는 경우 암호화되지 않은 위치 (xcopy는이를 수행 할 수있는 능력이 있습니다)로 가서 Copy-Item이 아카이브 속성을 직접 관리하는 것을 지원하지 않는다고 생각합니다.

속도가 빠르면 xcopy와 robocopy가 승리 할 것으로 예상됩니다. 관리 코드는 일반적으로 오버 헤드가 높습니다. Xcopy 및 robocopy는 네트워크에서 얼마나 잘 작동하는지 훨씬 더 많이 제어 할 수 있습니다.

+0

내가 끝내는 해결책은 텍스트 파일에서 복사 할 파일 목록을 읽고 Copy-Item으로 파이프하는 것입니다. 이 방법론은 DLL 등록과 같은 사용자 지정 함수에 파이핑 할 때도 매우 일관되게 작동합니다. – Adam

+1

Posh v5에서도 Remove-item 버그가 수정되지 않았습니다. MS 사이트에서 다음과 같이 설명합니다. "Include 매개 변수와 함께 사용하면 Recurse 매개 변수가 모든 하위 디렉터리 또는 모든 하위 항목을 삭제하지 못할 수 있습니다.이는 알려진 문제입니다. 이 문제의 해결 방법은 Get-ChildItem -Recurse cmdlet의 결과를 Remove-Item cmdlet으로 파이프하는 것입니다 (이 항목의 예제 4 "https://technet.microsoft.com/en-us/library/hh849765). aspx – AnneTheAgile