Windows Server
 Computer >> コンピューター >  >> システム >> Windows Server

Windowsで特定のプログラムが開いたり閉じたりしたときにスクリプト(プログラム)を実行する

この記事では、Windowsで特定のプログラム(プロセス)を起動するイベントを追跡し、アクション(スクリプト、コマンド、プログラムの実行、電子メールの送信など)を実行する方法を示します。例として、notepad.exeプロセスの起動を追跡します。また、ユーザーがメモ帳を開くと、Windowsは特定のPowerShellスクリプトを自動的に実行します。

まず、Windowsでプロセス監査ポリシーを構成します。ローカルグループポリシーエディター( gpedit.msc )を使用して、スタンドアロンコンピューターで監査ポリシーを構成できます。 )。 ADドメイン内のコンピューターとサーバーにポリシーを構成する場合は、グループポリシー管理コンソール( gpmc.msc )を使用します。 。

  1. コンピューターの構成に移動します ->Windowsの設定 ->セキュリティ設定 ->ローカルポリシー ->監査ポリシー;
  2. オープン監査プロセス追跡 プロパティを使用して、成功を有効にします イベント; Windowsで特定のプログラムが開いたり閉じたりしたときにスクリプト(プログラム)を実行する
  3. 次のコマンドを実行してグループポリシー設定を適用します: gpupdate / force

これで、Windowsでプロセスを開始すると、 EventID 4688のイベントが発生します。 (新しいプロセスが作成されました )が[イベントビューア]->[Windowsログ]->[セキュリティ]に表示されます。イベントには、プロセスを実行したユーザーが表示されます(アカウント名 )、プロセスの名前(新しいプロセス名 )、および親プロセスの名前(作成者プロセス名

Windowsで特定のプログラムが開いたり閉じたりしたときにスクリプト(プログラム)を実行する

PowerShellを使用した特定のプロセスによって、イベントログからアプリの起動イベントを選択できます。

Get-WinEvent -FilterHashtable @ {
LogName='セキュリティ'
ID =4688
} | Select-Object TimeCreated、@ {name ='NewProcessName'; expression ={$_。Properties[5].Value}}、@ {name ='User'; expression ={$_。Properties[1].Value}} | where-object {$_。NewProcessName–like“ * notepad.exe *”}

その結果、このコンピューターでユーザーがプログラムを起動した履歴が得られました。

Windowsで特定のプログラムが開いたり閉じたりしたときにスクリプト(プログラム)を実行する

次に、イベントID4688のイベントが表示された場合に実行される新しいタスクをタスクスケジューラに作成します。

  1. タスクスケジューラを開きます( taskschd.msc )そして新しいタスクを作成します->タスクを作成します;
  2. タスク名を指定し、すべてのユーザーに対して実行する必要があることを指定します(タスクを実行するときは、次のユーザーアカウントを使用します-> BUILTIN \ Users )。 GPOを使用してタスクを作成する場合は、次の形式を使用します:%LogonDomain%\%LogonUser%;
  3. アクションについて タブで、実行するアクションを設定します。この例では、PowerShellスクリプトを実行します( powershell.exe を呼び出します) 属性付き: -ExecutionPolicy Bypass -file "C:\ PS \ ProcessRunEvent.ps1 ); Windowsで特定のプログラムが開いたり閉じたりしたときにスクリプト(プログラム)を実行する
  4. 次に、タスクをWindowsイベントにバインドします。 トリガーに移動します タブで、新規を選択します ->イベントについて ->カスタム ->新しいイベントフィルター;
  5. 次のウィンドウで、次のイベントフィルターオプションを指定します。
    イベントログ:セキュリティ
    イベントID: 4686
    キーワード:監査の成功
    Windowsで特定のプログラムが開いたり閉じたりしたときにスクリプト(プログラム)を実行する
  6. 次に、 XMLに移動します タブをクリックして、クエリを手動で編集を有効にします オプション。次の行をフィルターに追加して、クエリを編集します: and * [EventData [Data [@ Name ='NewProcessName'] and(Data ='C:\ Windows \ System32 \ notepad.exe')]]
  7. 次のXMLクエリを取得します:
    <QueryList>
    <Query Id="0" Path="Security">
    <Select Path="Security">
    *[System[Provider[@Name='Microsoft-Windows-Security-Auditing'] and Task = 13312 and (band(Keywords,9007199254740992)) and (EventID=4688)]]
    and
    *[EventData[Data[@Name='NewProcessName'] and (Data='C:\Windows\System32\notepad.exe')]]
    </Select>
    </Query>
    </QueryList>
    

    Windowsで特定のプログラムが開いたり閉じたりしたときにスクリプト(プログラム)を実行する

  8. タスクを保存します。

notepad.exeを実行してみてください。ユーザーがメモ帳を開くたびに、PowerShellスクリプトが自動的に実行されます。

たとえば、PowerShellを使用して、ポップアップ通知を表示したり、電子メールを送信したりできます。

Windowsで特定のプログラムが開いたり閉じたりしたときにスクリプト(プログラム)を実行する

特定のアプリを閉じた後、バックアップスクリプトなどを実行したい場合があります。プログラムの終了を追跡する場合は、イベントID 4869のイベントを使用します。 —プロセスが終了しました

以前、プロセスが停止した場合にプロセスを自動的に再開するPowerShellスクリプトを示しました。プロセスの実行/停止イベントを追跡するソリューションはより洗練されており、実行中のWindowsプロセスを監視するためにPowerShellスクリプトを必要としません。


  1. 必要に応じてWindows10でトラブルシューティングを自動的に実行する

    Microsoft Fixitで始まったものが、今では自動化されたソリューションに成長しました。 Windows 10の一部としてトラブルシューティングを行ってから長い時間が経ちました。Windows10v1903以降、Windowsチームはそれを次のレベルに引き上げています。 推奨されるトラブルシューティングと呼ばれます これにより、コンピューターで発生した問題が自動的に修正され、通知されます。このガイドでは、必要に応じてWindows10でトラブルシューティングを自動的に実行する方法を紹介します。 Windows10でトラブルシューティングを自動的に実行する プログラムはトラブルシ

  2. WindowsでプログラムのCPU使用率を制限する方法は?

    CPUの使用状況を監視することは非常に便利です。これは、CPUが過負荷になっていると、スロットリングが発生し、PC全体のパフォーマンスが低下する可能性があるためです。結局のところ、これはコンピュータで実行する日常のタスクに大きな影響を与える可能性があります。そのため、それほど重要ではない、またはバックグラウンドで実行されているプログラムがCPUリソースの大部分を奪っていないことを確認する必要があります。この記事では、CPUを必要以上に使用している可能性のあるプログラムに対抗するためのさまざまな方法を紹介します。 実は、CPUはコンピューター上で最も重要なコンポーネントの1つです。本当にリソ