Управление главным окном процесса в PowerShell - PullRequest
2 голосов
/ 22 марта 2012

Я пытался создать скрипт для себя, который позволил бы мне открывать несколько программ одновременно, но неинвазивным способом. Например, одна программа 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 Ответ

2 голосов
/ 22 марта 2012

Я просто не понимаю, почему вы просто не останавливаете процесс, используя:

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

Но вы можете использовать это:

while (($p=Get-Process steam,origin -ErrorAction silentlycontinue) -ne $null)
{
  $p | % {$_.CloseMainWindow()}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...