У меня есть строка кода Powershell, которая убивает процесс, который выполняется более 30 минут (Excel). Как я могу также получить имя файла убитого процесса?

Get-Process excel | 
    Where { $_.StartTime -lt (Get-Date).AddMinutes(-30) } | 
    Stop-Process -Force

2 ответа2

1

Это работает для меня, но это может быть не так, как вам нужно:

$filename = get-process excel | where-object { $_.StartTime -lt (Get-Date).AddMinutes(-1) } | select-object mainwindowtitle
write-host $filename 
get-process excel | where-object { $_.StartTime -lt (Get-Date).AddMinutes(-1) } | stop-process -force

Это выводит что-то в строку: @{MainWindowTitle=Microsoft Excel - testdata.xlsx]}

Вы можете добавить все в журнал, поэтому добавьте что-то вроде | out-file c:\testlog.txt в конце $filename .

Также может быть хорошо получить временную метку.

Изменить: к сожалению, это закрывает все открытые файлы Excel

Edit2: я экспериментировал немного благодаря комментарию Сета, и я получил это на работу:

Get-Process excel | Where-Object {$_.StartTime -lt (Get-Date).AddMinutes(-30)} | ForEach-Object {
    echo $_.Id, $_.MainWindowTitle;
    Stop-Process -Force -Id $_.id
}

Он выводит в окно то, что закрывается следующим образом:

72148
Microsoft Excel - Book1
73712
Microsoft Excel - Book2
0

Попробуйте эту команду ниже,

c:\> powershell -command "get-Process | where-Object {$_.mainWindowTitle} | format-table id,name,mainwindowtitle -AutoSize"

Это перечислит все процессы, которые имеют непустой заголовок окна.

Сохраните этот список в некотором файле, используя команду PS,

Затем,

Используйте код для уничтожения запущенного процесса, такого как,

Get-Process excel | Where { $_.StartTime -lt (Get-Date).AddMinutes(-30) } | Stop-Process -Force

Затем снова перечислите все процессы с непустым заголовком окна и сравните с более ранним списком.

Вы получите путь к процессу уничтоженного процесса и, используя оценку строкового шаблона, вы можете получить имя файла процесса.

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