Назад | Перейти на главную страницу

Как скопировать файл на сетевые ресурсы, используя пути 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}}}

Спасибо за любую помощь, которую мне в этом могут оказать. Я уверен, что это что-то действительно простое, чего мне просто не хватает.

При использовании файловых систем сетевых ресурсов и путей 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 для использования имени пользователя / паролей, чтобы вы не писали их в виде обычного текста.