【问题标题】:Powershell - "Copy-item" command in scriptblock of Invoke-CommandPowershell - Invoke-Command 脚本块中的“复制项目”命令
【发布时间】:2020-12-21 16:26:16
【问题描述】:

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

我尝试过的:-

虽然我使用以下 powershell 命令,但它工作正常。(意味着文件从一台服务器复制到另一台服务器)

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

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

我已尝试参考以下堆栈溢出问题的答案

我也尝试过使用

 Get-Help Invoke-Command

问题:-

  1. 如何在 script(2) 的“Invoke-Command(Scriptblock)”中使用“Copy-Item”命令来复制文件?
  2. 有没有更好的方法来实现这一点(意味着最佳实践)?

【问题讨论】:

  • C:\windows.txt 只存在于调用机器上??如果您的命令成功,您只需将 windows.txt 从 C:\ 复制到远程主机上的 C:\
  • @Dough Maurer 是的。现在出于测试目的,我刚刚将 windows.txt 保存在一台机器(源)的 C:\ 驱动器上,一旦命令成功文件将复制到另一台机器(目标)C:\ 驱动器。

标签: powershell file-copying


【解决方案1】:

Invoke-Command 具有参数-ArgumentList,可用于在远程会话中提供局部变量的值。问题是:它只是变量的值。没有文件!

你可以做什么:
在小文件上使用Get-Content -Raw 将内容保存在变量中。在目标系统上使用该文件的-Value 创建一个New-Item。但这不是很有效。

例子:

$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

【讨论】:

    猜你喜欢
    • 2020-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-29
    相关资源
    最近更新 更多