通过 WinRM 和 Copy-Item 上传大文件的设置 - Powershell

通过 WinRM 和 Copy-Item 上传大文件的设置 - Powershell

我正在尝试使用 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

相关内容