Powershell 获取被终止进程的文件名

Powershell 获取被终止进程的文件名

我有一行 Powershell 代码可以终止已运行超过 30 分钟的进程 (Excel)。我如何才能获取被终止进程的文件名?

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

答案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 文件

编辑2:感谢Seth的评论,我进行了一些实验,并使它发挥作用:

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

答案2

尝试以下命令,

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

然后再次列出所有具有非空窗口标题的进程并与之前的列表进行比较。

您将获得被终止的进程的进程路径,并且使用字符串模式评估您可以获得该进程的文件名。

相关内容