通过 PSSession 下载 PS5 文件

2024-04-01

如何通过 PSSession 从远程服务器下载文件?我知道 PS5 推出了Copy-Item -FromSession,但本地和远程可能都没有运行 PS5。我的文件也很大,所以一个简单的Get-Content可能有问题。


您可以将远程端的文件作为字节数组序列读取,通过远程处理流式传输它们,然后将它们组装回本地文件:

function DownloadSingleFile {
    param(
        [System.Management.Automation.Runspaces.PSSession] $FromSession,
        [string] $RemoteFile,
        [string] $LocalFile,
        [int] $ChunkSize = 1mb
    )
    Invoke-Command -Session $FromSession -ScriptBlock {
        param(
            [string] $FileName,
            [int] $ChunkSize
        )
        $FileInfo = Get-Item -LiteralPath $FileName
        $FileStream = $FileInfo.OpenRead()
        try {
            $FileReader = New-Object System.IO.BinaryReader $FileStream
            try {
                for() {
                    $Chunk = $FileReader.ReadBytes($ChunkSize)
                    if($Chunk.Length) {
                        ,$Chunk
                    } else {
                        break;
                    }
                }
            } finally {
                $FileReader.Close();
            }
        } finally {
            $FileStream.Close();
        }
    } -ArgumentList $RemoteFile, $ChunkSize | ForEach-Object {
        $FileName = $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($LocalFile)
        $FileStream = [System.IO.File]::Create($FileName)
    } {
        $FileStream.Write($_, 0, $_.Length)
    } {
        $FileStream.Close()
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 PSSession 下载 PS5 文件 的相关文章

随机推荐