Я пишу сценарий PowerShell, который хочу запустить с сервера A. Я хочу подключиться к серверу B и скопировать файл на сервер A в качестве резервной копии.
Если это невозможно сделать, я хотел бы подключиться к серверу B с сервера A и скопировать файл в другой каталог на сервере B.
Я вижу Copy-Item
команду, но не понимаю, как дать ей имя компьютера.
Я бы подумал, что могу сделать что-то вроде
Copy-Item -ComputerName ServerB -Path C:\Programs\temp\test.txt -Destination (not sure how it would know to use ServerB or ServerA)
Как я могу это сделать?
powershell
powershell-2.0
chobo2
источник
источник
Ответы:
Это работает только тогда, когда сеанс PowerShell выполняется под пользователем, имеющим права на оба административных общих ресурса.
Я предлагаю использовать обычный сетевой ресурс на сервере B с доступом только для чтения для всех и просто позвонить (с сервера A):
Copy-Item -Path "\\\ServerB\SharedPathToSourceFile" -Destination "$Env:USERPROFILE" -Force -PassThru -Verbose
источник
Copy-Item -FromSession
).Начиная с версии PowerShell 5 и выше (включенной в Windows Server 2016, загружаемой как часть WMF 5 для более ранних версий ), это возможно с помощью удаленного взаимодействия. Преимущество этого в том, что он работает, даже если по какой-либо причине вы не можете получить доступ к общим ресурсам.
Чтобы это работало, в локальном сеансе, в котором инициируется копирование, должен быть установлен 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
.источник
scp
болееssh
на Linux ... нет необходимости возиться с надоедливыми акциями!Используйте
net use
или,New-PSDrive
чтобы создать новый диск:New-PsDrive: создать новый PsDrive, видимый только в среде PowerShell:
Чистое использование: создать новый диск, видимый во всех частях ОС.
источник
New-PSDrive : A specified logon session does not exist. It may already have been terminated
-> Я думаю, что предыдущий сеанс все еще продолжается -> Итак, я попытался использоватьRemove-PSDrive
-> все еще не работает. Тожеnet use <driveLetter> /delete
не помогло. Что еще я могу сделать, чтобы запустить эту команду в конфигурации сборки программного обеспечения?New-PSDrive
два раза, которые должны были бытьA drive with the name 'Y' already exists.
На всякий случай, если для доступа к удаленному файлу требуются ваши учетные данные, вы можете сгенерировать объект 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)
источник
Ни один из приведенных выше ответов не помог мне. Я продолжал получать эту ошибку:
Так что это сделало это для меня:
netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=yes
Затем с моего хоста моя машина в поле Run я только что сделал это:
источник