powershell 远程命令中的最大数据大小

piah890a  于 2023-08-05  发布在  Shell
关注(0)|答案(3)|浏览(177)

我的powershell脚本发送一个文件到几个客户端在自定义会话使用以下代码(代码缩短)

function DoCopyFile
{
    param(
    [Parameter(Mandatory=$true)] $RemoteHost,
    [Parameter(Mandatory=$true)] $SrcPath,
    [Parameter(Mandatory=$true)] $DstPath,
    [Parameter(Mandatory=$true)] $Session)
.
.
.               
    $Chunks | Invoke-Command -Session $Session -ScriptBlock { `
        param($Dest, $Length)

        $DestBytes = new-object byte[] $Length
        $Pos = 0
        foreach ($Chunk in $input) {
            [GC]::Collect()
            [Array]::Copy($Chunk, 0, $DestBytes, $Pos, $Chunk.Length)
            $Pos += $Chunk.Length
        }

        [IO.File]::WriteAllBytes($Dest, $DestBytes)
        [GC]::Collect()
    } -ArgumentList $DstPath, $SrcBytes.Length
.
.
.
}

$Pwd = ConvertTo-SecureString $Node.Auth.Password -asplaintext -force
$Cred = new-object -typename System.Management.Automation.PSCredential -ArgumentList ("{0}\{1}" -f $Name, $Node.Auth.Username),$Pwd
$Sopts = New-PSSessionOption -MaximumReceivedDataSizePerCommand 99000000
$Session = New-PSSession -ComputerName $Name -Credential $Cred -SessionOption $Sopts
DoCopyFile $Name ("{0}\{1}" -f $Node.Installer.ResourceDir, $Driver.Name) $Dest $Session

字符串
完整复制功能如下所述:http://poshcode.org/2216
文件大于52MB时出现问题。失败,出现以下错误:

Sending data to a remote command failed with the following error message: The total data received from the remote
client exceeded allowed maximum. Allowed maximum is 52428800. For more information, see the
about_Remote_Troubleshooting Help topic.
    + CategoryInfo          : OperationStopped: (CLI-002:String) [], PSRemotingTransportException
    + FullyQualifiedErrorId : JobFailure
    + PSComputerName        : CLI-002


正如你在代码中看到的,我使用定制的ps会话。当我将MaximumReceivedDataSizePerCommand设置为非常低的值(如10kb)时,它会失败,并显示一条消息,告诉maximum为10kb,因此我假设MaximumReceivedDataSizePerCommand应用于ps会话对象。
是否需要在远程计算机或其他地方执行此配置?是什么导致了这个错误?
谢谢。

bzzcjhmw

bzzcjhmw1#

您需要在远程计算机中创建一个新的PSSessionConfiguration(这是为了不使用默认值):

Register-PSSessionConfiguration -Name DataNoLimits #or the name you like.

字符串
然后配置所需的参数(在本例中为MaximumReceivedDataSizePerCommandMBMaximumReceivedObjectSizeMB):

Set-PSSessionConfiguration -Name DataNoLimits `
-MaximumReceivedDataSizePerCommandMB 500 -MaximumReceivedObjectSizeMB 500


然后使用您需要的PSSessionConfiguration创建新会话:

$Session = New-PSSession -ComputerName MyRemoteComp -ConfigurationName DataNoLimits


在您的本地计算机中。
通过这种方式,使用来自www.example.com的Send-Fileposh.org,我复制了一个~ 80 MB大小的文件。大尺寸返回内存异常。
更多关于这一点在这里。

d5vmydt9

d5vmydt92#

我在会话中使用copy-item。我似乎没有经历过极限。

$session=new-pssession -computerName $server
copy-item -path "$tempfolder\$tempfilename.zip" -destination $destinationfolder -tosession $session

字符串

sh7euo9m

sh7euo9m3#

您可以查看this post有关后台智能传输服务(BITS)的信息。如需更多帮助,请查看MSDN documentation。从文章来看,有这些考虑:
使用BITS协议的优点:

  • BITS是一种智能协议,能够控制使用的带宽,不影响其他网络应用程序的工作。BITS可以只使用空闲频段,并在传输过程中动态改变数据速率(如果其他应用增加了网络使用)
  • BITS任务将在中断或计算机重新启动时自动恢复
  • 一个文件可以在后台下载,用户不会注意到
  • 收件人端和服务器端不需要部署IIS服务器

因此,BITS是在慢速网络中传输大文件的优选协议。
希望能帮上忙。

相关问题