Объекты в удаленном сеансе разрушаются, отправляются по проводам, а затем восстанавливаются. Некоторые типы могут быть перестроены в живые объекты, в то время как другие являются десериализованными версиями, как вы и предполагали. Здесь есть запись в блоге , которая объясняет это .
Обратите внимание, что PSRemoting всегда шифруется с AES-256 после первоначальной аутентификации независимо от используемого протокола HTTP или HTTPS.
Исходя из этого ответа для загрузки файла через PsSession Я перевернул процесс для отправки кусков размером 1 МБ по проводам и записи их в поток на удаленной машине. Поскольку он использует тот сеанс, который вы уже установили, он должен соответствовать вашим требованиям. Возможно, это можно оптимизировать, но я выполнил некоторые базовые тесты для файла объемом 1 ГБ, и он работал как положено.
function UploadSingleFile {
param(
[System.Management.Automation.Runspaces.PSSession] $RemoteSession,
[string] $RemoteFile,
[string] $LocalFile,
[int] $ChunkSize = 1mb
)
$FileInfo = Get-Item -LiteralPath $LocalFile
$FileStream = $FileInfo.OpenRead()
try {
$FileReader = New-Object System.IO.BinaryReader $FileStream
try {
for() {
$Chunk = $FileReader.ReadBytes($ChunkSize)
if($Chunk.Length) {
Invoke-Command -Session $RemoteSession -ScriptBlock {
param(
[string] $RemoteFile,
[byte[]] $Chunk
)
$FileStream = [System.IO.FileStream]::new($RemoteFile, [System.IO.FileMode]::Append, [System.IO.FileAccess]::Write)
$FileStream.Write($Chunk, 0, $Chunk.Length)
$FileStream.Close()
} -ArgumentList $RemoteFile, $Chunk
} else {
break;
}
}
} finally {
$FileReader.Close();
}
} finally {
$FileStream.Close();
}
}
Призвание:
$session = New-PSSession -ComputerName ComputerOne -UseSSL -Credential $credential
UploadSingleFile -Session $session -RemoteFile 'c:\temp\Destination.bin' -LocalFile 'C:\temp\source.bin'
Затем я использовал Get-FileHash для подтверждения того, что файл успешно скопирован.
PS C:\> Get-FileHash C:\temp\source.bin
Algorithm Hash Path
--------- ---- ----
SHA256 C513BFBCF4501A06BCC5F6F7A589532F7D802AA2C032D88143B0A31C1CFBD5F4 C:\temp\source.bin
PS C:\> Get-FileHash '\\ComputerOne\c$\temp\Destination.bin'
Algorithm Hash Path
--------- ---- ----
SHA256 C513BFBCF4501A06BCC5F6F7A589532F7D802AA2C032D88143B0A31C1CFBD5F4 \\ComputerOne\c$\temp\Destination.bin