J'écris un script PowerShell que je souhaite exécuter à partir du serveur A. Je souhaite me connecter au serveur B et copier un fichier sur le serveur A en tant que sauvegarde. .
Si cela ne peut pas être fait, j'aimerais me connecter au serveur B à partir du serveur A et copier un fichier dans un autre répertoire du serveur B.
Je vois la commande Copy-Item
, mais je ne vois pas comment lui donner un nom d'ordinateur.
J'aurais pensé pouvoir faire quelque chose comme
_Copy-Item -ComputerName ServerB -Path C:\Programs\temp\test.txt -Destination (not sure how it would know to use ServerB or ServerA)
_
Comment puis-je faire ceci?
Utilisez simplement les partages administratifs pour copier des fichiers entre systèmes. C'est beaucoup plus facile de cette façon.
Copy-Item -Path \\serverb\c$\programs\temp\test.txt -Destination \\servera\c$\programs\temp\test.txt;
En utilisant des chemins d'accès UNC au lieu de chemins d'accès au système de fichiers local, vous aidez à vous assurer que votre script est exécutable à partir de tout système client ayant accès à ces chemins d'accès UNC. Si vous utilisez des chemins d'accès au système de fichiers locaux, vous vous engagez à exécuter le script sur un ordinateur spécifique.
Cela ne fonctionne que lorsqu'une session PowerShell s'exécute sous l'utilisateur disposant des droits sur les deux partages administratifs.
Je suggère d'utiliser un partage réseau normal sur le serveur B avec un accès en lecture seule à tout le monde et d'appeler simplement (depuis le serveur A):
Copy-Item -Path "\\\ServerB\SharedPathToSourceFile" -Destination "$Env:USERPROFILE" -Force -PassThru -Verbose
À partir de version 5 de PowerShell (inclus dans Windows Server 2016, téléchargeable dans le cadre de WMF 5 pour les versions antérieures ), il s'agit possible avec remoting. L'avantage de ceci est que cela fonctionne même si, pour une raison quelconque, vous ne pouvez pas accéder aux partages.
Pour que cela fonctionne, PowerShell version 5 ou supérieure doit être installée sur la session locale où la copie est lancée. La session distante ne nécessite pas l'installation de PowerShell 5; elle fonctionne avec les versions de PowerShell à partir de 2 et les versions de Windows Server à partir de 2008 R2.[1]
Depuis le serveur A, créez une session sur le serveur B:
$b = New-PSSession B
Et puis, toujours de A:
Copy-Item -FromSession $b C:\Programs\temp\test.txt -Destination C:\Programs\temp\test.txt
La copie des éléments vers B s'effectue avec -ToSession
. Notez que les chemins locaux sont utilisés dans les deux cas; vous devez garder une trace de votre serveur.
[1]: lors de la copie depuis ou vers un serveur distant ne disposant que de PowerShell 2, méfiez-vous de ce bogue dans PowerShell 5.1 , ce qui signifie qu'au moment de l'écriture, la copie de fichier récursive ne fonctionne pas avec -ToSession
, une copie apparente ne fonctionne pas du tout avec -FromSession
.
Utilisez Net Use
ou New-PSDrive
pour créer un nouveau lecteur:
New-PsDrive: créer un nouveau PsDrive visible uniquement dans l'environnement PowerShell:
New-PSDrive -Name Y -PSProvider filesystem -Root \\ServerName\Share
Copy-Item BigFile Y:\BigFileCopy
Net Use: créer un nouveau lecteur visible dans toutes les parties du système d'exploitation.
Net Use y: \\ServerName\Share
Copy-Item BigFile Y:\BigFileCopy
Au cas où le fichier distant aurait besoin de vos informations d'identification, vous pouvez générer un objet System.Net.WebClient à l'aide de la cmdlet New-Object vers "Copier le fichier à distance", ainsi
$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)
Ou si vous avez besoin de télécharger un fichier, vous pouvez utiliser UploadFile:
$Dest = "\\192.168.x.x\somefile.txt"
$Source = "C:\Users\user\somefile.txt"
$WebClient.UploadFile($Dest, $Source)
Aucun Des réponses ci-dessus ont fonctionné pour moi. J'ai gardé cette erreur:
Copy-Item : Access is denied
+ CategoryInfo : PermissionDenied: (\\192.168.1.100\Shared\test.txt:String) [Copy-Item], UnauthorizedAccessException>
+ FullyQualifiedErrorId : ItemExistsUnauthorizedAccessError,Microsoft.PowerShell.Commands.CopyItemCommand
Donc this l'a fait pour moi:
netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=yes
Ensuite, depuis mon hôte, ma machine dans la boîte de dialogue Exécuter, je viens de faire ceci:
\\{IP address of nanoserver}\C$