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

Другие вопросы по тегам