PowerShell 関数の使用方法
- PowerShell における関数とコマンドレットの違い
- PowerShell における関数の紹介
- PowerShell における関数へのパラメータの追加
- PowerShell における関数のシンプルなパラメータの作成

PowerShell スクリプトを書くとき、私たちは多くの選択肢があります。例えば、タスクのために 1000 行のコードをすべて単一のコードブロックに書くことができます。
しかし、それは複雑になります。だから代わりに、PowerShell 関数を書いた方が良いでしょう。
PowerShell 関数は、私たちのコードの使いやすさと可読性を大幅に向上させ、作業が格段に楽になります。この記事では、関数の書き方、関数のパラメータの追加と管理、パイプライン入力を受け入れるように関数を設定する方法を学びます。
PowerShell における関数とコマンドレットの違い
PowerShell 関数の概念は馴染みがあるかもしれません。なぜなら、それはネイティブの PowerShell コマンドレットに似ているからです。例えば、Write-Host
や Start-Service
のようなコマンドは、関数に非常に似ています。
しかし、コマンドレットは単一の問題を解決するために命名されたコードの断片であり、簡単にはカスタマイズできません。コマンドレットと関数の違いは、これらの構造がどのように作られているかです。
私たちは、Get-Command
コマンドレットとその -CommandType
パラメータを使用して、どのコマンドがコマンドレットであり、どれが関数であるかを見ることができます。
Get-Command -CommandType Function
上記のコマンドは、現在私たちの PowerShell セッションにロードされているすべての関数や、PowerShell で利用可能なモジュール内の関数を返します。
PowerShell における関数の紹介
私たちは、function
キーワードを使用して関数を定義し、その後に記述的なユーザー定義の名前と一対の波かっこを続けます。波かっこの中には、PowerShell に実行させたいスクリプトブロックがあります。
以下に、主要な関数とその関数の実行を見ることができます。この関数は Install-Software
と呼ばれ、Write-Host
を使用してコンソール内に出力メッセージを表示します(主にインストールのシミュレーションのために)。
定義したら、この関数の名前を使用してそのスクリプトブロック内のコードを実行できます。
例コード:
function Install-Software {
Write-Host 'The software has been installed.'
}
Install-Software
出力:
The software has been installed.
PowerShell における動詞-名詞構文の関数命名規則のベストプラクティス
関数の名前は重要です。私たちは関数に好きな名前を付けることができますが、その名前は常に関数が何をするかを説明するものでなければなりません。
PowerShell における関数命名規則のベストプラクティスは動詞-名詞構文です。
関数の名前は常に動詞で始まり、その後にダッシュと名詞を続けるべきです。Get-Verb
コマンドレットを使用して、承認された動詞のリストを見つけてください。
PowerShell における高度な関数の定義
このセクションでは、私たちが前のコードを PowerShell コンソールに直接コピー&ペーストしたと仮定しています。私たちはまた、スクリプト内で関数を定義することもできます。
前のセクションでは小さな関数を扱っていたので、コンソールで定義するのはあまり問題ではありませんでした。しかし、ほとんどの場合、私たちはもっと大きな関数を持つことになります。
したがって、そのような関数をスクリプトやモジュールで定義し、そのスクリプトやモジュールを呼び出して関数をメモリにロードする方が簡単です。
私たちが想像できるように、機能を調整するたびに大きな関数を再入力するのは混乱を招く可能性があります。
PowerShell における関数へのパラメータの追加
関数は任意の数のパラメータを持つことができます。私たちが関数を作成する際には、パラメータを含め、それらのパラメータがどのように機能するかを決定するオプションがあります。
パラメータはオプションまたは必須である可能性があり、限られた引数のリストのいずれかを強制的に受け入れるか、何でも受け入れることができます。
例えば、Install-Software
関数を介してインストールされる架空のソフトウェアには、以前に多くの可能なバージョンがあったかもしれません。しかし現在、Install-Software
関数は、ユーザーがインストールしたいバージョンを指定する方法を提供していません。
もし私たちだけがその関数を使用していたなら、特定のバージョンが必要なたびにその内部のコードを変更することも可能でしたが、それは多くの時間を消費します。この方法は潜在的なエラーの原因にもなり、私たちは他の人が私たちのコードを使えるようにしたいと考えています。
関数にパラメータを導入することで、関数に変動性が生まれます。変数が同じ状況の多くのバージョンを処理できるスクリプトを書くことを可能にしたように、パラメータは一つのことを多くの方法で行う単一の関数を書くことを可能にします。
この場合、私たちは同じソフトウェアのバージョンをインストールし、さらに多くのコンピュータでそれを行いたいと考えています。
まず、ユーザーまたは私たちがインストールするバージョンを指定できるようにするパラメータを関数に追加しましょう。
PowerShell における関数のシンプルなパラメータの作成
関数にパラメータを定義するには、パラメータブロックが必要です。パラメータブロックは、その関数のすべてのパラメータを保持します。
param
キーワードに続いてかっこを使ってパラメータブロックを定義します。以下のように示します。
例コード:
function Install-Software {
[CmdletBinding()]
param()
Write-Host 'The software has been installed.'
}
この時点で、私たちの関数の実際の機能はまったく変わっていません。私たちは単に配管を設置し、関数をパラメータに準備しているだけです。
param
ブロックを追加すると、パラメータをそのかっこの中に配置することでパラメータを作成できます。以下のように示します。
例コード:
function Install-Software {
[CmdletBinding()]
param(
[Parameter()]
[string] $Version
)
Write-Host "The software version $Version has been installed."
}
上の param
ブロックの中で、最初に Parameter
ブロックを定義します。Parameter()
ブロックを使用することで、パラメータは「高度なパラメータ」として変わります。
ここにあるような空の param
ブロックは何も行いませんが、必須です。次のセクションでその使い方を説明します。
パラメータ名の前にある [string]
型に焦点を合わせましょう。パラメータの型をパラメータ変数名の前に角括弧で囲んで記述することで、パラメータをキャストしています。
PowerShell は常に値を文字列としてデフォルト設定します。上記のように、変数 $Version
に渡されたものは常に文字列として扱われます。
私たちはまた、Write-Host
文に $Version
を追加します。そうすれば、Version
パラメータを持つ Install-Software
関数を実行し、バージョン番号を渡すと、それを示すメッセージが表示されるはずです。
例コード:
Install-Software -Version 2
出力:
The software version 2 has been installed.
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn