サーチ…
前書き
スプラッティングは、複数のパラメータを1つのユニットとしてコマンドに渡す方法です。これは、パラメータとその値をハッシュテーブルにキーと値のペアとして格納し、スプラット演算子@
を使用してコマンドレットにスプラットすることによって行われます。
スプラッティングは、コマンドをより読みやすくし、複数のコマンド呼び出しでパラメータを再利用できるようにします。
備考
注: 配列式演算子または@()
は、Splatting演算子@
はまったく異なる動作をします。
スプラットパラメータ
スプラットは、コマンド・コールでパラメータと値の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