远程 Powershell 代码块并行执行

Remote Powershell code blocks execute in parallel

有人可以帮助理解远程 powershell 中的多线程吗? 我正在尝试仅使用 WinRM 将文件复制到远程计算机。这是算法:

  1. 将本地文件划分为 byte[] 块。
  2. 每个块都是 base64 编码的。
  3. base64 字符串在 powershell 代码块中发送到远程 WinRM,对其进行解码并附加到文件。
  4. 远程文件最终填满了所有字节并且是本地文件的精确副本。

问题是我在执行远程 powershell 块时遇到 "The process cannot access the file, because it is used by another process" 类型的错误。看起来 powershell 并行执行我的脚本块。但我需要顺序执行。我可以覆盖它吗?

完整的代码示例可用 here

每次您创建远程 PowerShell 会话时,它都会使用不同的 PowerShell 进程来执行请求。这就是您 运行 陷入文件争用问题的原因。您应该考虑对每个操作使用相同的远程会话,而不是每次要附加块时都创建一个新会话。

顺便说一句,如果您使用(或即将使用)V5,则可以使用 $s = New-PSSession remoteComputerName; Copy-Item src.txt C:\dst.txt -ToSession $s 将文件复制到远程计算机。