
PowerShellは、スクリプト作成と自動化に重点を置くIT管理者にとって必須のツールとして広く知られています。しかし、その強力な機能はIT分野にとどまらず、整理されていないファイルやディレクトリに悩まされている人にとって非常に役立ちます。私自身、PowerShellコマンドを活用して、古くなったコードを整理したり、クライアントのファイルを構造化したり、何ヶ月にもわたるペースの速い、期限重視のプロジェクトで蓄積される混乱を軽減したりしています。
強力なコマンドラインシェルおよびスクリプトプラットフォームであるPowerShellは、様々なタスクを簡素化します。以前のバージョンのWindowsにはスタンドアロンのPowerShellアプリケーションが搭載されていましたが、現在では、その汎用性と最新のインターフェースにより、PowerShellやコマンドプロンプトなどのシェル環境の実行にWindowsターミナルが好まれています。
すべてのコマンドは、専用のPowerShellアプリとWindowsターミナルの両方で実行できます。使い始めるには、WindowsターミナルでPowerShellタブを開くだけです。
1.Get-Help

YouTubeのチュートリアルで初めてPowerShellを調べた時、ユーザーから頻繁に取り上げられていたコマンドの一つがGet-Helpでした。このコマンドは入門リソースとして機能し、PowerShellコマンドレットの詳細な情報に加え、構文、パラメータ、使用例などにもアクセスできます。
コマンドに関する特定の情報を取得するには、次のように入力します。
Get-Help Get-Process
コマンドの概要、構文の詳細、および入力パラメータが表示されます。詳細については、-Examplesパラメータを追加してください。
Get-Help Get-Process -Examples
さらに、 -Onlineスイッチを使用して Microsoft の公式ドキュメントを参照することもできます。
Get-Help Get-Process -Online
このコマンドは、包括的なコマンド ドキュメントを参照できる Microsoft Web サイトに移動します。
2.Get-Command

Get-Help はコマンドレットに関する情報の提供に重点を置いていますが、 Get-Command は利用可能なすべてのコマンドを検索して一覧表示するのに最適です。実行したい機能はわかっているものの、コマンド名が思い出せない場合は、Get-Command を使ってコマンド名の一部またはパターンに基づいてコマンドを検索できます。
たとえば、processという単語を含むすべてのコマンドを検索するには、次のように入力します。
Get-Command *process*
このコマンドは、名前に「process」を含むすべてのコマンドを表示します。コマンドの種類に基づいて検索範囲をさらに絞り込むこともできます。例えば、コマンドレットのみを検索する場合などです。
Get-Command -Name Get* -CommandType Cmdlet
さらに、ネットワークに関連するものなど、モジュール固有の検索の場合:
Get-Command -Module NetTCPIP
Get-Commandを使用すると、Web でコマンド名を検索するよりもはるかに効率的です。
3.テストネット接続

ping、telnet、tracerouteなど、様々なツールを頻繁に切り替えて使用していませんか?Test-NetConnectionコマンドレットは、これらの機能を1つに統合します。このコマンドレットは、問題がネットワーク、サーバー、またはその他の原因のいずれに起因するのかを診断するのに役立つため、ネットワークのトラブルシューティングに不可欠です。
ウェブサイトにアクセスできるかどうかを確認するには、次のコマンドを実行します。
Test-NetConnection makeuseof.com
このコマンドはping結果と基本的な接続情報を提供します。特定のポートをテストするには、コマンドにポート番号を指定します。
Test-NetConnection server.company.com -Port 443
詳細なネットワーク パス トレースを実行するには、-TraceRouteパラメータを使用します。
Test-NetConnection 8.8.8.8 -TraceRoute
このコマンドは、コンピューターと宛先間のホップをトレースしながらテスト パケットを 8.8.8.8 に送信し、接続の問題を正確に特定するのに役立ちます。
4.Get-ChildItem

Get -ChildItemコマンドレットを使用すると、指定したディレクトリ内のファイルとフォルダを表示できます。例えば、Documentsフォルダの内容を一覧表示するには、次のように入力します。
Get-ChildItem C:\Users\Username\Documents
過去 1 週間に変更された PDF ファイルを識別するには、次のコマンドを使用します。
Get-ChildItem C:\Users\YourName\Documents -Filter *.pdf | Where-Object {$_. LastWriteTime -gt (Get-Date).AddDays(-7)}
-Recurseパラメータを使用すると、すべてのサブフォルダを検索できます。プロジェクトフォルダとそのサブディレクトリ内のすべてのログファイルを検索する場合は、次のようにします。
Get-ChildItem C:\Projects -Recurse -Filter *.log
ディスク容量が少ない場合は、1GB を超える大きなファイルを識別できます。
Get-ChildItem C:\ -Recurse -File | Where-Object {$_. Length -gt 1GB} | Select-Object FullName, @{Name="SizeGB";Expression={$_. Length/1GB}}
Get-ChildItemコマンドレットは、バッチ タスク、ファイルの編成、監査を自動化するための強力なツールです。
5.Where-Object

前の例では、Where-Objectの使用により、特定のプロパティ基準に基づいてデータをフィルタリングする機能が強調されています。これは、プログラミングにおける条件文に似ています。中括弧内の構文により、評価対象となる各項目を表現できます。
実行中のすべてのサービスを視覚化するには、次のように入力します。
Get-Service | Where-Object {$_. Status -eq "Running"}
100MB を超えるメモリを消費するプロセスに興味がある場合は、次を試してください。
Get-Process | Where-Object {$_. WorkingSet -gt 100MB}
複数の条件を組み合わせることも可能です。例えば、過去1か月以内に変更された大きなWord文書を検索するには、次のようにします。
Get-ChildItem -Filter *.docx | Where-Object {$_. Length -gt 5MB -and $_. LastWriteTime -gt (Get-Date).AddMonths(-1)}
スクリプトの読みやすさを向上させるために、複雑な条件を複数行に整理します。
Get-ChildItem | Where-Object { $_. Length -gt 1MB -and $_. Extension -eq ".log"}
6.オブジェクトの選択

コマンドの出力は、必要以上に長くなることがよくあります。Select -Objectコマンドレットを使用すると、必要なデータのみをフィルタリングできます。その後、Export-Csvコマンドレットを使用してCSVファイルにエクスポートできます。例えば、サービスの名前とステータスのみを表示したい場合は、次のようにします。
Get-Service | Select-Object Name, Status
最も CPU を消費している上位 5 つのプロセスを特定することが目的の場合は、次のコマンドを実行します。
Get-Process | Sort-Object CPU -Descending | Select-Object -First 5 Name, CPU
さらに、計算プロパティを作成することもできます。ファイルサイズをバイトではなくメガバイトで表示するには、次のようにします。
Get-ChildItem | Select-Object Name, @{Name="SizeMB";Expression={$_. Length/1MB}}
単一のプロパティ値を抽出するには、-ExpandPropertyパラメータを使用します。
Get-Process notepad | Select-Object -ExpandProperty Id
このコマンドはプロセス ID のみを生成します。これは、単一の値を必要とする追加のコマンドにパイプする場合に特に便利です。
7.メンバー登録

PowerShellは主にオブジェクトを介して操作し、Get-Memberコマンドレットはそれらに関連付けられたプロパティとメソッドを表示します。例えば、プロセスに関する情報を取得する場合、サイズ、作成日、その他のメトリックを確認できます。プロセスオブジェクト内の属性を表示するには、次のコマンドを使用します。
Get-Process | Get-Member
これにより、CPU、ID、WorkingSetなどのプロパティに加え、Kill()やRefresh()などのメソッドも一覧表示されます。プロパティのみを表示したい場合は、以下を指定してください。
Get-Process | Get-Member -MemberType Property
ファイル関連の操作の場合:
Get-ChildItem C:\temp\test.txt | Get-Member
これには、LengthやLastWriteTimeといった詳細情報に加え、Delete()やMoveTo()といったメソッドも表示されます。Lengthを使ってファイルをサイズでフィルタリングしたり、LastWriteTimeに基づいて最近変更されたファイルを識別したりできます。
8.Set-Clipboard と Get-Clipboard

PowerShell から大量の出力をコピーする必要がある場合、手動で選択するのは面倒です。しかし、Set-ClipboardとGet-Clipboard を使えば、このプロセスを大幅に効率化できます。
コマンドの結果をクリップボードにコピーするには、次のように入力します。
Get-Process | Select-Object Name, CPU | Set-Clipboard
これにより、結果をExcelなどのテキストエディタに簡単に貼り付けることができます。逆に、クリップボードの内容をPowerShellに取り戻すには、次のコマンドを実行します。
$text = Get-Clipboard
この機能は、リストを処理する際に特に便利です。例えば、Excelからコンピューター名の範囲をコピーし、次のコマンドを実行することができます。
Get-Clipboard | ForEach-Object { Test-NetConnection $_ }
このコマンドは、リストされている各コンピューター名への接続をテストします。PowerShellと他のアプリケーションとのシームレスな統合により、反復的なタスクの実行速度が大幅に向上します。
9.アウトグリッドビュー

結果のインタラクティブな並べ替えやフィルタリングが必要な場合があります。Out -GridViewコマンドレットは、並べ替えや検索が可能な表形式の別ウィンドウを開きます。
Get-Process | Out-GridView
このアクションは、グリッドインターフェースに現在のプロセスのリストを表示する新しいウィンドウを起動します。列ヘッダーをクリックして並べ替えたり、検索フィールドでキーワードでフィルタリングしたりできます。グリッドから項目を選択して別のコマンドに渡すには、以下を使用します。
Get-Service | Out-GridView -PassThru | Restart-Service
-PassThruパラメータを使用すると、複数の行を選択し、選択したサービスのみを再起動するなどのアクションを実行できます。
ログ分析では、以下も適用できます。
Get-EventLog -LogName Application -Newest 1000 | Out-GridView
これにより、キーワード入力によるイベントの迅速なフィルタリング、時間による並べ替え、データセット内のパターンの解明が可能になります。
10.取得プロセス

Get -Processコマンドレットは、コンピューターで現在実行されているすべてのアプリケーションを表示し、それらのメモリ使用量、CPU 時間、プロセス ID に関する情報を提供します。
現在アクティブなプロセスをすべて一覧表示するには、次のコマンドを実行します。
Get-Process
Google Chrome などの特定のアプリケーションを検索する場合は、次のように指定します。
Get-Process chrome
応答しないプログラムを終了する必要がある場合は、次のようにコマンドを連鎖させることができます。
Get-Process notepad | Stop-Process
大量のメモリ リソースを消費しているプロセスを識別するには、以下を実装します。
Get-Process | Sort-Object WorkingSet -Descending | Select-Object -First 10
このコマンドは、システムのパフォーマンスが低下したときに、メモリを大量に消費するプログラムの概要をすばやく提供します。
コメントを残す