Enviar o ficheiro para SFTP usando o 'PowerShell'
por exemplo:
Pasta Local:
C:\FileDump
pasta SFTP:
/Outbox/
Pasta De Cópias De Segurança:
C:\Backup
eu tentei algumas coisas neste momento WinSCP sendo um deles, bem como SFTP PowerShell Snap-In mas nada funcionou comigo até agora.
isto estará a correr no Windows Server 2012R2.
Quando eu executar Get-Host
a minha versão para console é 4.0.
3 answers
Não existe actualmente um método de PowerShell integrado para fazer a parte SFTP. Vais ter de usar algo como psftp.EXE ou um módulo PowerShell como Posh-SSH.
Aqui está um exemplo usando Posh-SSH:
# Set the credentials
$Password = ConvertTo-SecureString 'Password1' -AsPlainText -Force
$Credential = New-Object System.Management.Automation.PSCredential ('root', $Password)
# Set local file path, SFTP path, and the backup location path which I assume is an SMB path
$FilePath = "C:\FileDump\test.txt"
$SftpPath = '/Outbox'
$SmbPath = '\\filer01\Backup'
# Set the IP of the SFTP server
$SftpIp = '10.209.26.105'
# Load the Posh-SSH module
Import-Module C:\Temp\Posh-SSH
# Establish the SFTP connection
$ThisSession = New-SFTPSession -ComputerName $SftpIp -Credential $Credential
# Upload the file to the SFTP path
Set-SFTPFile -SessionId ($ThisSession).SessionId -LocalFile $FilePath -RemotePath $SftpPath
#Disconnect all SFTP Sessions
Get-SFTPSession | % { Remove-SFTPSession -SessionId ($_.SessionId) }
# Copy the file to the SMB location
Copy-Item -Path $FilePath -Destination $SmbPath
Algumas notas adicionais:
- Você terá que baixar o módulo Posh-SSH que você pode instalar para o seu diretório do módulo de usuário (e.g. C:\Users\jon_dechiro\Documents\WindowsPowerShell\Modules) e apenas carregar usando o nome ou colocá-lo em qualquer lugar e carrega-o como eu tenho no código acima.
- se ter as credenciais no script não for aceitável você terá que usar um arquivo credencial. Se você precisar de ajuda com isso eu posso atualizar com alguns detalhes ou apontá-lo para alguns links.
- mude os caminhos, IPs, etc. quando necessário.
-
telecarregamento WinSCP. net assembly .
O último pacote a partir de Agora éWinSCP-5.13.4-Automation.zip
; -
extrair O arquivo
.zip
ao longo do seu programa; -
Use um código como este (baseado no exemplo Oficial de envio de PowerShell ):
# Load WinSCP .NET assembly Add-Type -Path "WinSCPnet.dll" # Setup session options $sessionOptions = New-Object WinSCP.SessionOptions -Property @{ Protocol = [WinSCP.Protocol]::Sftp HostName = "example.com" UserName = "user" Password = "mypassword" SshHostKeyFingerprint = "ssh-rsa 2048 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx" } $session = New-Object WinSCP.Session try { # Connect $session.Open($sessionOptions) # Upload $session.PutFiles("C:\FileDump\export.txt", "/Outbox/").Check() } finally { # Disconnect, clean up $session.Dispose() }
Você pode ter o WinSCP a gerar o PowerShell programa para o envio para si:
- autenticar-se no seu servidor com GUI WinSCP;
- navegar para a pasta de destino no painel de ficheiros remotos;
- Seleccione o ficheiro para enviar no painel de ficheiros local;
- invoque o comando Upload;
- na janela de Opções de transferência , ir para configuração de transferência > Gerar Código;
- na janela gerar o código de transferência, seleccione a código de montagem .net tab;
- Escolha a lÃnguaPowerShell .
Você vai obter um código como acima com todas as configurações de sessão e transferência preenchidas.
(sou o autor do WinSCP)
Usando o pscp do PuTTY.exe (que tenho numa pasta $env:path
):
pscp -sftp -pw passwd c:\filedump\* user@host:/Outbox/
mv c:\filedump\* c:\backup\*