PowerShell
Spritzen
Suche…
Einführung
Splatting ist eine Methode, mehrere Parameter als einzelne Einheit an einen Befehl zu übergeben. Dazu werden die Parameter und ihre Werte als Schlüssel / Wert-Paare in einer Hashtabelle gespeichert und mit dem Splatting-Operator @
in ein Cmdlet aufgeteilt.
Splatting kann einen Befehl lesbarer machen und ermöglicht die Wiederverwendung von Parametern in mehreren Befehlsaufrufen.
Bemerkungen
Hinweis: Der Array-Ausdrucksoperator oder @()
hat ein anderes Verhalten als der Splatting-Operator @
.
Lesen Sie mehr bei about_Splatting @ TechNet
Splatting-Parameter
Das Aufteilen erfolgt durch Ersetzen des Dollarzeichens $
durch den Aufteilungsoperator @
wenn eine Variable verwendet wird, die eine HashTable mit Parametern und Werten in einem Befehlsaufruf enthält.
$MyParameters = @{
Name = "iexplore"
FileVersionInfo = $true
}
Get-Process @MyParameters
Ohne splatting:
Get-Process -Name "iexplore" -FileVersionInfo
Sie können normale Parameter mit aufgeteilten Parametern kombinieren, um Ihren Aufrufen problemlos allgemeine Parameter hinzuzufügen.
$MyParameters = @{
ComputerName = "StackOverflow-PC"
}
Get-Process -Name "iexplore" @MyParameters
Invoke-Command -ScriptBlock { "Something to excute remotely" } @MyParameters
Übergeben eines Switch-Parameters mithilfe von Splatting
So rufen Sie Get-Process
mit dem Schalter -FileVersionInfo
auf:
Get-Process -FileVersionInfo
Dies ist der Aufruf, der Splatting verwendet:
$MyParameters = @{
FileVersionInfo = $true
}
Get-Process @MyParameters
Hinweis: Dies ist hilfreich, da Sie einen Standardsatz von Parametern erstellen und den Aufruf so oft ausführen können
$MyParameters = @{
FileVersionInfo = $true
}
Get-Process @MyParameters -Name WmiPrvSE
Get-Process @MyParameters -Name explorer
Pfeifen und Spritzen
Das Deklarieren des Splats ist hilfreich, wenn Sie Parametersätze mehrmals oder mit geringfügigen Abweichungen verwenden möchten:
$splat = @{
Class = "Win32_SystemEnclosure"
Property = "Manufacturer"
ErrorAction = "Stop"
}
Get-WmiObject -ComputerName $env:COMPUTERNAME @splat
Get-WmiObject -ComputerName "Computer2" @splat
Get-WmiObject -ComputerName "Computer3" @splat
Wenn der Splat jedoch nicht zur Wiederverwendung eingerückt ist, möchten Sie ihn möglicherweise nicht deklarieren. Es kann stattdessen geleitet werden:
@{
ComputerName = $env:COMPUTERNAME
Class = "Win32_SystemEnclosure"
Property = "Manufacturer"
ErrorAction = "Stop"
} | % { Get-WmiObject @_ }
Splatting von der Top-Level-Funktion zu einer Reihe von inneren Funktionen
Ohne Aufteilung ist es sehr umständlich, die Werte durch den Aufrufstapel weiterzuleiten. Wenn Sie jedoch die Aufteilung mit der Leistungsfähigkeit von @PSBoundParameters kombinieren , können Sie die Parameterauflistung der obersten Ebene durch die Ebenen weiterleiten .
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