获取进程的所有者,向他们发送消息框,然后终止进程
Get a process's owners, send them messagebox and then kill the processes
我试图获取一个用户列表,他们是 运行 一个应用程序,例如 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:\windows\system32\msg.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 可以终止进程
当你的代码有一些错误时post在这里,我会尽力帮助
Chrome 即使只打开一个选项卡,通常也会启动多个进程。您需要 select 唯一的用户名以避免出现多个弹出消息。您可以使用:
(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:\windows\system32\msg.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.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:\windows\system32\msg.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 可以终止进程
当你的代码有一些错误时post在这里,我会尽力帮助
Chrome 即使只打开一个选项卡,通常也会启动多个进程。您需要 select 唯一的用户名以避免出现多个弹出消息。您可以使用:
(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:\windows\system32\msg.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
它工作正常!