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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何找出CMD.exe进程在远程计算机上运行的脚本?相关的知识,希望对你有一定的参考价值。

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

如果我是本地人我可以跑

Get-Process | Where-Object {
    $_.Name -eq "cmd"
} | ft name, MainWindowTitle

这至少会让我描述一下CMD.exe正在做什么。

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

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

答案

补充Nas' helpful solution

查询进程的命令行是最佳选择,因为在远程处理期间,与MainWindowTitle等GUI相关的属性基本上不可用。

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

  • 如果脚本是从首次单独打开的交互式控制台窗口启动的,那么您将只看到"C:WINDOWSsystem32cmd.exe"作为命令行,而不是脚本的路径。
  • 如果脚本是从文件资源管理器或其他GUI方法或通过API调用启动的,您将在命令行中看到脚本文件路径,例如, C:WINDOWSsystem32cmd.exe /c ""C:UsersjdoesomeScript.cmd" " 但是,即使这样,也不一定是当前正在运行的脚本,例如,启动脚本稍后会调用另一个脚本。

相比之下,如果您的脚本启动了执行实际工作的外部可执行文件,那么最好的办法是直接查询此类可执行文件;例如,如果您的脚本启动foo.exe,请使用:

(Get-CimInstance -ComputerName $comp -ClassName Win32_Process -Filter "Name = 'foo.exe'").CommandLine
另一答案
Get-CimInstance -ComputerName . -ClassName Win32_Process -Filter "Name = 'cmd.exe'" -Property Name,CommandLine | ft Name,CommandLine
另一答案
$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}

以上是关于如何找出CMD.exe进程在远程计算机上运行的脚本?的主要内容,如果未能解决你的问题,请参考以下文章

找出谁在远程机器上运行进程

如何获得在没有 WMI 的远程计算机上运行的进程的所有者

如何使用SSH在远程计算机上运行shell脚本?

尝试使用模拟在远程计算机上运行 PowerShell 脚本时“不允许请求的注册表访问”

在远程计算机上使用 rsh 运行命令

如何在sbt脚本中运行远程ssh命令?