Kopieer bestand op afstand met PowerShell

Ik schrijf een PowerShell-script dat ik wil uitvoeren vanaf Server A.
Ik wil verbinding maken met server B en een bestand als back-up naar server A kopiëren.

Als dat niet kan, wil ik verbinding maken met server B vanaf server A en een bestand kopiëren naar een andere map op server B.

Ik zie de Copy-Itemcommando, maar ik zie niet hoe ik het een computernaam moet geven.

Ik had gedacht dat ik zoiets kon doen

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

Hoe kan ik dit doen?


Antwoord 1, autoriteit 100%

Gebruik gewoon de beheerdersshares om bestanden tussen systemen te kopiëren.
Op deze manier is het veel gemakkelijker.

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

Door UNC-paden te gebruiken in plaats van lokale bestandssysteempaden, helpt u om:
zorg ervoor dat uw script uitvoerbaar is vanaf elk clientsysteem met:
toegang tot die UNC-paden. Als u lokale bestandssysteempaden gebruikt, dan
jezelf in het nauw drijven om het script op een specifieke computer uit te voeren.


Antwoord 2, autoriteit 95%

Vanaf PowerShell versie 5 en later(inbegrepen in Windows Server 2016, downloadbaar als onderdeel van WMF 5 voor eerdere versies), dit is mogelijk met remoting. Het voordeel hiervan is dat het werkt, zelfs als je, om welke reden dan ook, geen toegang hebt tot shares.

Om dit te laten werken, moet PowerShell 5 of hoger zijn geïnstalleerd op de lokale sessie waarin het kopiëren wordt gestart. Voor de externe sessie hoeft nietPowerShell 5 te zijn geïnstalleerd — het werkt met PowerShell-versies vanaf 2 en Windows Server-versies vanaf 2008 R2.[1]

Maak van server A een sessie naar server B:

$b = New-PSSession B

En dan, nog steeds van A:

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

Het kopiëren van items naar B gebeurt met -ToSession. Merk op dat in beide gevallen lokale paden worden gebruikt; je moet bijhouden op welke server je zit.


[1]: pas op voor wanneer u kopieert van of naar een externe server die alleen PowerShell 2 heeft deze bug in PowerShell 5.1, wat op het moment van schrijven betekent dat recursief kopiëren van bestanden niet werkt met -ToSession, een schijnbaar kopiëren werkt helemaal niet met -FromSession.


Antwoord 3, autoriteit 42%

Gebruik net useof New-PSDriveom een nieuwe schijf te maken:

Nieuwe PsDrive:maak een nieuwe PsDrive die alleen zichtbaar is in de PowerShell-omgeving:

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

Nettogebruik:maak een nieuwe schijf die zichtbaar is in alle delen van het besturingssysteem.

Net use y: \\ServerName\Share
Copy-Item BigFile Y:\BigFileCopy

Antwoord 4, autoriteit 16%

Voor het geval dat het externe bestand uw referenties nodig heeft om toegang te krijgen, kunt u een System.Net.WebClient-object genereren met behulp van cmdlet New-Objectnaar “Bestand kopiëren Op afstand”, zoals zo

$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)

Of als u een bestand moet uploaden, kunt u UploadFile gebruiken:

$Dest = "\\192.168.x.x\somefile.txt"
$Source   = "C:\Users\user\somefile.txt"
$WebClient.UploadFile($Dest, $Source)

Antwoord 5

Geenvan de bovenstaande antwoorden werkte voor mij. Ik kreeg steeds deze foutmelding:

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

Dus ditdeed het voor mij:

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

Vervolgens deed ik vanaf mijn host mijn machine in het vak Uitvoeren:

\\{IP address of nanoserver}\C$

Other episodes