PowerShellのOut-GridViewでテーブルデータを表示・選択する方法
Out-GridView コマンドレットを使用すると、データを対話型のグラフィカルなテーブルとして表示でき、さまざまな条件に基づいたフィルタリングや並べ替えが可能になります。ユーザーに最もシンプルなGUIでオブジェクトを選択させたいスクリプトの中で、Out-GridViewコマンドレットを活用できます。
実際には、Out-GridViewは、Windows Form Controlの標準的なグラフィカルフォームである.NETのDataGridViewを動かすためのラッパーです。
Out-GridViewテーブルの基本的な使い方
まず、Out-GridViewコマンドレットを使ってWindowsサービスの一覧とそのプロパティを表示する、最もシンプルな例を見てみましょう。
Get-Service | Select DisplayName,Status,ServiceName,Can* | Out-GridView

ご覧のとおり、Windowsサービスのプロパティ一覧を含むグラフィカルなテーブルフォームが表示されます。コマンドレットは、オブジェクトのプロパティやデータ型に基づいて列名を自動的に設定し、データ形式を判別できない場合にはPSObjectのプロパティを拡張して表示します。
フォーム上部のフィルターボックスを使えば、テーブル内を簡単に検索できます。

なお、PowerShellからはExcelのテーブルデータに直接アクセスすることも可能です。
また、条件の追加(Add criteria)ボタンを使ってテーブルを絞り込むこともできます。下のスクリーンショットでは、名前に「VMW」が含まれる実行中のサービスのみを抽出する、シンプルなフィルターを作成しています。フィルターはオブジェクトのプロパティ値に基づいて直接構築されます。

次に、CPU使用率が最も高い上位10プロセスの一覧を表示してみましょう(–Titleオプションを使って、Out-GridViewウィンドウのタイトルを変更しています)。
Get-Process | Sort-Object CPU -Descending | Select -First 10 | Out-GridView -Title "Top 10 CPU processes"
列ヘッダーをクリックするだけで、テーブルの内容を昇順・降順ですばやく並べ替えることもできます。

PassThruスイッチを付けたOut-GridViewの活用
Out-GridViewの最も強力な機能は、–PassThruオプションです。このオプションにより、PowerShellスクリプトにユーザーフレンドリーなGUIを、まったく新しいレベルで組み込むことができます。
このオプションはPowerShell 3.0以降で利用可能です。ユーザーがテーブル上で1つ以上のオブジェクトを選択すると、標準のパイプラインを通じて、選択されたオブジェクトがスクリプト内の次のコマンドレットへ渡されます。
たとえば、次のPowerShellスクリプトは、実行中のWindowsサービスの一覧を表示します。ユーザーが一覧からサービスを選択してOKをクリックすると、そのサービスだけが再起動されます。
Get-Service | Where-Object {$_.status -eq 'running'}| Out-GridView -Title "Select service to restart" –PassThru -OutputMode Multiple | Restart-service –verbose

ユーザーが選択したオブジェクトを変数に保存することもできます。
$Svcs = Get-Service | Where-Object {$_.status -eq 'running'}| Out-GridView -Title "Select services" –PassThru
プロパティの値だけを保存したい場合は、前述のコマンドに次のパイプを追加します。
| Select -ExpandProperty Name

以下のオプションを使うと、ユーザーに1つの項目のみ選択させるか、複数の項目を選択できるようにするかを制御できます。
-OutputMode Single と -OutputMode Multiple
テーブルで複数の行を選択するには、Ctrlキーを押しながらクリックします。
PowerShellスクリプトでOut-GridViewをGUIとして使う実例
ここで、Out-GridViewの実用的な使用例をいくつか紹介します。
コマンド履歴から選択して再実行する
PowerShellの履歴から過去のコマンドの一覧を表示し、選択したコマンドを再実行する例です。
Get-History | Out-GridView -PassThru | Invoke-Expression
Windowsオプション機能を選択してインストールする
オプションのWindowsコンポーネントの一覧を表示し、選択した機能をインストールする例です(たとえば、RSATのActive Directory管理ツールやSSHクライアントなど)。
Get-WindowsCapability -Online | Where-Object {$_.State –eq "NotPresent"}| Out-GridView -PassThru |Add-WindowsCapability –Online

RDSファームのRDPセッションにシャドウ接続する
RDSファームの接続ブローカーからRDPセッションの一覧を取得し、ユーザーが選択したデスクトップへRDPシャドウ接続で接続する例です。
import-module remotedesktop
$cbserver = "munrdsbroker1.woshub.com"
$id = get-rdusersession -ConnectionBroker $cbserver | Out-GridView -title "RD Connection" -PassThru | select hostserver, unifiedsessionid
$id2 = $id | select -ExpandProperty unifiedsessionid
$srv = $id | select -ExpandProperty hostserver
mstsc /v:"$srv" /shadow:"$id2" /control /noconsentprompt
ADユーザーのパスワードをリセットする
AD PowerShellモジュールのGet-ADUserコマンドレットを使い、特定のOU内の有効なユーザーの一覧を表示して、選択したユーザーのドメインパスワードをリセットする例です。
Import-Module ActiveDirectory
$NewPasswd=Read-Host "Enter a new user password" –AsSecureString
Get-ADUser -filter {Enabled -eq "true"} -properties Name, displayname,EmailAddress,pwdLastSet -SearchBase 'OU=Berlin,OU=DE,DC=woshub,DC=com'| Out-GridView -PassThru –title "Select a user to reset a password"| Set-ADAccountPassword -NewPassword $NewPasswd -Reset

リモートコンピューターからデータを取得して表示する
Invoke-Commandを使用すると、リモートコンピューターからデータを取得し、テーブル形式で表示できます。
Invoke-Command -ComputerName be-dc01, mun-dc01, mun-dc02 -ScriptBlock {Get-Culture} | Select-Object PSComputerName,DisplayName| Out-GridView
Windows Server Coreでの制限と注意点
残念ながら、Out-GridViewコマンドレットはWindows Server Coreでは使用できません。実行すると、次のエラーが発生します。
out-gridview : To use the Out-GridView, install Windows PowerShell ISE by using Server Manager, and then restart this application. (Could not load file or assembly 'Microsoft.PowerShell.GraphicalHost, Version=3.0.0.0, Culture=neutral, PublicKeyToken=xxxxx' or one of its dependencies. The system cannot find the file specified.)
ただし、多くのコマンドレットが備えている–ComputerNameオプションを使えば、Server Core上のデータにもアクセスできます。たとえば、次のように記述します。
Get-Service -ComputerName lon-dc02 | Where-Object {$_.status -eq 'running'}| Out-GridView –Title "Select service to restart" -OutputMode Single|Restart-Service -Verbose
また、Microsoftは何らかの理由でOut-GridViewコマンドレットをPowerShell Core 6.xから削除しましたが、バージョン7.0で再び搭載しています。PowerShell 6.xを使用している場合は、次のコマンドで最新バージョンへ更新してください。
iex "& { $(irm https://aka.ms/install-powershell.ps1) } -UseMSI"
このように、Out-GridViewを活用すれば、PowerShellスクリプトに見栄えの良いグラフィカルなインターフェースを簡単に追加できます。対話的な選択操作を必要とする運用タスクの自動化に、ぜひ取り入れてみてください。
-
PowerShellでExcelファイルのデータを読み書きする方法|COMオブジェクトを使った自動化入門
本記事では、PowerShellスクリプトから直接Excelワークシートのデータを読み書きする方法を解説します。PowerShellとExcelを組み合わせることで、コンピューターやサーバー、インフラ、Active Directory(AD)などのインベントリ調査や各種レポート作成を自動化できます。前提知識:COMオブジェクトとExcelオブジェクトモデルPowerShellからExcelシートにアクセスするには、COM(Component Object Model)オブジェクトを使用します。この方法では、対象のコンピューターにExcelがインストールされている必要がある点に注意してください。
-
PowerShellでファイルとフォルダーを削除する方法【Remove-Itemコマンド徹底解説】
ファイルやフォルダーをひとつずつ手動で削除するのは、意外と手間がかかる作業です。しかし、PowerShellの使い方をマスターしていれば、そんな面倒な作業も一瞬で終わらせられます。この記事では、PowerShellを使ってWindowsのファイルやフォルダーを削除するさまざまな方法を紹介します。 PowerShellとは PowerShellは、Windowsが無料で提供しているコマンドライン自動化ツールです。コマンドプロンプトのウィンドウ上で起動するシェルを通じて、OSをより細かくコントロールできるようになるのが特徴です。 PowerShellでは「コマンドレット(Cmdlet)」と呼ばれ