0

次のスクリプト (AppMgmt サービスが停止すると IIS サービスを停止します) は、「PowerGUI スクリプト エディター」で正常に実行されますが、コンソール「powershell -file path_to_script」から実行すると、イベントが発生したときにアクションが実行されません。

function Watch-MyService()
{
   $query = "SELECT * FROM __InstanceModificationEvent WITHIN 2 " +
             "WHERE TargetInstance Isa 'Win32_Service' " +
             "AND TargetINstance.Name = 'AppMgmt'" +
             "AND TargetInstance.State = 'Stopped'"

    $action = 
    { 
        Write-Host "stopping service # 2" 
        Stop-Service 'W3SVC' -Force
    }
    Write-Host "registering event"  
    Register-WMIEvent -query $query -SourceIdentifier "ControllerSvcEvent" -action $action
}

Watch-MyService

コンソールでは、次のみが表示されます。

イベントの登録

ただし、「AppMgmt」サービスを停止しても何も表示されず、コンソールへの出力はなく、IIS サービスは影響を受けません。

コンソールは管理者権限で開始されます。

4

1 に答える 1

2

この方法でコマンド プロンプトから PowerShell スクリプトを実行すると、スクリプトが実行された後、PowerShell プロセスが終了する可能性があります (タスク マネージャーを開いて、スクリプトが終了するとすぐに PowerShell プロセスが停止するのを確認します)。プロセスが終了したため、イベントのリスナー (PowerShell) は実行されていません。イベント登録のスコープは、PowerShell セッションのスコープに限定されます。

于 2012-12-28T21:28:21.337 に答える