サーチ…


前書き

スプラッティングは、複数のパラメータを1つのユニットとしてコマンドに渡す方法です。これは、パラメータとその値をハッシュテーブルにキーと値のペアとして格納し、スプラット演算子@を使用してコマンドレットにスプラットすることによって行われます。

スプラッティングは、コマンドをより読みやすくし、複数のコマンド呼び出しでパラメータを再利用できるようにします。

備考

注: 配列式演算子または@()は、Splatting演算子@はまったく異なる動作をします。

about_Splatting @ TechNet詳細を読む

スプラットパラメータ

スプラットは、コマンド・コールでパラメータと値のHashTableを含む変数を使用するときに$記号$スプラット演算子@に置き換えることによって行われます。

$MyParameters = @{
    Name = "iexplore"
    FileVersionInfo = $true
}

Get-Process @MyParameters

スプラットなし:

Get-Process -Name "iexplore" -FileVersionInfo

通常のパラメータとスプラットされたパラメータを組み合わせて、呼び出しに共通のパラメータを簡単に追加することができます。

$MyParameters = @{
    ComputerName = "StackOverflow-PC"
}

Get-Process -Name "iexplore" @MyParameters

Invoke-Command -ScriptBlock { "Something to excute remotely" } @MyParameters

Splattingを使用したスイッチパラメータの受け渡し

Splattingを使用して、 -FileVersionInfoような-FileVersionInfoスイッチでGet-Processを呼び出すには

Get-Process -FileVersionInfo

これはスプラットを使用した呼び出しです。

$MyParameters = @{
    FileVersionInfo = $true
}

Get-Process @MyParameters

注意:これは便利なのは、デフォルトのパラメタのセットを作成し、このような何度も呼び出しを行うことができるからです

$MyParameters = @{
    FileVersionInfo = $true
}

Get-Process @MyParameters -Name WmiPrvSE
Get-Process @MyParameters -Name explorer

配管とスプラット

スプラットの宣言は、パラメータのセットを複数回、またはわずかなバリエーションで再利用する場合に便利です。

$splat = @{
   Class = "Win32_SystemEnclosure"
   Property = "Manufacturer"
   ErrorAction = "Stop"
}

Get-WmiObject -ComputerName $env:COMPUTERNAME @splat
Get-WmiObject -ComputerName "Computer2" @splat
Get-WmiObject -ComputerName "Computer3" @splat

ただし、スプラットが再利用のためにインデントされていない場合は、宣言したくない場合があります。代わりにパイプすることができます:

@{
   ComputerName = $env:COMPUTERNAME
   Class = "Win32_SystemEnclosure"
   Property = "Manufacturer"
   ErrorAction = "Stop"
} | % { Get-WmiObject @_ }

トップレベル機能から一連の内部機能への分割

スプラットなしでは、コールスタックを介して値を試して渡すのは非常に面倒です。しかし、 スプラットを@PSBoundParametersのパワーと組み合わせると、トップレベルのパラメータコレクションをレイヤーに渡すことができます。

Function Outer-Method
{
    Param
    (
        [string]
        $First,
        
        [string]
        $Second
    )
    
    Write-Host ($First) -NoNewline
    
    Inner-Method @PSBoundParameters
}

Function Inner-Method
{
    Param
    (
        [string]
        $Second
    )
    
    Write-Host (" {0}!" -f $Second)
}

$parameters = @{
    First = "Hello"
    Second = "World"
}


Outer-Method @parameters


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow