파일 복사. 그것은 섹시하지 않지만 해야합니다. GUI에서는 클립 보드를 사용하여 복사 및 붙여 넣기를 수행하지만 PowerShell에서는 Copy-Item이라는 cmdlet을 사용합니다.
파일 복사에 대한 명령은 모든 쉘 언어에서 오랫동안 사용되어 왔습니다. PowerShell에서는 PowerShell 스크립트에서 파일이나 폴더를 포인트 A에서 포인트 B로 복사하는 가장 인기있는 방법은 PowerShell의 Copy-Item
cmdlet을 사용하는 것입니다. 이 cmdlet은 폴더의 파일을 재귀적으로 복사하고 필요한 파일을 선택하기 위해 와일드카드를 사용하며 파일 복사에 PowerShell Remoting을 사용할 수 있는 기능을 제공합니다!
이 cmdlet은 PowerShell 공급자 cmdlet의 일부입니다. 이는 일반적인 cmdlet으로서 Item 명사로 인식됩니다. 이러한 공급자 cmdlet 중 대부분은 여러 공급자에서 사용할 수 있지만, PowerShell을 거의 10년 동안 사용하면서 파일 시스템 공급자와 함께 Copy-Item
만 사용되었음을 본 적이 있습니다.
이 cmdlet
을 사용함으로써 PowerShell은 개발자가 파일과 폴더를 다양한 방식으로 복사할 수 있도록 합니다.
기본 사용법
가장 기본적으로 Copy-Item
cmdlet은 Path
매개변수를 소스 파일 경로로, Destination
매개변수를 대상 폴더 경로로 사용하여 포인트 A에서 포인트 B로 단일 파일을 복사합니다.
이 Cmdlet은 빈 폴더도 복사할 수 있습니다. C:\EmptyFolder 폴더의 항목을 나열하고 이들을 복사합니다.
아마 폴더에 읽기 전용 파일이 있을 것입니다. 기본적으로 Copy-Item
은 덮어쓰기 하지 않습니다. 덮어쓰기를 강제하려면 Force
매개변수를 추가하세요.
Copy-Item
에서 선택적으로 복사
단일 파일이나 폴더를 복사하는 것 외에도 폴더의 전체 내용을 복사할 수도 있습니다. Copy-Item
의 Path
매개변수는 와일드카드 문자(별표는 하나 이상의 문자와 일치하고 물음표는 하나의 문자와 일치)를 허용합니다.
여러 폴더 병합하기
Copy-Item
의 또 다른 멋진 기능은 여러 폴더를 동시에 복사할 수 있는 능력입니다. Path
매개변수에 여러 경로를 전달하면 Copy-Item
은 각 경로를 확인하고 경로에 따라 폴더 또는 파일을 복사하고 이를 모두 단일 대상에 “병합”합니다.
재귀적으로 파일 복사하기
한 폴더에 모든 파일이 들어있고 하위 폴더가 없는 경우에는 운이 좋을 수도 있지만, 대개는 상위 폴더에 많은 하위 폴더가 있고 그 안에도 복사하려는 파일이 많습니다. Copy-Item
의 Recurse
매개변수를 사용하면 각 하위 폴더를 확인하고 재귀적으로 모든 파일과 폴더를 복사합니다.
이곳에서는 파일과 폴더를 Get-ChildItem
에서 직접 Copy-Item
으로 파이핑하고 있습니다. Copy-Item
은 파이프라인을 지원합니다!
PassThru 매개변수 사용의 장점
PowerShell의 많은 cmdlet에는 PassThru 매개변수가 있습니다. 일반적으로 아무것도 반환하지 않는 cmdlet도 PassThru 매개변수를 사용하여 조작 중인 객체를 반환할 수 있습니다. 이 cmdlet도 예외는 아닙니다. 처음 스크립트 작성을 시작했을 때는 필요하지 않다고 생각하여 이 매개변수를 사용하지 않았습니다.
예를 들어, 파일을 원격 위치로 복사하고 나중에 해당 파일을 스크립트에서 참조하려면 다음과 같이 수행할 수 있습니다:
이 방법은 작동하지만 개선할 수 있습니다. 원격 경로에 대한 변수를 정의하는 대신, Copy-Item
cmdlet을 사용하여 PassThru
매개변수를 사용할 때 반환된 개체를 바로 캡처하는 것은 어떨까요? 반환된 개체에는 항상 대상 파일 경로가 포함됩니다.
PowerShell 원격 세션을 사용하여 파일 복사하기
PowerShell v5와 함께 제공된 멋진 기능 중 하나는 이 cmdlet이 파일 전송을 위해 기본 SMB 프로토콜 대신 WinRM과 PowerShell 원격 세션을 사용할 수 있다는 것입니다. Session
매개변수를 사용하면 Copy-Item
은 기존의 PowerShell 세션을 사용하여 파일을 전송합니다. 이는 방화벽을 우회하는 훌륭한 방법이며, 세션 통신이 암호화되면 추가적인 보안 계층도 제공됩니다.
우리는 SMB를 통해 File.txt 파일을 복사하고 C$ 관리 공유가 사용 가능하다는 가정하에 대상 경로를 \\WEBSRV1\c$
로 사용할 수도 있었습니다. 대신 ToSession
매개변수를 사용했으므로 대상 경로는 항상 원격 세션이 실행 중인 컴퓨터의 로컬 경로가 됩니다.
요약
Copy-Item
cmdlet은 여러 번 사용할 핵심 PowerShell cmdlet 중 하나입니다. PowerShell에서는 이 강력하면서도 간단한 방법으로 파일과 폴더를 다양한 방식으로 복사할 수 있으며, 와일드카드를 사용하여 여러 폴더의 파일을 병합하고 기존의 PowerShell Remoting 세션을 사용할 수 있는 능력이 있습니다!
추가 자료
