Как узнать, какой сценарий запускает процесс CMD.exe на удаленной машине? - PullRequest
0 голосов
/ 17 октября 2018

У меня есть сервер с несколькими критически важными сценариями, которые запускаются в окнах CMD.exe как зарегистрированный пользователь.Мне нужно иметь возможность удаленно выполнять любой из этих сценариев по отдельности.

Если я локальный, я могу запустить

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

, и это, по крайней мере, даст мне описание того, что это CMD.exe делает.

Но если я использую какой-либо метод для запуска этого удаленно (PSSession или CIMSession), MainWindowTitle не будет возвращен.Он всегда будет пустым.

Кто-нибудь может предложить какие-либо другие способы выяснения, какой скрипт запускается удаленно через PowerShell.

Ответы [ 3 ]

0 голосов
/ 18 октября 2018

В дополнение к полезное решение Nas :

Запрос процесса ' Командная строка - ваш лучший вариант , потому что GUIсвязанные свойства, такие как MainWindowTitle, принципиально недоступны при удаленном взаимодействии .

Однако, позволяет ли командная строка идентифицировать работающий скрипт (пакетный файл), зависит от того, каким сценарием был изначальноlaunch :

  • Если скрипт был запущен из окна интерактивной консоли, которое было впервые открыто отдельно, в командной строке вы увидите только "C:\WINDOWS\system32\cmd.exe", а не скриптпуть.

  • Если скрипт был запущен из Проводника, другого метода графического интерфейса или через вызов 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
0 голосов
/ 07 ноября 2018
$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}
0 голосов
/ 17 октября 2018
Get-CimInstance -ComputerName . -ClassName Win32_Process -Filter "Name = 'cmd.exe'" -Property Name,CommandLine | ft Name,CommandLine
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...