Я пытаюсь сделать что-то довольно простое, и концептуально это должно работать, но это не похоже, и я не уверен, почему. У меня есть файл, который нужно скопировать в несколько папок на нескольких серверах. Я' все утро искал и пробовал разные решения. Вот что у меня есть, что, как мне кажется, должно сработать:
$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, перейдет ко второму server, и просмотрите список путей на втором сервере, и так далее.
Я видел похожие сообщения в других местах, где они не использовали второй foreach, но я пробовал это, и это не сработало , вот так:
foreach ($server in $servers)
{net use $server /USER:domain\username password
{copy-item -Path $file -Destination $server$dest}}}
Спасибо за любую помощь, которую может мне в этом оказать. Я уверен, что это что-то действительно простое, чего мне просто не хватает.
При использовании файловых систем сетевых ресурсов и путей 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
для использования имени пользователя и паролей, чтобы вы не писали их в виде обычного текста.