wake-up-neo.com

Remote-Kopieren von Dateien mit PowerShell

Ich schreibe ein PowerShell-Skript , das ich auf Server A ausführen möchte. Ich möchte eine Verbindung zu Server B herstellen und eine Datei als Sicherung auf Server A kopieren .

Wenn dies nicht möglich ist, möchte ich von Server A eine Verbindung zu Server B herstellen und eine Datei in ein anderes Verzeichnis auf Server B kopieren.

Ich sehe das Copy-Item Befehl, aber ich verstehe nicht, wie ich ihm einen Computernamen geben kann.

Ich hätte gedacht, ich könnte so etwas tun

Copy-Item -ComputerName ServerB -Path C:\Programs\temp\test.txt -Destination (not sure how it would know to use ServerB or ServerA)

Wie kann ich das machen?

80
chobo2

Verwenden Sie einfach die administrativen Freigaben, um Dateien zwischen Systemen zu kopieren. Auf diese Weise ist es viel einfacher.

Copy-Item -Path \\serverb\c$\programs\temp\test.txt -Destination \\servera\c$\programs\temp\test.txt;

Durch die Verwendung von UNC-Pfaden anstelle von lokalen Dateisystempfaden stellen Sie sicher, dass Ihr Skript von jedem Client-System mit Zugriff auf diese UNC-Pfade ausführbar ist. Wenn Sie lokale Dateisystempfade verwenden, werden Sie gezwungen, das Skript auf einem bestimmten Computer auszuführen.

Dies funktioniert nur, wenn eine PowerShell-Sitzung unter dem Benutzer ausgeführt wird, der über Rechte für beide Administratorfreigaben verfügt.

Ich empfehle die Verwendung einer regulären Netzwerkfreigabe auf Server B mit schreibgeschütztem Zugriff auf alle und rufe einfach an (von Server A aus):

Copy-Item -Path "\\\ServerB\SharedPathToSourceFile" -Destination "$Env:USERPROFILE" -Force -PassThru -Verbose
82
Trevor Sullivan

Ab PowerShell Version 5 (in Windows Server 2016 enthalten, als Teil von WMF 5 für frühere Versionen herunterladbar ) ist dies möglich mit Remoting. Dies hat den Vorteil, dass es auch dann funktioniert, wenn Sie aus irgendeinem Grund nicht auf Freigaben zugreifen können.

Damit dies funktioniert, muss in der lokalen Sitzung, in der das Kopieren gestartet wird, PowerShell 5 oder höher installiert sein. Für die Remotesitzung muss nicht PowerShell 5 installiert sein. Sie funktioniert mit PowerShell-Versionen ab 2 und Windows Server-Versionen ab 2008 R2.[1]

Erstellen Sie von Server A eine Sitzung zu Server B:

$b = New-PSSession B

Und dann noch von A:

Copy-Item -FromSession $b C:\Programs\temp\test.txt -Destination C:\Programs\temp\test.txt

Das Kopieren von Elementen nach B erfolgt mit -ToSession. Beachten Sie, dass in beiden Fällen lokale Pfade verwendet werden. Sie müssen nachverfolgen, auf welchem ​​Server Sie sich befinden.


[1]: Achten Sie beim Kopieren von oder auf einen Remote-Server, auf dem nur PowerShell 2 installiert ist, auf dieser Fehler in PowerShell 5.1 , was zum Zeitpunkt des Schreibens bedeutet, dass das rekursive Kopieren von Dateien mit -ToSession nicht funktioniert. ein scheinbares Kopieren funktioniert mit -FromSession überhaupt nicht.

64
Jeroen Mostert

Verwenden Net Use oder New-PSDrive um ein neues Laufwerk zu erstellen:

New-PsDrive: erstelle ein neues PsDrive, das nur in der PowerShell-Umgebung sichtbar ist:

New-PSDrive -Name Y -PSProvider filesystem -Root \\ServerName\Share
Copy-Item BigFile Y:\BigFileCopy

Net Use: Erstellt ein neues Laufwerk, das in allen Teilen des Betriebssystems sichtbar ist.

Net Use y: \\ServerName\Share
Copy-Item BigFile Y:\BigFileCopy
36
JPBlanc

Nur für den Fall, dass für den Zugriff auf die Remote-Datei Ihre Anmeldeinformationen erforderlich sind, können Sie mit dem Cmdlet New-Object ein System.Net.WebClient -Objekt erstellen, um die Datei aus der Ferne zu kopieren. wie so

$Source = "\\192.168.x.x\somefile.txt"
$Dest   = "C:\Users\user\somefile.txt"
$Username = "username"
$Password = "password"

$WebClient = New-Object System.Net.WebClient
$WebClient.Credentials = New-Object System.Net.NetworkCredential($Username, $Password)

$WebClient.DownloadFile($Source, $Dest)

Oder wenn Sie eine Datei hochladen müssen, können Sie UploadFile verwenden:

$Dest = "\\192.168.x.x\somefile.txt"
$Source   = "C:\Users\user\somefile.txt"

$WebClient.UploadFile($Dest, $Source)
13
shyan1

Keine der obigen Antworten hat bei mir funktioniert. Ich habe immer wieder diesen Fehler erhalten:

Copy-Item : Access is denied
+ CategoryInfo          : PermissionDenied: (\\192.168.1.100\Shared\test.txt:String) [Copy-Item], UnauthorizedAccessException>   
+ FullyQualifiedErrorId : ItemExistsUnauthorizedAccessError,Microsoft.PowerShell.Commands.CopyItemCommand

Also dies tat es für mich:

netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=yes

Dann habe ich von meinem Host auf meinem Computer im Feld Ausführen Folgendes ausgeführt:

\\{IP address of nanoserver}\C$
0
RogerW