私はかなり単純なことをしようとしています、そして概念的にはそれはうまくいくはずですが、それはそうではありません、そして私は理由がわかりません。複数のサーバー上の複数のフォルダーにコピーする必要があるファイルがあります。私は午前中ずっとさまざまな解決策を探して試してきました。これが私がうまくいくはずだと私が持っているものです:
$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をヒットし、最初のサーバー名を取得し、Net Useを実行して自分の資格情報をコンピューターにキャッシュし、2番目のforeachをヒットし、最初のパスを取得して、最初のサーバーの最初のパスにファイルをコピーします、次にファイルを最初のサーバーの2番目のパスなどにコピーします。パスの最後で、最初のforeachに戻り、2番目のサーバーに移動して、2番目のサーバーのパスのリストを調べます。 、そしてずっと。
2番目のforeachを使用しない他の場所で同様の投稿を見たことがありますが、これを試したところ、次のように機能しませんでした。
foreach ($server in $servers)
{Net Use $server /USER:domain\username password
{copy-item -Path $file -Destination $server$dest}}}
誰もがこれについて私に与えることができる助けをありがとう。それは私が見逃しているだけの本当にシンプルなものだと確信しています。
ネットワークリソースファイルシステムとUNCパスを使用する場合は、Powershellでfilesystem::
PSProviderを使用する必要があります。次に例をいくつか示します。
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
を使用して、プレーンテキストで記述しないようにする必要があります。