在powershell中操作进程的主窗口

时间:2012-03-22 02:16:17

标签: powershell process window

我一直在尝试为自己创建一个脚本,允许我一次打开几个程序,但是以非侵入性的方式。当我启动计算机时,一个程序,例如Steam,并不总是需要启动,因此我想将它与origin / gtalk /打开程序的任何内容一起编写脚本,但关闭特定程序的主窗口(steam) / origin,我只是使用我的开始菜单或任务栏来开始游戏。)

现在做我的研究,这样做似乎并不太复杂。

get-process steam, origin | where {$_.closeMainWindow()}

我对此很好,我可以让它多次运行,但我想我会试着让它变得更加花哨。使用steam和Origin,有几个窗口被认为是命令关闭的主标题窗口。但是,该命令一次只关闭一个,因此必须多次运行才能关闭它们。我的想法是创建一个具有while运算符的函数。

这不太有用,因为我对powershell的所有概念/功能都很陌生,所以我不太清楚是否还有另一种更简单的方法。我甚至不确定这是否是一个有效的while循环,考虑到条件没有与任何东西进行比较,我试着像-eq $true那样while ((get-process steam, origin | where {$_.mainWindowTitle}) -eq $true)但是出错了。

function test {
    while (get-process steam, origin | where {$_.mainWindowTitle}) {
        $_.closeMainWindow;
    }
}

传递给第三行的输出是:

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName                 
-------  ------    -----      ----- -----   ------     -- -----------                 
   1161      97    97776     123000   334     3.62   4468 Origin                      
    570      73   175252      58392   484    10.65   1484 Steam  

要求帮助有点傻,这不是一个非常有价值的剧本,但我觉得很酷:P

1 个答案:

答案 0 :(得分:2)

我只是不明白你为什么不直接停止使用:

Get-Process steam,origin -ErrorAction silentlycontinue | stop-process

但你可以用这个:

while (($p=Get-Process steam,origin -ErrorAction silentlycontinue) -ne $null)
{
  $p | % {$_.CloseMainWindow()}
}