我有一行 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
然后再次列出所有具有非空窗口标题的进程并与之前的列表进行比较。
您将获得被终止的进程的进程路径,并且使用字符串模式评估您可以获得该进程的文件名。