杀死特定的powershell窗口

时间:2014-05-02 16:20:22

标签: windows powershell

我正在尝试结束我从作为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

2 个答案:

答案 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()

    }
}