私はPSにまったく慣れていないので、Foo.(ps1 | pl | py | bar)などのスクリプトが実行を開始したときに検出する方法を考え出そうとしていました。これにより、そのイベントでpowershellスクリプトを実行できるようになります。 . MSDNの次の例を使用して開始し、if ステートメントを追加して、PS 実行以外のすべてをフィルター処理しました。
$Query = 'SELECT * FROM Win32_ProcessStartTrace'
$action = {
$e = $Event.SourceEventArgs.NewEvent
if($e.ProcessName -eq "powershell.exe") {
$fmt = 'ProcessStarted: (ID={0,5}, Parent={1,5}, Time={2,20}, Name="{3}")'
$msg = $fmt -f $e.ProcessId, $e.ParentProcessId, $event.TimeGenerated, $e.ProcessName
Write-host -ForegroundColor Red $msg
}
}
Register-WmiEvent -Query $Query -SourceIdentifier ProcessStart -Action $Action
コードは powershell インスタンスがいつ開始されたかを検出するようになりましたが、インスタンスに渡された引数にアクセスしてフィルター処理する方法が見つかりませんでした。他の PS スクリプトではなく、Foo スクリプトに対してのみアクションを実行するようにしたいと思います。開始された powershell プロセスの引数にアクセスする方法はありますか?