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

だんにこブログ

【PowerShell】関数(function)の使い方を超解説

PowerShellでの関数の使い方を解説していきます。
関数とはモジュールとも呼ばれ、特定のタスクや操作を実行するために設計された箱のようなものです。
関数は再利用可能で、コードの構造を整理し、保守性を向上させるのに役立ち、様々な形で宣言および呼び出しができます。

 

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

 

PowerShellの関数

関数の基本構文

以下はPowerShellにおける関数の基本構造です。
[crayon-663bf78496835418780857/]
 

  • param内に記載した変数は関数外では値を取得できない。
  • 引数が不要な関数の場合、paramの記載は不要。
  • 関数処理後、返したい変数をreturnで指定する。
  • return後記載の処理は処理されない。
  • 処理を関数化しておくことで、修正する箇所を1か所で済ませられる。

メモ

 

関数の呼び出しの基本構文

PowerShellにおける、関数の呼び出し方です。
[crayon-663bf7849683a041292194/]

メモ

  • 関数内でparam内に記載した変数分、引数として指定。
  • 関数と引数、引数と引数は半角スペースで開ける。

 

関数と関数呼び出しの使用例

[crayon-663bf7849683b952835728/]

実行結果

[crayon-663bf7849683c174294908/]
ちなみに上記関数の呼び出しの際に引数に空白を指定した場合、int型であればゼロ、String型であれば空白で認識されます。

 

引数の初期化

関数呼び出し時に引数を空白を指定した場合、ゼロもしくは空白で認識されたくない際は、引数の初期値(デフォルト値)を指定すれば、空白時に指定の値を代入することができます。
[crayon-663bf7849683d578605211/]

実行結果

[crayon-663bf7849683e027696810/]
また引数はparamで指定する方法と、関数の後ろにカッコで囲むことでも指定可能です。
[crayon-663bf7849683f766546699/]
 

関数内の標準出力について

PowerShellの関数内でechoやWrite-Hostなどコンソールに文字を表示させる処理を関数内に記載すると、関数を呼び出すたびに表示されてしまいます。
例として、指定した場所に空のファイルを作成する関数を見てみましょう。
[crayon-663bf78496840215077450/]

実行結果

[crayon-663bf78496841684600270/]
上記の様にNew-Itemの実行結果がコンソールに呼び出されます。
この関数を使用するたびに毎回表示されたくない場合、voidを使用することで結果を表示させないようにできます。
[crayon-663bf78496842414852321/]

実行結果

[crayon-663bf78496843925461366/]
[void]の代わりに、行末に | Out-Null と記載することでも同様の効果が得られます。
[crayon-663bf78496844574444162/]
 

関数のオプションについて

PowerShell関数においてオプションは、関数が受け取る引数の性質を制御するための仕組みです。
以下は、一般的なオプションについて紹介していきます。

Parameter属性

Parameter属性は、パラメータに関する様々な属性を指定するために使用されます。たとえば、位置づけ、必須の有無、デフォルト値の設定などが指定できます。

以下の例では、$Name パラメータは位置0にあり、必須であることを示していて、$Age パラメータはデフォルト値が設定されており、位置1に配置されています。
[crayon-663bf78496845555579616/]

実行結果

[crayon-663bf78496846469558181/]
上記関数で、引数の指定を無しにした場合はどうなるのでしょうか。

Sample5.ps1の15行目を Name-Age に変更
[crayon-663bf78496847888061682/]
このように表示され、必須項目である$Nameパラメータの入力を求めてきます。
$Nameパラメータを入力すると、$Ageパラメータは初期値を返します。
[crayon-663bf78496848530689017/]
 

Alias属性

Alias属性を使用すると、関数を別名で呼ぶことができます。
以下の例は、MyFunction関数をAliasNameとしても呼ぶことが可能です。
[crayon-663bf78496849450231371/]

実行結果

[crayon-663bf7849684a266361738/]
 

Switchパラメータ

Switchパラメータを設定すると、引数が指定されているかどうかをTrueかFalseで返すようになります。
以下の例は、引数swにSwitchパラメータを指定しています。
[crayon-663bf7849684b311102976/]

実行結果

[crayon-663bf7849684c864805457/]

メモ

  • 関数呼び出し1回目は引数swを明示していないので、$swにはFalseが入ります。
  • 関数呼び出し2回目は引数swを明示しているので、$swにはTrueが入ります。

 

ValidateSetパラメータ

ValidateSetパラメータは、引数の入力制限を設定します。
ValidateSetパラメータ設定時はリスト型で指定し、それ以外の値を受け付けないようにします。
[crayon-663bf78496852263317021/]

実行結果

[crayon-663bf78496853300566799/]
ValidateSetパラメータで指定した値以外を入力すると、エラーが返ってきます。

 Sample8.ps1の11行目を Validate-Set すいか に変更
[crayon-663bf78496855588288035/]
PowerShellの関数オプションは上記は一例で、他にもたくさん存在します。
詳しく知りたい方は以下をご覧ください。

Microsoft公式 PowerShell

 

まとめ

PowerShellで関数を使用することで、使いやすくてメンテナンスがしやすいスクリプトを構築することができます。
パラメータのデフォルト値の設定やパイプライン操作など、PowerShellが提供する独自の機能を活用することもできます。
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":"PowerShell実践ガイドブック クロスプラットフォーム対応の次世代シェルを徹底解説","b":"","t":"","d":"https:\/\/m.media-amazon.com","c_p":"","p":["\/images\/I\/61ywcS7woNL._SL500_.jpg"],"u":{"u":"https:\/\/www.amazon.co.jp\/dp\/B07D73G2X7","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\/B07D73G2X7","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\/PowerShell%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89%E3%83%96%E3%83%83%E3%82%AF%E3%80%80%E3%82%AF%E3%83%AD%E3%82%B9%E3%83%97%E3%83%A9%E3%83%83%E3%83%88%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E5%AF%BE%E5%BF%9C%E3%81%AE%E6%AC%A1%E4%B8%96%E4%BB%A3%E3%82%B7%E3%82%A7%E3%83%AB%E3%82%92%E5%BE%B9%E5%BA%95%E8%A7%A3%E8%AA%AC\/","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=PowerShell%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89%E3%83%96%E3%83%83%E3%82%AF%E3%80%80%E3%82%AF%E3%83%AD%E3%82%B9%E3%83%97%E3%83%A9%E3%83%83%E3%83%88%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E5%AF%BE%E5%BF%9C%E3%81%AE%E6%AC%A1%E4%B8%96%E4%BB%A3%E3%82%B7%E3%82%A7%E3%83%AB%E3%82%92%E5%BE%B9%E5%BA%95%E8%A7%A3%E8%AA%AC","a_id":2572285,"p_id":1225,"pl_id":27061,"pc_id":1925,"s_n":"yahoo","u_so":3}],"eid":"pUXHr","s":"s"});

 

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

  • B!