2

У меня была небольшая программа на F # (похожая на C #), которая получает процессы по имени, затем фильтрует конкретную по ее пути и ожидает ее выхода:

let processes = Process.GetProcessesByName("MyProcessName")
if (processes.Length > 0) 
    then for proc in processes do
            if (proc.MainModule.FileName = "C:\Example\MyProcessName.exe")
                then proc.WaitForExit()

Но этот код работает только на локальном компьютере. Теперь я хочу добиться такой же функциональности на удаленном компьютере.

Вот почему я выбираю PowerShell (я новичок в этом).

Можно ли отфильтровать процесс по его пути и дождаться его завершения, используя одну строку в powershell? Если нет, может быть, вы можете предоставить более длительное решение?

Как я выполню эту строку на удаленном компьютере, у меня уже есть идея. Все, что мне нужно, это просто магическая линия.

РЕДАКТИРОВАТЬ: На самом деле эта строка должна работать на локальной машине, потому что я собираюсь передать его с помощью msdeploy, который выполняет его на удаленной машине в качестве локальной команды.

2 ответа2

0

Потратил некоторое время на игру с powershell и, наконец, получил то, что хотел:

powershell.exe ps | ? { $_.path -eq 'c:\windows\system32\notepad.exe' } | Foreach-object { $_.WaitForExit() }
0

В идеале вы должны вызывать Wait-Process на целевой машине. Смотрите этот пост для получения подробного кода:https://stackoverflow.com/questions/18341767/powershell-check-on-remote-process-if-done-continue

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .