Удаленное копирование файлов с помощью Powershell


Я пишу a powershell скрипт, который я хочу запустить с сервере A. Я хочу подключиться к серверу B и скопировать файл на сервер в качестве резервного.

Если это невозможно сделать, то я хотел бы подключиться к серверу B с сервера A и скопировать файл в другой каталог на сервере B.

Я вижу, что они но я не вижу, как дать имя компьютеру.

Я бы подумал, что могу что-то сделать как

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

Как я могу это сделать?

5 73

5 ответов:

просто использовать административные ресурсы для копирования файлов между системами. Так гораздо проще.

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

используя UNC-пути вместо локальных путей файловой системы, вы помогаете убедитесь, что ваш скрипт выполняется из любой клиентской системы с помощью доступ к UNC-пути. Если вы используете локальные пути файловой системы, то вы загоняете себя в угол, чтобы запустить скрипт на определенном компьютере.

это работает только при сеансе PowerShell работает под пользователем, который имеет права администратора акции. Я предлагаю использовать обычный сетевой ресурс на сервере B с доступом только для чтения ко всем и просто позвонить (с сервера A):

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

С PowerShell версии 5 года (входит в Windows Server 2016 и, загружается как часть WMF 5 для более ранних версий), это возможно с remoting. Преимущество этого заключается в том, что он работает, даже если по какой-либо причине вы не можете получить доступ к общим ресурсам.

чтобы это работало, в локальном сеансе, в котором инициируется копирование, должен быть установлен PowerShell 5 или выше. Удаленный сеанс делает не необходимо установить PowerShell 5 -- он работает с версиями PowerShell до 2 и версиями Windows Server до 2008 R2.[1]

С сервера A создайте сеанс на сервер B:

$b = New-PSSession B

а потом еще:

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

копирование элементов в B выполняется с помощью -ToSession. Обратите внимание, что местные тропы используются в обоих случаях, вы должны отслеживать, на каком сервере вы находитесь.


[1]: При копировании С или на удаленный сервер, который имеет только в PowerShell 2, остерегайтесь эта ошибка в PowerShell 5.1, что на момент написания означает, что рекурсивное копирование файлов не работает с -ToSession, очевидно, копирование не работает вообще с -FromSession.

Почему бы вам не использовать net use или New-PSDrive для создания нового диска.

New-PsDrive: создать новый PsDrive, видимый только в среде powershell:

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

Сеть использовать : создайте новый диск, видимый во всех частях ОС.

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

Если для доступа к удаленному файлу требуются ваши учетные данные, вы можете создатьSystem.Net.WebClient объект с помощью командлетаNew-Object чтобы "копировать файл удаленно", например

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

или если вам нужно загрузить файл, вы можете использовать UploadFile

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

$WebClient.UploadFile($Dest, $Source)

нет из ответов не работал для меня. Продолжал получать эту ошибку:

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

Так этой сделал это для меня:

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

затем с моего хоста моя машина в поле запуска просто сделайте это \{ip nanoserver}\C$