4

ファイルをリモート マシンのリストにコピーする小さなスクリプトがあります。このスクリプトでは、次を使用します。

Copy-Item "$AppLocation\$AppName" -destination "\\$MachineName\c$\" -force

これにより、さまざまな種類のエラーがスローされる可能性があります。これでエラーが発生した場合は、エラーをファイルに記録して続行します。私の質問は、Copy-Item コマンドが成功したかどうかを確認する正しい方法を知りたいということです。

次の質問は関連しています:

psexec \\$MachineName -u $RemoteLogin -p $Remotepassword -s -i -d C:\$AppName

このコマンドがどのように実行されたかを調べるには、どのような方法がよいでしょうか? コンソールに 0 で終了したというメッセージが表示されますが、戻りコードをローカル変数に取得する方法がわかりません。

これも使用できます。
(Get-WMIObject -ComputerName $MachineName -List | Where-Object -FilterScript {$_.Name -eq "Win32_Product"}).Install("C:\$AppName","","false")
これは正常に動作しますが、出力を読まないと成功したかどうかを確認する方法がわかりません。

ありがとう!

4

4 に答える 4

2

質問の最初の部分に関しては、使用できます

Copy-Item ... -ErrorAction Continue -ErrorVariable yourVariable

エラー アクションは、エラーの場合に何をすべきかをコマンドレットに指示します。

$? 自動変数には、最後の操作の実行ステータスが含まれます。それが false の場合は、 $yourVariable の内容を確認して何が問題なのかを確認し、必要なことを行います (この場合はファイルに書き込むなど)。

使用することもできます

Copy-Item ... -ErrorAction Continue 2> [pathToLogFile]

これにより、コマンドレットのエラー ストリームが選択したファイルにリダイレクトされます...

質問の 2 番目の部分について: $LASTEXITCODE には、最後の実行可能ファイルのリターン コードが含まれています。

制御を強化するために Powershell 2 のリモート機能を使用することを検討しましたか?

それが役に立てば幸い

セドリック

于 2009-12-04T13:07:13.017 に答える
2

次のようにTry and catchを使用します

$ErrorActionPreference='Stop'
Try{
Write-Host "Finished OK"
}
Catch [system.exception]
{
    Write-Host "Finished with Error"
    Write-Host $_.Exception.ToString()
    exit -1
}
于 2012-06-22T09:09:10.660 に答える
0

古いファイルを削除するには、powershell スクリプトを使用します。これにより、画面にメッセージが出力され、イベント ログにメッセージを簡単に書き込むことができます。詳細はこちら

イベント ログへの書き込みは、Write-EventLog コマンドで実行できます。詳細については、MSDNTechNetを参照してください。これについても、検索エンジンに大量の情報が表示されます。

于 2009-12-04T13:06:58.727 に答える