【问题标题】:Kill only a specific Command Prompt Process Remotely with PowerShell使用 PowerShell 仅远程终止特定的命令提示符进程
【发布时间】:2018-10-16 13:20:40
【问题描述】:

我正在尝试编写一个脚本来远程终止特定的命令提示符进程。 如果我在本地运行 get-process,我可以看到 CMD.exe 进程可以通过“MainWindowTitle”字段中设置的内容来缩小范围

如果我使用 Get-Process -计算机名称或获取 CIMInstance,则“MainTitleWindow”字段将返回为空白。

$ses = New-CimSession -ComputerName $computer -Credential $cred
$process = Get-CimInstance -ClassName CIM_process -CimSession $ses -filter "name = 'cmd.exe'"
$process | Select-Object name,MainWindowTitle
Remove-CimSession -CimSession $ses


name    MainWindowTitle
----    ---------------
cmd.exe

【问题讨论】:

    标签: powershell command-prompt get-wmiobject


    【解决方案1】:

    摘自 MSDN

    只有当一个进程有一个与之关联的主窗口 一个图形界面。如果关联进程没有主 窗口(因此 MainWindowHandle 为零),MainWindowTitle 为空 字符串(“”)。

    更多信息here

    我尝试与其他进程进行比较,但结果是一样的......

    【讨论】:

      【解决方案2】:

      您可以解析tasklist 命令的输出。像这样:

      $cmds = tasklist /v |
          Where-Object {$_ -like "cmd.exe*"} |
          ForEach-Object {
              New-Object -TypeName PSObject -Prop @{"ID"=[int]$_.Substring(30,5); `
                                                    "Title"=$_.Substring(157)}
          }
      
      $cmds
      

      【讨论】:

      • 如何为远程 PC 执行此操作。
      • 它应该与 S 参数一起使用:tasklist /v /s COMPUTER,但我现在无法测试。
      • 遗憾的是,远程会话没有返回窗口标题(我试过 /s COMPUTERNAME)
      【解决方案3】:

      $Process = Get-CimInstance CIM_Process -CimSession $Ses | Where-Object{ $ProcessNames -包含 $_.Name }

      使用它您还可以获得 ProcessID 和 ParentProcessID。 然后,您可以使用类似的命令来查找使用主脚本的 ParentProcessID 的 CMD 进程。 您必须同时关闭脚本的主进程和命令提示符,否则脚本将继续运行。

      【讨论】:

      • 试过了,但在本地或远程看不到窗口标题
      猜你喜欢
      • 1970-01-01
      • 2015-05-05
      • 2018-03-30
      • 1970-01-01
      • 1970-01-01
      • 2013-06-12
      • 2010-10-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多