2013-08-20 13 views
15

Ich muss ein Skript schreiben, das Dateien von einem Ordner auf einen anderen Server (Linux) überträgt, aber das Skript, das Dateien überträgt, ist Windows, und ich frage mich, ob es eine Alternative zu scp für PowerShell (oder wenn es ein anderes gab) So geht das)Gibt es eine SCP-Alternative für PowerShell?

+0

Für alle, die PowerShell Version 3 oder höher verwenden, ist https://github.com/darkoperator/Posh-SSH eine Option. –

Antwort

7

pscp.exe ist ein gangbarer Weg, aber ich habe ich eine Bibliothek von Rebex seit ein paar Jahren mit jetzt SFTP und FTPS Transfers n sowohl C# -Apps als auch PowerShell-Skripte mit großem Erfolg. Ihr Paket enthält auch an SCP object, aber ich habe es nicht persönlich benutzt.

Es kostet Geld vs. pscp frei sein. Bevor ich das Rebex-Paket ausgewählt hatte, hatte ich darüber nachgedacht, die PuTTY-Route zu gehen, aber mein Team entschied, dass es sich auf lange Sicht gelohnt hat, eine Bibliothek zu haben, die wir problemlos in jede App/jedes Skript einfügen können.

+0

Wenn Sie das Budget dafür haben, ja :-) –

+0

Dieser Blog-Beitrag kann Ihnen helfen, Rebex SFTP läuft in PowerShell http://blog.rebex.net/news/archive/2008/ 09/25/how-to-Use-FTP-oder-SFTP-in-PowerShell.aspx –

16

Es gibt ein praktisches kleines Tool, das mit Puttypscp.exe kommt, das wird dies tun und kann leicht in Powershell aufgerufen werden.

Beispiel unter Kopien von Windows auf eine CentOS-Box (die Anmeldung als Benutzercode „bill“) und Sie die -pw Schalter in pscp in einem Passwort zu übergeben (sonst das Befehlsfenster, das für das Linux-Passwort fragt angestoßen wird,):

Start-Process 'C:\Program Files (x86)\PuTTY\pscp.exe' -ArgumentList ("-scp -pw password C:\Document.rtf [email protected]:/home/bill/") 

PuTTY Secure Copy client 
Release 0.62 
Usage: pscp [options] [[email protected]]host:source target 
     pscp [options] source [source...] [[email protected]]host:target 
     pscp [options] -ls [[email protected]]host:filespec 
Options: 
    -V  print version information and exit 
    -pgpfp print PGP key fingerprints and exit 
    -p  preserve file attributes 
    -q  quiet, don't show statistics 
    -r  copy directories recursively 
    -v  show verbose messages 
    -load sessname Load settings from saved session 
    -P port connect to specified port 
    -l user connect with specified username 
    -pw passw login with specified password 
    -1 -2  force use of particular SSH protocol version 
    -4 -6  force use of IPv4 or IPv6 
    -C  enable compression 
    -i key private key file for authentication 
    -noagent disable use of Pageant 
    -agent enable use of Pageant 
    -batch disable all interactive prompts 
    -unsafe allow server-side wildcards (DANGEROUS) 
    -sftp  force use of SFTP protocol 
    -scp  force use of SCP protocol 
+1

Verwenden Sie die auf Schlüsseln basierende Authentifizierung, anstatt das Kennwort in Ihr Skript einzugeben. – slestak

+0

Angemessener Punkt, dies war nur ein schnelles Beispiel, um zu zeigen, dass PSCP die angeforderte Arbeit erledigen konnte :-) –

+0

Windows noob hier. Wenn ich das mache, bekomme ich nur ein leeres Konsolenfenster, das nach etwa 10 Sekunden verschwindet und die SCP-Übertragung scheint nicht stattgefunden zu haben. Irgendwelche Ideen, was passieren könnte? – jayhendren

1

Es gibt auch eine ".NET freundliche" Art und Weise:

Sie die SharpSSH DLL verwenden können ssh-Befehle und tun scp/sftp tranfers auszuführen.

Zum Beispiel:

[Reflection.Assembly]::LoadFrom((Resolve-Path .\Tamir.SharpSSH.dll)) 

$ssh = New-Object Tamir.SharpSsh.Sftp("server","user","password") 

$ssh.Connect() 

$ssh.Put("C:\localfile","distantfile") 

$ssh.Close() 

Dort wird die ist SSH.Net Bibliothek auch, tut es approximativ die gleichen Dinge.

5

Sie können WinSCP .NET assembly von PowerShell für SCP-Übertragungen verwenden.

Zum Beispiel sehen http://winscp.net/eng/docs/library_powershell#example

Das Beispiel SFTP-Protokoll verwendet. Um SCP zu verwenden, ändern nur um es zu:

$sessionOptions.Protocol = [WinSCP.Protocol]::Scp 

Obwohl, wenn Ihr Server-Unterstützung SCP-Protokoll, ist es wahrscheinlich, es unterstützt auch SFTP. SFTP ist die bessere Wahl, wenn Sie die Option haben.

Verwandte Themen