4

次のことを行うpowershellスクリプトを作成しようとしています:

  1. リモート マシン (コンピュータのテキスト リスト) にフォルダが存在するかどうかを確認し、存在する場合は削除します。
  2. リモート共有から同じマシンにフォルダーをコピーし、エラーがあればエラー ログ ファイルに出力し、そうでなければ成功ログ ファイルに出力します。

検索しましたが、一見単純な問題の解決策を見つけることができませんでした。以下のコードを参照してください。

$computers=Get-Content C:\pcs.txt
$source="\\RemoteShare\RemoteFolder"
$dest="C$\Program Files\Destination"


  foreach ($computer in $computers) {

        If (Test-Path \\$computer\$dest){
            Remove-Item \\$computer\$dest -Force -Recurse 
                }
    Copy-Item $source \\$computer\$dest -recurse -force -erroraction silentlycontinue

    If (!$error)
{Write-Output $computer | out-file -append -filepath "C:\logs\success.log"}
Else
{Write-Output $computer | out-file -append -filepath "C:\logs\failed.log"}

}

現在、スクリプトが実行されると、失敗したかどうかに関係なく、すべてが failed.log ファイルに記録されます。

forループの実行中に、powershellでエラーを適切に処理するにはどうすればよいですか?

4

2 に答える 2

4

は使用しないでください$error。最後のコマンドが成功した場合でも、常に最近のエラー オブジェクトの配列が含まれます。最後のコマンドの結果を確認するには、 を使用$?します。最後のコマンドが失敗した場合は false になります。

これらの変数の詳細については、about_Automatic_Variablesを参照してください。

于 2013-11-05T03:04:30.953 に答える