微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Powershell-Invoke-Command脚本块中的“ Copy-item”命令

如何解决Powershell-Invoke-Command脚本块中的“ Copy-item”命令

我需要使用powershell脚本将文件从一台远程服务器复制到另一台。

我尝试过的方法:-

虽然我使用以下powershell命令可以正常工作(将文件从一台服务器复制到另一台服务器)

enter image description here

但是当我使用以下脚本时,它给出如下错误“找不到路径...”

enter image description here

实际上,该路径上存在文件

我已经尝试参考以下已经出现的堆栈溢出问题

我也曾尝试获得使用方面的帮助

0

问题:-

  1. 如何在脚本(2)的“ Invoke-Command(脚本块)”中使用“ copy-Item”命令来复制文件
  2. 是否有更好的方法来实现这一目标(意味着最佳实践)?

解决方法

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 举报,一经查实,本站将立刻删除。