IT(主にPython)と子育て情報を発信中。

だんにこブログ

【PowerShell】パイプラインとコマンドレットを徹底解説!

今回はPowerShell特有のパイプラインとコマンドレットについて解説していきます。

※このページに掲載されいているプログラムは、PowerShellのバージョン:5.1.19041.3693 にて動作確認済みです。

【PowerShell】パイプラインとコマンドレットを徹底解説!

パイプラインとは、コマンドレット(cmdlet)やスクリプトといったコマンドの出力を、別のコマンドの入力として直接データを渡す機能です。
これにより異なるコマンドを組み合わせて、複雑なタスクを効果的に実行することができます。
パイプラインを使用することで、中間の結果を変数に格納することなく、効率的にデータを処理できます。

パイプラインの基本構文

PowerShellのパイプラインは、コマンドを連結するために |(パイプ)演算子を使用します。一つのコマンドの出力が次のコマンドの入力に渡されます。
[crayon-663c4c53cdeb9961261743/]

メモ

  • パイプラインを使用すると、データが生成されるたびに処理を行える。
  • 各コマンドでデータが逐次処理され、パイプラインに結果が得られます。
  • 中間結果を変数に格納せずにコードを効率的に記述できます。
  • 冗長なコードを避けながら複雑なタスクを簡素なプログラムで実現可能。
  • パイプラインはいくつでもつなげることが可能です。

 

パイプラインの使い方

まずは以下のプログラムを見てください。とてもシンプルな、変数の値をコンソールに呼び出す例です。
[crayon-663c4c53cdebe119515941/]

実行結果

[crayon-663c4c53cdebf485362259/]
これをパイプラインを使用するとどうなるでしょうか。
[crayon-663c4c53cdec0409787035/]

実行結果

[crayon-663c4c53cdec1185399734/]
Sample1.ps1、Sample2.ps1ともに結果は同じです。
echoコマンドは通常右側に表示させる文字列を記載しないといけないですが、パイプラインによってデータを受け渡しているので、echoコマンドの右側に文字列を記載しなくても$test変数の値を表示させています。
上記例は、パイプラインの使い方をシンプルなプログラムで紹介しましたが、本来PowerShellでパイプラインを使用する際は、コマンドレットと合わせて使用すると効果的です。
その前に、まずはコマンドレットについて説明していきますね。

 

コマンドレットとは

コマンドレット(cmdlet)は、PowerShellおよびコマンドプロンプトで使用されるコマンドの基本的な構成要素です。
簡単に実行できる小さなコマンド単位で、様々なタスクを実行するために使用されます。
コマンドレットは「動詞-名詞」の形式で成り立っていて、動詞はコマンドのアクションを示し、名詞は対象を示します。
例えば、Get-ProcessやStop-Serviceなどがコマンドレットの典型的な例です。

以下、動詞と名詞で分けて表にまとめてみました。

コマンド 説明
Get- データを取得するコマンド
Set- データを設定するためのコマンド
Start- プロセスやサービスを開始するコマンド
Stop- プロセスやサービスを停止すコマンド
Format- 結果を整形するためのコマンド
-Date 日時に対して動作するコマンド
-Item アイテムに対して動作するコマンド
-ChildItem フォルダ内のアイテムに対して動作するコマンド
-Process プロセスに対して動作するコマンド
-Service サービスに対して動作するコマンド
-Object オブジェクトに対して動作するコマンド

動詞と名詞を組み合わせると、以下のような操作が可能です。

 

コマンド 説明
Write-Host いわゆるechoと同じ
Get-Date 現在の日時を取得する
Get-Item アイテムを取得する
Get-Process プロセスを取得する
Get-Service サービスを取得する
Set-Variable 変数に値を設定する
Start-Service サービスを開始する
Stop-Service サービスを停止する
Start-Process プロセスを開始する
Stop-Process プロセスを停止する
Import-Csv csvファイルをPowerShellにオブジェクトとして取り込む
Export-Csv PowerShellのオブジェクトをcsvファイルに書き出す
Format-Table 表形式でデータを表示する
Format-List リスト型でデータを表示する
Select-Object オブジェクトのプロパティを選択する
Where-Object オブジェクトをフィルタリングする
Sort-Object オブジェクトの並び替えをする
ForEach-Object それぞれのオブジェクトの要素に対して操作する

コマンドではなく、プログラムコードのforやforeachを使ってファイルの中身を確認することも可能です。詳しくは以下をご覧ください。

【Powershell】for文を使った繰り返し処理を例題で解説

Powershellでのfor文の使い方を解説していきたいと思います。 if文に続く代表的な処理なので、しっかり身に着けておきましょう。 ※このページに掲載されいているプログラムは、 PowerShe ...

続きを見る

 

コマンドレットの使い方

では、コマンドレットを使用したいくつかの例を交えて解説していきます。

Get-Process

現在動作しているプロセスを取得するコマンドです。
[crayon-663c4c53cdec2511851876/]
実行結果
[crayon-663c4c53cdec4793120477/]
 

Get-Content

コンテンツの中身を表示させるコマンドです。
以下のテキストファイルを読み込むコマンドを例とします。


[crayon-663c4c53cdec5775583771/]

実行結果

[crayon-663c4c53cdec6158188685/]
これは文字化けという現象で、文字には文字コードというものがあります。
PowerShellのデフォルトの文字コードはshift_jisですが、shift_jisだと日本語が文字化けしてしまいます。
UTF-8という文字コードであれば、日本語は文字化けしなくなります。

なので、文字化けを防ぐ場合は -Encoding UTF8 のオプションをつけてあげます。
[crayon-663c4c53cdec7190820540/]

実行結果

[crayon-663c4c53cdec8088237760/]

メモ

PowerShellの実行結果に文字化けが発生したら、-Encoding UTF8 のオプションをつける。

 

Get-ChildItem

指定したフォルダ内のアイテムを一覧表示させるコマンドです。
以下画像のフォルダ内のファイルを表示させてみましょう。

 
[crayon-663c4c53cdec9086025315/]
実行結果
[crayon-663c4c53cdeca596632116/]
 

コマンドレットとパイプラインを組み合わせる

コマンドレットとパイプラインがわかったところで、2つを組み合わせてみましょう。

ファイルの内容を表示する例

これはGet-Contentでファイルの内容を取得して、ForEach-Objectを使用して各行ごとに表示しています。
これにより、ファイルの内容を行ごとに処理できます。


[crayon-663c4c53cdecb317087947/]

実行結果

[crayon-663c4c53cdecc028638474/]

メモ

PowerShellは改行してもプログラムとして読み取りが可能。パイプラインなどを目印にして改行すると可読性が上がる。

 

プロセスの一覧を表示して、その中から特定のプロセスをフィルタリングする例

こちらはまず、Get-Processで現在動作しているプロセスを取得して、Where-Objectでフィルタリングしています。
フィルタリングの内容はWorkingSetが100MBより上の項目です。
さらに、Format-Tableで表示するのをProcessName,とWorkingSetのみにして見やすく整形しています。
[crayon-663c4c53cdecd500894488/]

実行結果

[crayon-663c4c53cdece210335238/]
コマンドの中にある-gtを見て、理解できない方は以下もご覧ください。

【Powershell】if文の使い方や使用例を分かりやすく解説

Powershellのif文の書き方を解説していきます。 ※このページに掲載されいているプログラムは、 PowerShellのバージョン:5.1.19041.3693 にて動作確認済みです。 ifの構 ...

続きを見る

 

ファイルサイズ順にファイルを表示する例

Get-ChildItemでフォルダ内のファイルを取得し、Sort-Objectでファイルの大きさ順に並べ替え、Select-Objectでファイル名とファイルの大きさの身を表示させています。


[crayon-663c4c53cdecf730244393/]

実行結果

[crayon-663c4c53cded0286390130/]
 

まとめ

コマンドレットとパイプラインを使いこなすことで、PowerShell特有の操作が可能になります。
大量なファイルを一度に作成したり、不要なプロセスを停止させたり、ファイルの中身を検索したり…。
いろいろ使い方がありますので、気になる方は調べてみてください。

(function(b,c,f,g,a,d,e){b.MoshimoAffiliateObject=a;b[a]=b[a]||function(){arguments.currentScript=c.currentScript||c.scripts[c.scripts.length-2];(b[a].q=b[a].q||[]).push(arguments)};c.getElementById(a)||(d=c.createElement(f),d.src=g,d.id=a,e=c.getElementsByTagName("body")[0],e.appendChild(d))})(window,document,"script","//dn.msmstatic.com/site/cardlink/bundle.js?20220329","msmaflink");msmaflink({"n":"動くサンプルで学べるWindows PowerShellコマンド\u0026スクリプティングガイドPowerShell 4.0対応","b":"","t":"","d":"https:\/\/m.media-amazon.com","c_p":"","p":["\/images\/I\/5140GAl6jmL._SL500_.jpg"],"u":{"u":"https:\/\/www.amazon.co.jp\/dp\/B07GV83GS9","t":"amazon","r_v":""},"v":"2.1","b_l":[{"id":1,"u_tx":"Amazonで見る","u_bc":"#f79256","u_url":"https:\/\/www.amazon.co.jp\/dp\/B07GV83GS9","a_id":2468379,"p_id":170,"pl_id":27060,"pc_id":185,"s_n":"amazon","u_so":1},{"id":2,"u_tx":"楽天市場で見る","u_bc":"#f76956","u_url":"https:\/\/search.rakuten.co.jp\/search\/mall\/%E5%8B%95%E3%81%8F%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%81%A7%E5%AD%A6%E3%81%B9%E3%82%8BWindows%20PowerShell%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%26%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0%E3%82%AC%E3%82%A4%E3%83%89PowerShell%204.0%E5%AF%BE%E5%BF%9C\/","a_id":2572289,"p_id":54,"pl_id":27059,"pc_id":54,"s_n":"rakuten","u_so":2},{"id":3,"u_tx":"Yahoo!ショッピングで見る","u_bc":"#66a7ff","u_url":"https:\/\/shopping.yahoo.co.jp\/search?first=1\u0026p=%E5%8B%95%E3%81%8F%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%81%A7%E5%AD%A6%E3%81%B9%E3%82%8BWindows%20PowerShell%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%26%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0%E3%82%AC%E3%82%A4%E3%83%89PowerShell%204.0%E5%AF%BE%E5%BF%9C","a_id":2572285,"p_id":1225,"pl_id":27061,"pc_id":1925,"s_n":"yahoo","u_so":3}],"eid":"7VLa2","s":"s"});

 

プログラミング知識を身に着けたい人におすすめの無料スクールはこちら

  • B!