[powershell] PowerShell을 사용하여 원격으로 파일 복사

서버 A에서 실행할 PowerShell 스크립트를 작성 중입니다. 서버 B에 연결하고 파일을 백업으로 서버 A에 복사하려고합니다.

그렇게 할 수 없다면 서버 A에서 서버 B에 연결하고 파일을 서버 B의 다른 디렉토리에 복사하고 싶습니다.

내가 볼 Copy-Item명령을,하지만 난 그것을 컴퓨터 이름을 지정하는 방법을 볼 수 없습니다.

나는 내가 할 수 있다고 생각했을 것입니다.

Copy-Item -ComputerName ServerB -Path C:\Programs\temp\test.txt -Destination (not sure how it would know to use ServerB or ServerA)

어떻게 할 수 있습니까?



답변

관리 공유를 사용하여 시스템간에 파일을 복사하기 만하면됩니다. 이 방법이 훨씬 쉽습니다.

Copy-Item -Path \\serverb\c$\programs\temp\test.txt -Destination \\servera\c$\programs\temp\test.txt;

로컬 파일 시스템 경로 대신 UNC 경로를 사용하면 해당 UNC 경로에 대한 액세스 권한이있는 모든 클라이언트 시스템에서 스크립트를 실행할 수 있습니다. 로컬 파일 시스템 경로를 사용하는 경우 특정 컴퓨터에서 스크립트를 실행할 수 있습니다.

이는 두 관리 공유에 대한 권한이있는 사용자로 PowerShell 세션이 실행되는 경우에만 작동합니다.

모든 사람에게 읽기 전용 액세스 권한이있는 서버 B에서 일반 네트워크 공유를 사용하고 간단히 (서버 A에서) 호출하는 것이 좋습니다.

Copy-Item -Path "\\\ServerB\SharedPathToSourceFile" -Destination "$Env:USERPROFILE" -Force -PassThru -Verbose


답변

에서 PowerShell을 버전 5 이후 (윈도우 서버 2016에 포함 된 이전 버전 WMF 5의 일부로 다운로드 ),이 리모팅 가능합니다. 이것의 장점은 어떤 이유로 든 공유에 액세스 할 수없는 경우에도 작동한다는 것입니다.

이 작업을 수행하려면 복사가 시작된 로컬 세션에 PowerShell 5 이상이 설치되어 있어야합니다. 원격 세션 에는 PowerShell 5가 설치되어 있지 않아도됩니다. PowerShell 버전 2 개 및 Windows Server 버전 2008 R2에서 작동합니다. [1]

서버 A에서 서버 B에 대한 세션을 만듭니다.

$b = New-PSSession B

그리고 여전히 A :

Copy-Item -FromSession $b C:\Programs\temp\test.txt -Destination C:\Programs\temp\test.txt

항목을 B로 복사하는 작업은 -ToSession. 두 경우 모두 로컬 경로가 사용됩니다. 어떤 서버에 있는지 추적해야합니다.


[1] : PowerShell 2 만있는 원격 서버에서 복사 할 때 PowerShell 5.1의이 버그에 주의하십시오. 작성 당시에는 재귀 파일 복사가 -ToSession에서 작동하지 않고 분명히 복사가 작동하지 않음을 의미합니다. 모두 -FromSession.


답변

사용 net use또는 New-PSDrive새 드라이브를 만들 :

New-PsDrive : PowerShell 환경에서만 볼 수있는 새 PsDrive를 만듭니다.

New-PSDrive -Name Y -PSProvider filesystem -Root \\ServerName\Share
Copy-Item BigFile Y:\BigFileCopy

Net use : OS의 모든 부분에서 볼 수있는 새 드라이브를 만듭니다.

Net use y: \\ServerName\Share
Copy-Item BigFile Y:\BigFileCopy


답변

원격 파일에 액세스하기 위해 자격 증명이 필요한 경우 cmdlet New-Object 를 사용하여 “파일을 원격으로 복사” 하는 System.Net.WebClient 개체를 생성 할 수 있습니다.

$Source = "\\192.168.x.x\somefile.txt"
$Dest   = "C:\Users\user\somefile.txt"
$Username = "username"
$Password = "password"

$WebClient = New-Object System.Net.WebClient
$WebClient.Credentials = New-Object System.Net.NetworkCredential($Username, $Password)

$WebClient.DownloadFile($Source, $Dest)

또는 파일을 업로드해야하는 경우 UploadFile을 사용할 수 있습니다.

$Dest = "\\192.168.x.x\somefile.txt"
$Source   = "C:\Users\user\somefile.txt"

$WebClient.UploadFile($Dest, $Source)


답변

위의 답변 중 어느 것도 나를 위해 일 하지 않았습니다 . 이 오류가 계속 발생했습니다.

Copy-Item : Access is denied
+ CategoryInfo          : PermissionDenied: (\\192.168.1.100\Shared\test.txt:String) [Copy-Item], UnauthorizedAccessException>
+ FullyQualifiedErrorId : ItemExistsUnauthorizedAccessError,Microsoft.PowerShell.Commands.CopyItemCommand

그래서 이것은 나를 위해 그것을했습니다.

netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=yes

그런 다음 내 호스트에서 실행 상자의 내 컴퓨터에서 다음을 수행했습니다.

\\{IP address of nanoserver}\C$


답변