我有一台服务器,该服务器具有几个作为登录用户在CMD.exe窗口中运行的关键任务脚本。 我需要能够分别远程控制其中任何一个脚本。
如果我是本地人,我可以运行
Get-Process | Where-Object {
$_.Name -eq "cmd"
} | ft name, MainWindowTitle
这至少将为我提供CMD.exe
正在做什么的描述。
但是,如果我使用任何方法(PSSession或CIMSession)远程运行此方法,则不会返回MainWindowTitle。它将始终为空白。
任何人都可以建议其他方法来找出正在通过PowerShell远程运行什么脚本的情况。
答案 0 :(得分:3)
查询进程的命令行是您的最佳选择,因为与MainWindowTitle
)在远程处理过程中根本不可用 strong>。
但是,命令行是否允许您识别正在运行的脚本(批处理文件)取决于该脚本最初的启动方式:
如果脚本是从首先单独打开的交互式控制台窗口启动的,则您只会看到"C:\WINDOWS\system32\cmd.exe"
作为命令行,而不是脚本的路径。
如果脚本是通过文件资源管理器或其他GUI方法启动的,或者通过API调用启动的,则将在命令行中查看脚本文件路径,例如,
C:\WINDOWS\system32\cmd.exe /c ""C:\Users\jdoe\someScript.cmd" "
相反,如果您的脚本启动执行实际工作的外部可执行文件 ,则最好的选择是直接查询此类可执行程序 ;例如,如果您的脚本启动foo.exe
,请使用:
(Get-CimInstance -ComputerName $comp -ClassName Win32_Process -Filter "Name = 'foo.exe'").CommandLine
答案 1 :(得分:0)
Get-CimInstance -ComputerName . -ClassName Win32_Process -Filter "Name = 'cmd.exe'" -Property Name,CommandLine | ft Name,CommandLine
答案 2 :(得分:0)
$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}