远程 Powershell 代码块并行执行
Remote Powershell code blocks execute in parallel
有人可以帮助理解远程 powershell 中的多线程吗?
我正在尝试仅使用 WinRM 将文件复制到远程计算机。这是算法:
- 将本地文件划分为 byte[] 块。
- 每个块都是 base64 编码的。
- base64 字符串在 powershell 代码块中发送到远程 WinRM,对其进行解码并附加到文件。
- 远程文件最终填满了所有字节并且是本地文件的精确副本。
问题是我在执行远程 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
将文件复制到远程计算机。
有人可以帮助理解远程 powershell 中的多线程吗? 我正在尝试仅使用 WinRM 将文件复制到远程计算机。这是算法:
- 将本地文件划分为 byte[] 块。
- 每个块都是 base64 编码的。
- base64 字符串在 powershell 代码块中发送到远程 WinRM,对其进行解码并附加到文件。
- 远程文件最终填满了所有字节并且是本地文件的精确副本。
问题是我在执行远程 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
将文件复制到远程计算机。