获取进程的所有者,向他们发送消息框,然后终止进程



我试图获得正在运行应用程序的用户列表,例如chrome.exe。然后给他们发个消息,设置300秒的倒数计时器,之后我需要停止这些过程。我已经尝试了以下PowerShell .

$owners = @{} 
gwmi win32_process | % {
    $owners[$_.handle] = $_.getowner().user
}
get-process | select processname,Id,@{l="Owner";e={$owners[$_.id.tostring()]}}

答案已关闭。下面你可以看到一个解决方案:

$USERLIST = (Get-WmiObject -Class Win32_Process -Filter "Name='tsappldr.exe'" -ComputerName "SRUS270137C").getowner().user
ForEach ($computer in $USERLIST) {
$CmdMessage = {C:windowssystem32msg.exe   $computer  /v 'Cancel your session'} $CmdMessage | Invoke-Expression 
}
Start-Sleep -m 5  #time-out for 5 minutes
get-process tsappldr, tpedrte  | stop-process -force

Chrome通常启动几个进程,即使只打开一个选项卡。您需要选择唯一的用户名,以避免出现多个弹出消息。你可以使用:

(Get-WmiObject -Class Win32_Process -Filter "Name='chrome.exe'" -ComputerName "TargetPCName").getowner().user|select -Unique

你能提供更多关于你的场景的信息吗?

感谢所有帮助我的人,所以我写了现在的代码:

$USERLIST = (Get-WmiObject -Class Win32_Process -Filter "Name='tsappldr.exe'" -ComputerName "SRUS270137C").getowner().user
ForEach ($computer in $USERLIST) {
$CmdMessage = {C:windowssystem32msg.exe   $computer  /v 'Cancel your session'} $CmdMessage | Invoke-Expression 
}
Start-Sleep -m 5  #time-out for 5 minutes
get-process tsappldr, tpedrte  | stop-process -force

它工作正确!

使用此代码,您可以获得进程所有者

$(Get-WmiObject -Class Win32_Process -Filter "Name='chrome.exe'" -ComputerName client).GetOwner()

使用这段代码,您可以显示一个消息框。

[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
[System.Windows.Forms.MessageBox]::Show("Message")

使用Stop-process你可以终止一个进程

当你有一些错误与你的代码张贴在这里,我会尽量帮助

相关内容

最新更新