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


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow