PowerShell 関数の使用方法

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

PowerShell スクリプトを書くとき、私たちは多くの選択肢があります。例えば、タスクのために 1000 行のコードをすべて単一のコードブロックに書くことができます。

しかし、それは複雑になります。だから代わりに、PowerShell 関数を書いた方が良いでしょう。

PowerShell 関数は、私たちのコードの使いやすさと可読性を大幅に向上させ、作業が格段に楽になります。この記事では、関数の書き方、関数のパラメータの追加と管理、パイプライン入力を受け入れるように関数を設定する方法を学びます。

PowerShell における関数とコマンドレットの違い

PowerShell 関数の概念は馴染みがあるかもしれません。なぜなら、それはネイティブの PowerShell コマンドレットに似ているからです。例えば、Write-HostStart-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.
チュートリアルを楽しんでいますか? <a href="https://www.youtube.com/@delftstack/?sub_confirmation=1" style="color: #a94442; font-weight: bold; text-decoration: underline;">DelftStackをチャンネル登録</a> して、高品質な動画ガイドをさらに制作するためのサポートをお願いします。 Subscribe
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn

関連記事 - PowerShell Function