Powershell-Invoke-Command의 scriptblock에있는 "Copy-item"명령
powershell 스크립트를 사용하여 한 원격 서버에서 다른 서버로 파일을 복사해야합니다.
내가 시도한 것 :-
다음 powershell 명령을 사용하는 동안 잘 작동합니다. (한 서버에서 다른 서버로 파일이 복사되었음을 의미합니다)
하지만 다음 스크립트를 사용하는 동안 다음과 같이 "경로를 찾을 수 없습니다 ..."라는 오류가 발생합니다.
실제로 해당 경로에 파일이 있습니다.
나는 이미 질문에 대한 답변을 스택 오버플로를 참조하려고했습니다.
- 자격 증명을 사용하여 파일을 원격 서버에 복사하기위한 PowerShell 명령 오류
- 'Session'매개 변수가 PowerShell 스크립트에서 null이거나 비어 있습니다.
- powershell 원격
- 원격 세션이있는 Invoke-Command : 매개 변수의 인수를 확인할 수 없습니다.
- 바이너리를 원격 Azure VM에 복사 할 수 없습니다.
- 원격 컴퓨터에서 파일을 복사하는 PowerShell 명령
나는 또한 사용하여 도움을 얻으려고 노력했습니다.
Get-Help Invoke-Command
질문 :-
- script (2)의 "Invoke-Command (Scriptblock)"에서 "Copy-Item"명령을 사용하여 파일을 복사하려면 어떻게해야합니까?
- 이것을 달성하는 더 좋은 방법이 있습니까 (모범 사례를 의미합니다)?
답변
Invoke-Command-ArgumentList원격 세션에서 로컬 변수의 값을 제공하는 데 사용할 수있는 매개 변수 가 있습니다. 문제는 변수의 가치 일뿐입니다. 파일 없음!
당신이 할 수 있습니다
사용을 Get-Content -Raw작은 파일에하는 변수에의 상수를 저장합니다. 대상 시스템에를 만들 New-Item와 -Value해당 파일의. 그러나 그것은 그다지 효율적이지 않습니다.
예:
$txt = Get-Content -Raw -Path "C:\test\oldFile.txt" $Session = New-PSSession 127.0.0.1
Invoke-Command -Session $Session -ScriptBlock { Param($Txt) New-Item -Path c:\test\newFile.txt -Value $txt } -ArgumentList $txt
#Get-PSSession | Remove-PSSession
결과:
Verzeichnis: C:\test # Sry german OS
Mode LastWriteTime Length Name PSComputerName
---- ------------- ------ ---- --------------
-a---- 03.09.2020 12:23 658033 newFile.txt 127.0.0.1
당신은 무엇을해야합니까 :
내가 사용을 생각하기 Copy-Item -ToSession $Session는 IS 올바른 방법으로 그것을 할. 그것은 당신의 목적을 위해 만들어졌습니다. 단점은 대상 디렉토리가 존재해야한다는 것입니다. 그러나 어쨌든 두 cmdlet 모두에 대해 PSSession이 필요합니다. 따라서 Invoke-Command동일한 PSSession과 함께 사용할 수 있습니다 . 먼저 PSSession을 만듭니다. Invoke-Command디렉토리를 만드는 데 사용 합니다. 그런 다음을 사용 Copy-Item하여 파일을 올바른 위치로 이동하십시오. 마지막으로 Invoke-Command몇 가지 마무리 단계를 수행 하는 데 사용할 수 있습니다 . 그리고 Remove-PSSession끝났을 때 잊지 마세요 :
$DestinationPath = "C:\test"
Invoke-Command -Session $Session -ScriptBlock { Param($Destination) New-Item -Path $Destination -ItemType Directory } -ArgumentList $DestinationPath
Copy-Item -Path "C:\test\oldFile.txt" -ToSession $Session -Destination "c:\test\newFile.txt" Invoke-Command -Session $Session -ScriptBlock { write-host "Do some stuff" }
$Session | Remove-PSSession