Powershell 获取进程的所有者,向他们发送messagebox,然后终止进程

Powershell 获取进程的所有者,向他们发送messagebox,然后终止进程,powershell,messagebox,countdowntimer,system-administration,Powershell,Messagebox,Countdowntimer,System Administration,我正在尝试获取运行应用程序的用户列表,例如chrome.exe。然后向他们发送一条消息,并将倒计时设置为300秒,然后我需要停止这些进程。我尝试了以下PowerShell 答案是封闭的。下面您可以看到一个解决方案: 使用此代码,您可以获得进程所有者的 $Get WmiObject-Class Win32_进程-Filter Name='chrome.exe'-ComputerName client.GetOwner 使用此代码,您可以显示messagebox [System.Reflection

我正在尝试获取运行应用程序的用户列表,例如chrome.exe。然后向他们发送一条消息,并将倒计时设置为300秒,然后我需要停止这些进程。我尝试了以下PowerShell

答案是封闭的。下面您可以看到一个解决方案:
使用此代码,您可以获得进程所有者的

$Get WmiObject-Class Win32_进程-Filter Name='chrome.exe'-ComputerName client.GetOwner

使用此代码,您可以显示messagebox

[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
[System.Windows.Forms.MessageBox]::Show("Message")
通过停止进程,您可以终止进程


当您的代码出现一些错误时,请将其发布到此处,我将尝试帮助您使用此代码,您可以获得流程所有者的信息

$Get WmiObject-Class Win32_进程-Filter Name='chrome.exe'-ComputerName client.GetOwner

使用此代码,您可以显示messagebox

[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
[System.Windows.Forms.MessageBox]::Show("Message")
通过停止进程,您可以终止进程


当您的代码出现一些错误时,请将其发布到此处,我将尝试帮助您启动多个进程,即使只打开了一个选项卡。您需要选择唯一的用户名,以避免出现多个弹出消息。您可以使用:

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

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

即使只打开一个选项卡,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:\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

这是正确的

感谢所有帮助我的人,所以我编写了当前代码:

$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-时,我收到一条消息:Get WmiObject:RPC服务器不可用。您必须更改ComputerName。客户就是一个例子。如果要在本地执行,请使用LocalHost感谢您的帮助,代码$Get WMIOObject-Class Win32_Process-Filter Name='chrome.exe'-ComputerName LRUS2701120.getowner.user | select-Unique works。那么,我如何设置用户数组,并将其发送给msgbox呢?请查看Rich Prescott的脚本,同时确保您已启用远程PowerShell。因此,我键入了下一个代码:$USERLIST=Get WmiObject-Class Win32_Process-Filter Name='concentr.exe'-ComputerName SRUS270138C.getowner.user ForEach$computer in$list{$CmdMessage={C:\windows\system32\msg.exe*$computer'您必须在5分钟内取消会话'}$CmdMessage | Invoke Expression}但是,此消息为所有用户显示,此循环为n个用户显示n条消息,每个用户看到n条消息…当我尝试运行$Get WmiObject-Class Win32_Process-Filter Name='chrome.exe'-ComputerName client.GetOwner-时,我收到一条消息:Get WmiObject:RPC服务器不可用。您必须更改ComputerName。客户端作为example.如果你想在本地执行,那么使用localhost谢谢你的帮助,代码$Get WmiObject-Class Win32_Process-Filter Name='chrome.exe'-ComputerName LRUS2701120.getowner.user | select-Unique works。那么我如何设置用户数组并发送给他们msgbox呢?请查看Rich Prescott的脚本,并确保你已经启用了它远程powershellso,我键入了下一个代码:$USERLIST=Get WmiObject-Class Win32_进程-Filter Name='concentr.exe'-ComputerName SRUS270138C.getowner.user ForEach$computer in$USERLIST{$CmdMessage={C:\windows\system32\msg.exe*$computer'您必须在5分钟内取消会话'}$CmdMessage |调用表达式}但是这个消息显示给所有用户,这个循环显示n个用户的n条消息,每个用户看到n条消息。。。