Во время создания нескольких сценариев развертывания на основе PowerShell я очень упустил простой способ быстро передать файл на другой сервер (через Интернет) с помощью Powershell Remoting, что-то вроде scp для Linux. К счастью, кое-что, что можно активировать через Powershell Remoting. Я что-то упустил?
Вы можете легко скопировать содержимое файла по сети через сеанс PSRemoting, используя Invoke-Command и Set-Content
:
$Session = New-PSSession -ComputerName "remotehost.domain.tld" -Credential (Get-Credential) -UseSsl
$FileContents = Get-Content -Path 'C:\path\to\arbitrary.file'
Invoke-Command -Session $Session -ScriptBlock {
param($FilePath,$data)
Set-Content -Path $FilePath -Value $data
} -ArgumentList "C:\remote\file\path.file",$FileContents
Новое в PowerShell 5.0: Copy-Item
теперь идет с -ToSession
и -FromSession
параметры!
Подробнее и примеры здесь: Копировать в или из сеанса PowerShell
Один лайнер для вас. Работает на любой версии. Переносит двоичные файлы, если хотите.
Чтобы поместить файл:
Invoke-Command -ComputerName "myserver.somewhere.net" -Credential (Get-Credential) -ScriptBlock {[io.file]::WriteAllBytes($Args[0],$Args[1])} -ArgumentList "c:\remote.file.path",(get-content "c:\local.file.path" -encoding byte -Read 0)
Чтобы получить файл (переменные не удаляются):
[io.file]::WriteAllBytes("$localfile",(Invoke-Command -ComputerName $remotehost -Credential $usercred -ScriptBlock {get-content $Args[0] -encoding byte -Read 0} -ArgumentList "$remotefile"))