我正在尝试结束我从作为SYSTEM运行的任务中生成的PowerShell窗口。我没有进程的ID,因为我通过psexec启动它以便能够设置会话ID。任务和目标PowerShell流程在不同的会话中。
我认为设置一个窗口标题然后查询窗口标题会很简单,但是由于在系统下运行的进程似乎没有看到窗口标题,所以我正在遇到问题。例如,当我以用户身份运行get-process powershell | format-table -property Name, MainWindowTitle
时,我得到了:
Name MainWindowTitle
---- ---------------
powershell Administrator: C:\Windows\System32\cmd.exe
powershell My Title
powershell
当我在系统帐户下运行相同的命令时,我得到:
Name MainWindowTitle
---- ---------------
powershell
powershell
powershell
我不确定这里发生了什么。有没有办法从SYSTEM帐户中获取MainWindowTitle
?如果没有,是否有其他我可以查询的东西会返回我的powershell窗口并让其他任何PowerShell进程运行?
我在Window 7 x64
Name Value
---- -----
CLRVersion 2.0.50727.5477
BuildVersion 6.1.7601.17514
PSVersion 2.0
WSManStackVersion 2.0
PSCompatibleVersions {1.0, 2.0}
SerializationVersion 1.1.0.1
PSRemotingProtocolVersion 2.1
答案 0 :(得分:0)
如果您想要杀死该进程的命令行有一些独特之处,也许您可以使用以下内容:
Get-CimInstance Win32_Process -Filter "Name='powershell.exe'" |
Where-Object { $_.CommandLine -match $commandLineToMatch } |
ForEach-Object { Stop-Process -WhatIf -Id $_.ProcessId }
我添加了-WhatIf用于测试目的。
答案 1 :(得分:0)
您需要在Win32_Process对象上调用GetOwner()方法以获取启动该进程的用户。
Get-WmiObject -Class Win32_Process -Filter "Name='powershell.exe'" | ForEach-Object {
if ($_.GetOwner().User -match 'system') {
$_.Terminate()
}
}