Powershell - Invoke-Command中ScriptBlock的"Copy-item"命令

4

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

我尝试过的方法:

当我使用以下powershell命令时,它可以正常工作(表示已经成功将文件从一个服务器复制到另一个服务器)

enter image description here

但是,当我使用以下脚本时,它会出现“无法找到路径”的错误,如下所示:

enter image description here

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

我尝试参考以下stack-overflow已有的问答:

我还尝试寻求帮助。

 Get-Help Invoke-Command

问题:

  1. 我如何在脚本(2)中使用 "Invoke-Command(Scriptblock)" 命令内部的 "Copy-Item" 命令来复制文件?
  2. 有没有更好的方法来实现这个目标(即最佳实践)?

1
C:\windows.txt 只存在于调用机器上?如果您的命令成功了,您只是将 windows.txt 从 C:\ 复制到远程主机的 C:\ 目录。 - Doug Maurer
@Dough Maurer 是的。现在为了测试目的,我只是将windows.txt文件放在一台机器(源)的C:\驱动器上,一旦命令成功,文件将被复制到另一台机器(目标)的C:\驱动器上。 - Harish
1个回答

1
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 是做这件事的正确方式。它完全是为了你的目的而制作的。缺点是,目标目录需要存在。但无论如何你都需要一个 PSSession 来运行两个 cmdlet。因此,您可以使用相同的 PSSession 使用 Invoke-Command。首先创建一个 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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接