我正在尝试使用 PowerShell Copy-Item 将一个大文件(约 180MB)复制到远程服务器。
Copy-Item –Path "$sourcePath" –Destination "$destPath" -Force –ToSession $session
它适用于大约 100MB 的文件,但我对更大的文件遇到了问题。
错误是:
The runspace state is not valid for this operation.
我的配置是:
Config
MaxEnvelopeSizekb = 256000
MaxTimeoutms = 60000
MaxBatchItems = 32000
MaxProviderRequests = 4294967295
Client
NetworkDelayms = 5000
URLPrefix = wsman
AllowUnencrypted = true
Auth
Basic = true
Digest = true
Kerberos = true
Negotiate = true
Certificate = true
CredSSP = false
DefaultPorts
HTTP = 5985
HTTPS = 5986
答案1
确保源服务器和目标服务器上的 MaxEnvelopeSize 相同。
$ses = new-pssession $destServerName
Invoke-Command -Session $ses -ScriptBlock { get-WSManInstance -ResourceURI winrm/config | Select-Object MaxEnvelopeSizekb }
你的输出将会像这样
MaxEnvelopeSizekb PSComputerName RunspaceId
----------------- -------------- ----------
4608 destServerName b135b977-1f1e-4eef-a5e0-75e94109aa2f
将其与源机器上的 MaxEnvolopeSize 进行比较。
get-WSManInstance -ResourceURI winrm/config | Select-Object MaxEnvelopeSizekb
对于海报来说,输出将如下所示
MaxEnvelopeSizekb
-----------------
256000
您希望这些是相同的。因此,更改目标服务器是一种选择。
Invoke-Command -Session $ses -ScriptBlock { set-WSManInstance -ResourceURI winrm/config -ValueSet @{MaxEnvelopeSizekb = "256000" }}
当然,您可以更改源或两者,只要它们匹配就没关系。
但随后copy-item
命令--tosession
将会起作用
Copy-Item –Path $sourcePath –Destination $destPath -Force –ToSession $ses