Как скопировать файл на сетевые ресурсы, используя UNC-пути
Я пытаюсь сделать что-то довольно простое, и концептуально это должно сработать, но, похоже, это не так, и я не уверен, почему. У меня есть файл, который мне нужно скопировать в несколько папок на нескольких серверах. Я искал и пробовал разные решения все утро. Вот что у меня есть, что я думаю, должно работать:
$servers = @("\\server1.domain.com","\\server2.domain.com","\\server3.domain.com","\\server4.domain.com")
$dests = @("\E$\path1","\E$\path2","\E$\path3","\E$\path4","\E$\path5")
$file = "C:\Users\user\file.txt"
foreach ($server in $servers)
{net use $server /USER:domain\username password
{foreach ($dest in $dests)
{copy-item -Path $file -Destination $server$dest}}}
Логика заключается в том, что он будет обращаться к первому foreach, получать первое имя сервера, использовать сеть для кэширования моих учетных данных на компьютере, нажимать второй foreach, получать первый путь, а затем копировать файл в первый путь на первом сервере. затем скопируйте файл во второй путь на первом сервере и т. д. и т. д. В конце путей он вернется к первому foreach, перейдет на второй сервер и просканирует список путей на втором сервере., и так далее.
Я видел подобные посты в других местах, где они не используют второй foreach, но я попробовал это, и это не сработало, вот так:
foreach ($server in $servers)
{net use $server /USER:domain\username password
{copy-item -Path $file -Destination $server$dest}}}
Спасибо за любую помощь, кто-нибудь может дать мне в этом. Я уверен, что это что-то действительно простое, что я просто скучаю.
1 ответ
При использовании файловых систем сетевых ресурсов и путей UNC следует использовать filesystem::
PSProvider в Powershell. Вот пара примеров:
Test-Path "filesystem::\\127.0.0.1\c$"
Test-Path "filesystem::\\$env:computername\c$"
Адаптировать этот процесс к вашему коду так же просто, как:
foreach ($server in $servers){
net use $server /USER:domain\username password
foreach ($dest in $dests){
copy-item -Path $file -Destination "filesystem::$server$dest"
}#End foreach ($dest in $dests)
}#End foreach ($server in $servers)
Помните, что как профессионал PowerShell, ваш код должен читаться как можно проще. Как и в любом профессиональном письме, стиль имеет значение.
Кроме того, вы должны изучить использование Get-Credential
для использования имени пользователя / паролей, поэтому вы не пишете их в виде простого текста.