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

Я видел похожие сообщения в других местах, где они не использовали второй foreach, но я пробовал это, и это не сработало , вот так:

foreach ($server in $servers)
{net use $server /USER:domain\username password
{copy-item -Path $file -Destination $server$dest}}}

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

2
задан 17 June 2016 в 00:41
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 для использования имени пользователя и паролей, чтобы вы не писали их в виде обычного текста.

2
ответ дан 3 December 2019 в 11:32

Теги

Похожие вопросы