如何解决Powershell-Invoke-Command脚本块中的“ Copy-item”命令
我需要使用powershell脚本将文件从一台远程服务器复制到另一台。
我尝试过的方法:-
虽然我使用以下powershell命令可以正常工作(将文件从一台服务器复制到另一台服务器)
但是当我使用以下脚本时,它给出如下错误“找不到路径...”
实际上,该路径上存在文件。
我已经尝试参考以下已经出现的堆栈溢出问题
- Error with PowerShell command for copying file to remote server with credential
- 'Session' Parameter is null or empty in PowerShell script
- powershell remote
- Invoke-Command with remote session: Cannot validate argument on parameter
- Unable to copy a binary to a remote Azure VM
- PowerShell Command to Copy File on Remote Machine
我也曾尝试获得使用方面的帮助
0
问题:-
解决方法
Invoke-Command
的参数为-ArgumentList
,该参数可用于提供远程会话中局部变量的值。问题是:它只是变量的VALUE。没有文件!
您可以做什么:
在小文件上使用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
是正确的方法。只是为了您的目的而乱造的。缺点是目标目录必须存在。但是无论如何,您都需要两个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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。