Powershell 如何找出CMD.exe进程在远程计算机上运行的脚本?

Powershell 如何找出CMD.exe进程在远程计算机上运行的脚本?,powershell,batch-file,cmd,Powershell,Batch File,Cmd,我有一个服务器,它有几个关键任务脚本,作为登录用户在CMD.exe窗口中运行。 我需要能够远程这些脚本中的任何一个单独 如果我是本地人,我可以跑步 Get-Process | Where-Object { $_.Name -eq "cmd" } | ft name, MainWindowTitle 这至少会给我一个关于CMD.exe正在做什么的描述 但是,如果我使用任何方法远程运行(PSSession或CIMSession),MainWindowTitle将不会返回。它将永远是空白的

我有一个服务器,它有几个关键任务脚本,作为登录用户在CMD.exe窗口中运行。 我需要能够远程这些脚本中的任何一个单独

如果我是本地人,我可以跑步

Get-Process | Where-Object {
    $_.Name -eq "cmd"
} | ft name, MainWindowTitle
这至少会给我一个关于
CMD.exe
正在做什么的描述

但是,如果我使用任何方法远程运行(PSSession或CIMSession),MainWindowTitle将不会返回。它将永远是空白的

任何人都可以建议其他方法,通过PowerShell远程查找正在运行的脚本。

补充:

Get-CimInstance -ComputerName . -ClassName Win32_Process -Filter "Name = 'cmd.exe'" -Property Name,CommandLine | ft Name,CommandLine
查询进程的命令行是最好的选择,因为GUI相关属性(如
MainWindowTitle
)在远程处理过程中基本不可用

但是,命令行是否允许您识别正在运行的脚本(批处理文件),取决于该脚本最初是如何启动的

  • 如果脚本是从第一次单独打开的交互式控制台窗口启动的,您将只看到
    “C:\WINDOWS\system32\cmd.exe”
    作为命令行,而不是脚本的路径

  • 如果脚本是从文件资源管理器或其他GUI方法或通过API调用启动的,您将在命令行中看到脚本文件路径,例如,
    C:\WINDOWS\system32\cmd.exe/C“C:\Users\jdoe\someScript.cmd”

    • 但是,即使这样,如果启动脚本稍后调用另一个脚本,也不一定是当前正在运行的脚本
相比之下,如果您的脚本启动执行实际工作的外部可执行文件,那么最好是直接查询此类可执行进程;e、 例如,如果脚本启动
foo.exe
,请使用:

(Get-CimInstance -ComputerName $comp -ClassName Win32_Process -Filter "Name = 'foo.exe'").CommandLine

所有远程代码都没有用户界面。@TheIncorrigible1:Oops!我确实知道——谢谢你;答案已更新。
$Ses = New-CimSession -ComputerName $Computer -Credential $Cred
$Process = Get-CimInstance CIM_Process -CimSession $Ses | Where-Object{ $ProcessNames -contains $_.Name }

FOREACH ($Proc IN $Process) {Invoke-CimMethod -InputObject $Proc -MethodName Terminate}