2012-03-22 19 views
2

私は自分でスクリプトを作成しようとしています。これは、複数のプログラムを一度に開くことができますが、非侵襲的な方法で実行できます。 Steamなどの1つのプログラムは、コンピュータを起動するときに必ず起動する必要はありませんので、起点/ gtalk /それがプログラムを開くものと一緒にスクリプトを作成したいのですが、特定のプログラムのメインウィンドウを閉じます/起源、私はちょうど私のスタートメニューやタスクバーを使用してゲームを開始する)。powershellでプロセスのメインウィンドウを操作する

私の研究を行ってみると、そうするのはあまりにも複雑すぎるとは思われません。

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

私はこれで大丈夫だよ、私はそれが複数回実行できますが、私はそれがもう少し凝った作りで、私の手をしようと思いました。蒸気と原点では、コマンドが終了するメインタイトルウィンドウとみなされるいくつかのウィンドウがあります。ただし、コマンドは一度に1つだけ閉じるので、コマンドを閉じるには複数回実行する必要があります。私の考えは、while演算子を持つ関数を作成することです。

これはかなりうまくいきません。これは、私がpowerershellのすべての概念/機能にかなり新しいので、これを行う簡単な方法があるかどうかはよく分かりません。私はこれが有効な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

答えて

2

あなたは、単に使用してプロセスを停止しない理由を私は理解していない:

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

しかし、あなたが使用することができます

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

私がプロセスを停止した場合、バックグラウンドでの実行が中止され、蒸気や起源のゲームを起動できなくなったり、再びウィンドウを開くことになります。あなたのスクリプトを少し変更してスクリプトを修正しました。あなたのスクリプトは継続的に実行されていましたので、 '{$ _。mainWindowTitle}'に 'while($ p = Get-Process steam、origin -ErrorAction silentlycontinue | _.mainWindowTitle})-ne $ null) ' – smierdziel

関連する問題