gpt4 book ai didi

powershell - 根据应用程序用户名检测应用程序关闭

转载 作者:行者123 更新时间:2023-12-03 06:54:43 24 4
gpt4 key购买 nike

一直在尝试创建脚本来检测用户的应用程序崩溃。 (假设计算机被多个用户使用)

到目前为止,仅设法得出以下代码来仅查询应用程序(基于用户名),但不能查询应用程序关闭或崩溃

gwmi -query "select * from win32_process where name='calc.exe'" | %{if($_.GetOwner().User -eq 'myUser'){
#do something when app crash
}}

最佳答案

您可以使用Register-WmiEvent用于使用 Win32_ProcessStopTrace 注册事件的 cmdlet事件类。

Win32_ProcessStopTrace 没有 GetOwner() 方法,但您可以使用当前代码来收集您感兴趣的进程的进程 ID,并在您的事件查询中使用它们:

$UserName = 'myUser'
$ProcessName = 'calc.exe'
$PIDFilters = Get-WmiObject -Query "SELECT * FROM Win32_Process WHERE Name='$ProcessName'" |Where-Object {
$_.GetOwner().User -eq $UserName
} |Select-Object -ExpandProperty ProcessId |ForEach-Object {
"ProcessId={0}" -f $_
}

$WmiFilter = $PIDFilters -join " OR "

现在,您有一个看起来像这样的 $WmiFilter:

ProcessId=2468 OR ProcessId=11576 OR ProcessId=5426

您可以在 WMI 查询中使用它:

$WmiQuery = "SELECT * FROM Win32_ProcessStopTrace WHERE ($WmiFilter)"

最后使用Register-WmiEvent注册事件:

Register-WmiEvent -Query $WmiQuery -SourceIdentifier CalcStopEvent -Action {
$TraceEvent = $Event.SourceEventArgs.NewEvent
if($TraceEvent.ExitStatus -ne 0){
# The process didn't exit with success/noerror
# Send many emails!
# Sound the klaxon!
# Call the fire brigade!
# or, whatever you feel like ...
}
}

关于powershell - 根据应用程序用户名检测应用程序关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31829651/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com