PowerShell 関数から複数のアイテムを返す方法

  1. PowerShell 関数から複数のアイテムを返すために配列を使用する
  2. PowerShell 関数から複数のアイテムを返すために [PSCustomObject] を使用する
  3. PowerShell 関数から複数のアイテムを返すためにハッシュテーブルを使用する
  4. PowerShell 関数から複数のアイテムを返すためにカスタムオブジェクトを使用する
  5. 結論
PowerShell 関数から複数のアイテムを返す方法

PowerShell 関数を使って作業する際、複数の値を効率的に返す必要があることがよくあります。一つの効果的なアプローチは、配列、[PSCustomObject]、ハッシュテーブル、またはカスタムオブジェクトを利用してこれらの値をカプセル化し、提示することです。

この記事では、これらのメソッドを使用して PowerShell 関数から複数のアイテムを返す方法について掘り下げます。各メソッドの手順を段階的に説明し、それらの実装を示すコード例と出力を紹介します。

PowerShell 関数から複数のアイテムを返すために配列を使用する

配列を使って PowerShell 関数から複数の値を返すには、以下の手順に従います。

  • 配列変数を宣言する: 返したい複数の値を保持するために、関数内で配列変数を宣言することから始めます。
  • 配列を填充する: 返したい望ましい値で配列を填充します。インデックスを使用して配列に要素を追加できます。
  • 配列を返す: 塡充された配列を関数の出力として返します。

配列を使用して複数の値を返す簡単な PowerShell 関数を作成しましょう。

function Get-MultipleValues {
    $values = @()

    $values += "Value1"
    $values += "Value2"
    $values += "Value3"

    return $values
}

$resultArray = Get-MultipleValues

Write-Output "Values returned from the function:"
foreach ($value in $resultArray) {
    Write-Output $value
}

出力:

Values returned from the function:
Value1
Value2
Value3

この例では、Get-MultipleValues という名前の関数があります。関数内で、配列変数 $values を宣言します。

次に、この配列に 3つの値:"Value1""Value2"、および"Value3"を填充します。最後に、填充された配列を関数の出力として返します。

関数を呼び出すと、結果を変数($resultArray)に保存し、ループを使用して配列内の値を表示します。

PowerShell 関数から複数のアイテムを返すために [PSCustomObject] を使用する

[PSCustomObject] を使用して PowerShell でカスタムオブジェクトを作成することもできます。これにより、オブジェクトのプロパティと値を定義でき、関数から複数の値を返すのに適した選択となります。

[PSCustomObject] を使用してカスタムオブジェクトを作成するには、次のようにプロパティとそれに対応する値を定義します。

$customObject = [PSCustomObject]@{
    Property1 = 'Value1'
    Property2 = 'Value2'
    ...
}

PowerShell 関数内で [PSCustomObject] を使用して複数の値を返すためには、まず PowerShell 関数を定義し、[PSCustomObject] のインスタンスを作成します。カスタムオブジェクト内で返したいプロパティと値を定義します。

function Get-MultipleValues {
    [CmdletBinding()]
    param (
        [string]$Value1,
        [int]$Value2,
        [string]$Value3
    )

    $resultObject = [PSCustomObject]@{
        Name    = $Value1
        Age     = $Value2
        Address = $Value3
    }

    return $resultObject
}

次に、関数を呼び出して複数の値を持つカスタムオブジェクトを取得できます。

$result = Get-MultipleValues -Value1 'Rohan' -Value2 21 -Value3 'UK'

Write-Output "Values returned from the function:"
foreach ($value in $result) {
    Write-Output $value
}

出力:

Values returned from the function:
Name  Age Address
----  --- -------
Rohan  21 UK

ご覧のとおり、上記の PowerShell コードは Get-MultipleValues という名前の関数を紹介しています。この関数は、共通コマンドレットパラメータを利用する能力を示すために [CmdletBinding()] でタグ付けされています。

関数内では、3つのパラメータ $Value1(文字列)、$Value2(整数)、および $Value3(文字列)が定義されています。関数は、これらのパラメータを使用して $resultObject というカスタムオブジェクトを構築し、プロパティ NameAge、および Address に割り当てます。

return $resultObject 文は、このカスタムオブジェクトが Get-MultipleValues 関数の出力として返されることを保証します。

その後、スクリプトは Get-MultipleValues 関数を呼び出し、各パラメータの値を指定します:$Value1'Rohan'に設定され、$Value221 に、$Value3'UK'に設定されます。提供されたパラメータ値を組み込んだカスタムオブジェクトは、変数 $result に保存されます。

その後、スクリプトは Write-Output を使用してコンソールにメッセージを表示し、$result に保持されたカスタムオブジェクトのプロパティをループで回り、各プロパティについてプロパティ名とその値をコンソールに表示します。

PowerShell 関数から複数のアイテムを返すためにハッシュテーブルを使用する

PowerShell のハッシュテーブルは、キーと値のペアの順序のないコレクションです。各キーは一意でなければならず、関連付けられた値は任意のデータ型であることができます。

ハッシュテーブルは辞書または連想配列とも呼ばれます。特定のキーに基づいてデータを格納および取得する必要がある場合に特に便利で、情報を整理するための構造化された方法を提供します。

ハッシュテーブルを使用して PowerShell 関数から複数の値を返すには、以下の手順に従います。

  • ハッシュテーブルを作成する: 返したいデータを表すキーと値のペアを格納するために、関数内でハッシュテーブルをインスタンス化します。

    PowerShell では@{} を使ってハッシュテーブルを作成できます。キーと値は {} のブラケット内に置かれます。

    ハッシュテーブルを作成するための構文は次のようになります。

    @{ <key> = <value>; [<key> = <value> ] ... }
    
  • キーと値のペアを追加する: ハッシュテーブルにキーと値のペアを追加し、各値を一意のキーに関連付けます。
  • ハッシュテーブルを返す: 塡充されたハッシュテーブルを関数の出力として返します。

user という名前の関数から複数の値を返すためにハッシュテーブルを使用する例を見てみましょう。

コード:

function user() {
    $hash = @{ Name = 'Rohan'; Age = 21; Address = 'UK' }
    return $hash
}

$a = user
Write-Host "$($a.Name) is $($a.Age) and lives in $($a.Address)."

出力:

Rohan is 21 and lives in UK.

このコードは、function キーワードを使用して user() という名前の関数を定義しています。この関数内では、@{} 構文を使用して $hash という名前のハッシュテーブルが作成され、3つのキーと値のペアが含まれています:Name には値'Rohan'Age には値 21Address には値'UK'があります。

return $hash 文は、このハッシュテーブルが user() 関数の出力であることを保証します。

その後、スクリプトは user() 関数を呼び出し、結果として得られたハッシュテーブルを変数 $a に割り当てます。これは、$a が現在 user() 関数によって返されたハッシュテーブルを保持していることを意味します。

最後に、Write-Host コマンドレットを使用してコンソールにメッセージを表示します。このメッセージには、$a に格納されたハッシュテーブルからの値が含まれ、$($a.Name)$($a.Age)、および $($a.Address) を使用して NameAge、および Address の値にアクセスします。

次に、2つの数値の合計と積を計算し、ハッシュテーブルを使用して結果を返す別の PowerShell 関数を作成しましょう。

function Calculate-SumAndProduct {
    param(
        [int]$num1,
        [int]$num2
    )

    $resultHashTable = @{
        Sum     = $num1 + $num2
        Product = $num1 * $num2
    }

    return $resultHashTable
}

$inputNum1 = 5
$inputNum2 = 7

$result = Calculate-SumAndProduct -num1 $inputNum1 -num2 $inputNum2

Write-Output "Sum: $($result['Sum'])"
Write-Output "Product: $($result['Product'])"

出力:

Sum: 12
Product: 35

このコードは、Calculate-SumAndProduct という関数を定義することから始まります。この関数は 2つの int パラメータ、$num1$num2 を受け取ります。関数内で、@{} 構文を使用して $resultHashTable という名前のハッシュテーブルが作成されます。

このハッシュテーブルには、Sum$num1$num2 の合計に等しい値を持ち、Product$num1$num2 の積に等しい値を持つ 2つのキーと値のペアが含まれています。関数はこのハッシュテーブルを返し、Calculate-SumAndProduct 関数の出力とします。

次に、スクリプト内で 2つの入力数が定義されます:$inputNum1 に値 5$inputNum2 に値 7Calculate-SumAndProduct 関数はこれらの入力数で呼び出され、得られたハッシュテーブルは $result という名前の変数に保存されます。

最後に、スクリプトは Write-Output コマンドレットを使用して、$result に保存されたハッシュテーブルの対応する値にアクセスすることで合計と積の値を表示します。

PowerShell 関数から複数のアイテムを返すためにカスタムオブジェクトを使用する

PowerShell のカスタムオブジェクトは、System.Management.Automation.PSCustomObject クラスのインスタンスです。これにより、プロパティとそれらのプロパティに関連付けられた値を定義でき、現実世界のオブジェクトを模倣できます。

カスタムオブジェクトは柔軟で、データを構造化した方法で整理し、取得することを可能にします。

カスタムオブジェクトを使用して PowerShell 関数から複数の値を返すには、以下の手順に従います。

  • カスタムオブジェクトを定義する: 関数内でカスタムオブジェクトを作成し、返したい値のプロパティを定義します。
  • プロパティ値を割り当てる: 返したい値をカスタムオブジェクトのプロパティに割り当てます。
  • カスタムオブジェクトを返す: 塡充されたカスタムオブジェクトを関数の出力として返します。

2つの数の合計と積を計算し、カスタムオブジェクトを使用して結果を返す PowerShell 関数を作成しましょう。

function Calculate-SumAndProduct {
    param(
        [int]$num1,
        [int]$num2
    )

    $resultObject = New-Object PSObject
    $resultObject | Add-Member -MemberType NoteProperty -Name "Sum" -Value ($num1 + $num2)
    $resultObject | Add-Member -MemberType NoteProperty -Name "Product" -Value ($num1 * $num2)

    return $resultObject
}

$inputNum1 = 5
$inputNum2 = 7

$result = Calculate-SumAndProduct -num1 $inputNum1 -num2 $inputNum2

Write-Output "Sum: $($result.Sum)"
Write-Output "Product: $($result.Product)"

出力:

Sum: 12
Product: 35

この例では、2つの入力数($num1 および $num2)を受け取る Calculate-SumAndProduct という関数を定義しました。関数内で、$resultObject という名前のカスタムオブジェクトを作成し、プロパティ(Sum および Product)を追加して、それぞれの計算された値を割り当てました。

入力数(5 および 7)で関数を呼び出すと、結果を変数($result)に保存します。次に、結果のカスタムオブジェクトのプロパティにアクセスして合計と積を表示しました。

結論

この記事では、配列、[PSCustomObject]、ハッシュテーブル、およびカスタムオブジェクトを使用して関数から複数の値を返すさまざまなテクニックを探求しました。各メソッドにはそれぞれの利点があり、スクリプトの特定の要件に応じて選択できます。

配列は、特にデータ項目が類似のタイプまたは構造を持つ場合に複数の値を返すための簡単な方法を提供します。[PSCustomObject] は、名前付きプロパティを持つカスタムオブジェクトを作成することを可能にし、データを返すための構造化されたアプローチを提供します。

ハッシュテーブルは、特定のキーに基づいてデータを取得する必要があるシナリオで優れた機能を発揮し、情報を整理された効率的な解決策を提供します。[System.Management.Automation.PSCustomObject] クラスを使用して構築されたカスタムオブジェクトは柔軟性を提供し、現実世界のオブジェクトを模倣します。

チュートリアルを楽しんでいますか? <a href="https://www.youtube.com/@delftstack/?sub_confirmation=1" style="color: #a94442; font-weight: bold; text-decoration: underline;">DelftStackをチャンネル登録</a> して、高品質な動画ガイドをさらに制作するためのサポートをお願いします。 Subscribe
著者: Rohan Timalsina
Rohan Timalsina avatar Rohan Timalsina avatar

Rohan is a learner, problem solver, and web developer. He loves to write and share his understanding.

LinkedIn Website

関連記事 - PowerShell Function