2013/01/17

PowerShellで指定ウィンドウ以外のすべてのウィンドウを閉じる方法

■PowerShellスクリプトの作成

次の内容をcloseOtherWindows.ps1ファイルとして保存します。
function closeOtherWindow($ss){
 $force = $ss[$ss.length-1] -eq 'force'
 $noTargets = @("cmd", "explorer", "sidebar")
 if($force){
  for($i=0; $i -lt $ss.Length-1; $i++){
   $noTargets += $ss[$i]
  }
 }else{
  $noTargets += $ss
 }

 $process = Get-Process *

 if(!!$process){
  foreach($p in $process){
   if($p.MainWindowHandle -ne 0){
    $pname = $p.ProcessName
    if(!($noTargets -contains $p.name)){
     if($force){
      Write-Host "本当にWindowを閉じます: $pname"
      $p.CloseMainWindow()
     }else{
      Write-Host "Windowを閉じます: $pname"
     }
    }
   }
  }
 }
}

closeOtherWindow $args

■スクリプトを実行する

  1. コマンドプロンプトを管理者モードで起動します
  2. Chromeやfirefox以外のプロセスを終了させる場合、次のように起動します
    プロセスは1個以上指定できます
    • PowerShell .\closeOtherWindows.ps1 chrome firefox
  3. 「Windowを閉じます: プロセス名」が出力されるので、どのプロセスを終了することになるか判ります
  4. 終了するプロセスに問題がなければ、引数の最後にforceを追加して再度実行します
    • PowerShell .\closeOtherWindows.ps1 chrome firefox force

■補足

  • 終了できないウィンドウもあります。
  • ウィンドウとして表示していないプロセスは終了させません
  • cmd、sidebarとexplorerのプロセスは終了させません