1

ISE で PowerShell スクリプトを実行する場合と CMD プロンプトから実行する場合の動作の違いを経験しています。

このスクリプトの目的は、Microsoft の DPM (データ保護管理) サービスのアクティブなアラートを確認することです。12 時間より古いものが見つかった場合は、「DPM アラート」イベント ログにエラーが記録されます。

ISE でスクリプトを開発しましたが、完全に機能しているように見えました。だから私はそれをScheduled tasksに追加しましたが、そこでは私が望んでいたことをしていませんでした。最終的に、アラートの経過時間をテストするロジックを取り除き、現在アクティブなアラートのリストを取得するだけにしました。

$serverName = "my_server_name"

$dpmServer = Connect-DPMServer $serverName
$dpmServer.AlertController.RefreshAlerts()
$activeAlerts = $dpmServer.AlertController.ActiveAlerts

if  (!$activeAlerts) {"no active alerts found"}
else {$activeAlerts}

PSConsoleFile 経由で DPM スナップインを読み込んでいます。CMD から実行しているコマンドは次のようになります。

 powershell -psconsole .\DPMConsoleFile.psc1 -file .\DPMAlertChecker.ps1�

�</p>

$dpmServer オブジェクトのみを表示する行を含めると、正しい情報が表示されるため、スナップインが正しく読み込まれていることがわかります。

これを PowerShell ISE (または DPM 管理シェル) から実行すると、問題なく動作し、アクティブなアラート (存在する場合) のリストが表示されます。上記の構文を使用してコマンド ラインから実行すると、機能しません。$dpmServer.alertcenter.activealerts具体的には、コマンドからアラートを返しません。

違いはなんですか?

4

1 に答える 1

0

問題が見つかりました。Connect-DPMServerを使用して DPM サーバーに接続してからアラートが表示されるまでには、わずかな遅延があるようです。

ループ run andwhile (!$alerts)内に andの効果にループを追加しました。約 10 秒後に、アクティブなアラートを確認して対応できるようになりました。refreshAlerts()alertController.ActiveAlerts

ISE で実行すると、実行間で変数が保持されるため、接続が発生するのに十分な時間がありました。「powershell -file scriptname」を使用して呼び出すと、接続が確立される前にシェルが終了しました。

于 2013-03-11T15:16:37.113 に答える