我对 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 实例何时启动,但我还没有找到访问和过滤传递给实例的参数的方法。我想确保我只对 Foo 脚本而不是任何其他 PS 脚本采取行动。有没有办法访问已启动的 powershell 进程的参数?