Powershell基于名称关闭多个窗口/结束进程
我有一大堆批处理/python脚本,它们安装了一个名为MATRIS的程序,然后是大约15个exe更新。 其中大约有11个更新打开了一个窗口,告诉我更新成功了Powershell基于名称关闭多个窗口/结束进程,powershell,process,Powershell,Process,我有一大堆批处理/python脚本,它们安装了一个名为MATRIS的程序,然后是大约15个exe更新。 其中大约有11个更新打开了一个窗口,告诉我更新成功了 现在,运行批处理或powershell脚本来关闭所有这些窗口对我来说真的很有趣。 我最后尝试的是Get Process | Where Object{$\u.Path-like“MatrisInstaller.APCIPLUS”}停止进程-WhatIf 我不确定它是任务管理器中读取的名称,还是窗口的标题,但我尝试了两者。 请注意,其中有
现在,运行批处理或powershell脚本来关闭所有这些窗口对我来说真的很有趣。 我最后尝试的是
Get Process | Where Object{$\u.Path-like“MatrisInstaller.APCIPLUS”}停止进程-WhatIf
我不确定它是任务管理器中读取的名称,还是窗口的标题,但我尝试了两者。
请注意,其中有两个是(32位)-我不确定这是否会影响脚本
我能够运行tasklist
,然后运行kill{PID}
,但是PIDs发生了变化:我不知道如何编写脚本
请回答,如果你需要任何澄清,我一直在我的问题措辞拙劣 您就快到了,只需将“Path”更改为“ProcessName”,如下所示:
在您的示例中,
Path
指向磁盘上的可执行文件,因此虽然可以使用(如果一致),但它与任务管理器的“进程”选项卡中的名称不匹配。通常,人们会使用任务管理器的“详细信息”选项卡上显示的名称。例如,在我的系统上使用Outlook时,以下三种可能性是:
Path: C:\Program Files\Microsoft Office\Office16\OUTLOOK.EXE
Processes tab: Microsoft Outlook
Details tab: outlook.exe
因此,您需要这样一个命令:
Get-Process | Where Name -eq 'Outlook' | Stop-Process
$processList = "Process1","Process2","Process3" # Add all process names to the list
$processList |
ForEach-Object {
Get-Process -Name $_ | Stop-Process
}
或者更好:
Get-Process -Name 'Outlook' | Stop-Process
请注意,PowerShell希望您删除在任务管理器中看到的“.exe”
编辑:附加技术
如果您知道进程的名称,则可以通过执行以下操作来简化脚本:
Get-Process | Where Name -eq 'Outlook' | Stop-Process
$processList = "Process1","Process2","Process3" # Add all process names to the list
$processList |
ForEach-Object {
Get-Process -Name $_ | Stop-Process
}
您的问题或错误消息是什么?没有错误消息,我只是找不到关闭这些窗口的方法。我尝试的任何操作都不起作用或返回错误。此操作不起作用,没有错误或其他任何操作,所有任务都保持列出状态,并且窗口处于打开状态。还有什么建议吗?任务不会以-whatif参数结束。请删除该参数,然后查看。没有,仍然不好。为了澄清,整行代码现在看起来像:
Get Process | Where Object{$\像“MatrisInstaller.APCIPLUS”}| Stop Process
Awesome,这很有效!每个更新都是一个不同的.exe文件,因此我将只创建一个15行的.ps1,其中包含Get Process-Name'updateXX'| Stop Process
。谢谢你的帮助@WilliamBachynsky,我用一些额外的信息更新了我的答案,这些信息可能有助于简化你的剧本。你这个该死的传奇,很有魅力。当我运行它时,我确实收到了一两个错误,因为我已经关闭了几个,但是在下一次安装时,我应该将它们全部打开,所以没有错误。热爱你的工作!