Transferir arquivos via Powershell Remoting (como scp no linux)

3

Durante a criação de alguns scripts de implantação baseados em powershell, senti muita falta de uma maneira fácil de transferir rapidamente um arquivo para outro servidor (pela internet) via Powershell Remoting, algo como scp para linux. Felizmente algo que pode ser ativado via Powershell Remoting. Eu ignorei alguma coisa?

    
por Nicolas Mehlei 11.03.2015 / 18:50

3 respostas

6

Você pode facilmente copiar o conteúdo de um arquivo over-the-wire através de uma sessão PSRemoting usando Invoke-Command e 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
    
por 12.03.2015 / 03:05
2

Novo no PowerShell 5.0 : Copy-Item agora vem com -ToSession e -FromSession parâmetros!

Mais detalhes e exemplos aqui: Copiar para ou de uma sessão do PowerShell

    
por 11.04.2016 / 01:10
0

Oneliner para você. Funciona em qualquer versão. Transfere binários se você quiser.

Para colocar o arquivo:

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)

Para obter o arquivo (variáveis não removidas):

[io.file]::WriteAllBytes("$localfile",(Invoke-Command -ComputerName $remotehost -Credential $usercred -ScriptBlock {get-content $Args[0] -encoding byte -Read 0} -ArgumentList "$remotefile"))
    
por 24.05.2016 / 14:55