今回はPowerShell特有のパイプラインとコマンドレットについて解説していきます。
※このページに掲載されいているプログラムは、PowerShellのバージョン:5.1.19041.3693 にて動作確認済みです。
【PowerShell】パイプラインとコマンドレットを徹底解説!
パイプラインとは、コマンドレット(cmdlet)やスクリプトといったコマンドの出力を、別のコマンドの入力として直接データを渡す機能です。
これにより異なるコマンドを組み合わせて、複雑なタスクを効果的に実行することができます。
パイプラインを使用することで、中間の結果を変数に格納することなく、効率的にデータを処理できます。
パイプラインの基本構文
PowerShellのパイプラインは、コマンドを連結するために |(パイプ)演算子を使用します。一つのコマンドの出力が次のコマンドの入力に渡されます。
[crayon-67eeef2f8a374129345590/]
メモ
- パイプラインを使用すると、データが生成されるたびに処理を行える。
- 各コマンドでデータが逐次処理され、パイプラインに結果が得られます。
- 中間結果を変数に格納せずにコードを効率的に記述できます。
- 冗長なコードを避けながら複雑なタスクを簡素なプログラムで実現可能。
- パイプラインはいくつでもつなげることが可能です。
パイプラインの使い方
まずは以下のプログラムを見てください。とてもシンプルな、変数の値をコンソールに呼び出す例です。
[crayon-67eeef2f8a37a325743452/]
実行結果
[crayon-67eeef2f8a37b356986228/]
これをパイプラインを使用するとどうなるでしょうか。
[crayon-67eeef2f8a37c322479778/]
実行結果
[crayon-67eeef2f8a37d674213198/]
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-67eeef2f8a37f236125676/]
実行結果
[crayon-67eeef2f8a380418997145/]
Get-Content
コンテンツの中身を表示させるコマンドです。
以下のテキストファイルを読み込むコマンドを例とします。
[crayon-67eeef2f8a381414378563/]
実行結果
[crayon-67eeef2f8a382700373947/]
これは文字化けという現象で、文字には文字コードというものがあります。
PowerShellのデフォルトの文字コードはshift_jisですが、shift_jisだと日本語が文字化けしてしまいます。
UTF-8という文字コードであれば、日本語は文字化けしなくなります。
なので、文字化けを防ぐ場合は -Encoding UTF8 のオプションをつけてあげます。
[crayon-67eeef2f8a383717876871/]
実行結果
[crayon-67eeef2f8a384360470817/]
メモ
PowerShellの実行結果に文字化けが発生したら、-Encoding UTF8 のオプションをつける。
Get-ChildItem
指定したフォルダ内のアイテムを一覧表示させるコマンドです。
以下画像のフォルダ内のファイルを表示させてみましょう。
[crayon-67eeef2f8a385565797266/]
実行結果
[crayon-67eeef2f8a386102323964/]
コマンドレットとパイプラインを組み合わせる
コマンドレットとパイプラインがわかったところで、2つを組み合わせてみましょう。
ファイルの内容を表示する例
これはGet-Contentでファイルの内容を取得して、ForEach-Objectを使用して各行ごとに表示しています。
これにより、ファイルの内容を行ごとに処理できます。
[crayon-67eeef2f8a387536220324/]
実行結果
[crayon-67eeef2f8a388489624032/]
メモ
PowerShellは改行してもプログラムとして読み取りが可能。パイプラインなどを目印にして改行すると可読性が上がる。
プロセスの一覧を表示して、その中から特定のプロセスをフィルタリングする例
こちらはまず、Get-Processで現在動作しているプロセスを取得して、Where-Objectでフィルタリングしています。
フィルタリングの内容はWorkingSetが100MBより上の項目です。
さらに、Format-Tableで表示するのをProcessName,とWorkingSetのみにして見やすく整形しています。
[crayon-67eeef2f8a389728637480/]
実行結果
[crayon-67eeef2f8a38a312489465/]
コマンドの中にある-gtを見て、理解できない方は以下もご覧ください。
-
-
【Powershell】if文の使い方や使用例を分かりやすく解説
Powershellのif文の書き方を解説していきます。 ※このページに掲載されいているプログラムは、 PowerShellのバージョン:5.1.19041.3693 にて動作確認済みです。 ifの構 ...
ファイルサイズ順にファイルを表示する例
Get-ChildItemでフォルダ内のファイルを取得し、Sort-Objectでファイルの大きさ順に並べ替え、Select-Objectでファイル名とファイルの大きさの身を表示させています。
[crayon-67eeef2f8a38b940810159/]
実行結果
[crayon-67eeef2f8a38c303651797/]
まとめ
コマンドレットとパイプラインを使いこなすことで、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"});
プログラミング知識を身に着けたい人におすすめの無料スクールはこちら