Powershell基于名称关闭多个窗口/结束进程

Powershell基于名称关闭多个窗口/结束进程,powershell,process,Powershell,Process,我有一大堆批处理/python脚本,它们安装了一个名为MATRIS的程序,然后是大约15个exe更新。 其中大约有11个更新打开了一个窗口,告诉我更新成功了 现在,运行批处理或powershell脚本来关闭所有这些窗口对我来说真的很有趣。 我最后尝试的是Get Process | Where Object{$\u.Path-like“MatrisInstaller.APCIPLUS”}停止进程-WhatIf 我不确定它是任务管理器中读取的名称,还是窗口的标题,但我尝试了两者。 请注意,其中有

我有一大堆批处理/python脚本,它们安装了一个名为MATRIS的程序,然后是大约15个exe更新。 其中大约有11个更新打开了一个窗口,告诉我更新成功了


现在,运行批处理或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,我用一些额外的信息更新了我的答案,这些信息可能有助于简化你的剧本。你这个该死的传奇,很有魅力。当我运行它时,我确实收到了一两个错误,因为我已经关闭了几个,但是在下一次安装时,我应该将它们全部打开,所以没有错误。热爱你的工作!