0

PowerShell の能力を向上させようとしています。noobスクリプトで申し訳ありません。サーバーのリストに対して次のことを実行するループに取り組んでいます。

  • 古いフォルダを削除します
  • 新しいディレクトリを作成します
  • サーバーリスト上のあるホストから別のホストにディレクトリをコピーする
  • 古いフォルダBを削除
  • コピーしたディレクトリ内のファイルの名前を変更します

これはおそらく非効率的であり、間違ったループである可能性があります。実行すると、コマンドはすべて正常に機能しますが、リスト内の他のサーバーには移動しません。私は何か間違ったことをしていると思いますが、何かアイデアはありますか?

$strComputers = get-content c:\temp\serverlist3.txt
$source = "\\server\OS\Temp\WSUS\"
$destination = "\\$strComputer\OS\temp\wsus"
$renamea = "\\$strComputer\OS\TEMP\WSUS\clientwsusInstall-win2008-new.cmd"
$renameb = "\\$strComputer\OS\TEMP\WSUS\clientwsusInstall-win2003-new.cmd"
$destinationc = "\\$strComputer\OS\temp\Wsus-new"

# Run through the Array of Computers 

##remove old wsus dir
foreach ($strComputer in $strComputers) { 
rm -r $destination
new-item -type directory -path $destination
robocopy $source $destination
rm -r $destinationc
rni -path $renamea clientwsusInstall-win2008.cmd
rni -path $renameb clientwsusInstall-win2003.cmd
}

ご入力ありがとうございます!!

4

1 に答える 1

3

問題は簡単です。

ループ外ではなく、ループ内で変数を割り当てる必要があります。

これを試して:

$strComputers = get-content c:\temp\serverlist3.txt
$source = "\\MGWSUS1\OS\Temp\WSUS\"

# Run through the Array of Computers 

##remove old wsus dir
foreach ($strComputer in $strComputers) { 

# Only now can the variables be assigned correctly on each iteration.
# ------------------------------------------------------------------
$destination = "\\$strComputer\OS\temp\wsus"
$renamea = "\\$strComputer\OS\TEMP\WSUS\clientwsusInstall-win2008-new.cmd"
$renameb = "\\$strComputer\OS\TEMP\WSUS\clientwsusInstall-win2003-new.cmd"
$destinationc = "\\$strComputer\OS\temp\Wsus-new"

rm -r $destination
new-item -type directory -path $destination
robocopy $source $destination
rm -r $destinationc
rni -path $renamea clientwsusInstall-win2008.cmd
rni -path $renameb clientwsusInstall-win2003.cmd
}

そして今、自分を平手打ち;)

于 2013-06-13T16:12:10.743 に答える