Szukaj…


Wprowadzenie

Rozpryskiwanie to metoda przekazywania wielu parametrów do polecenia jako pojedynczej jednostki. Odbywa się to poprzez przechowywanie parametrów i ich wartości jako par klucz-wartość w tablicy mieszającej i rozpryskiwanie jej do cmdletu za pomocą operatora rozpryskiwania @ .

Rozpryskiwanie może sprawić, że polecenie stanie się bardziej czytelne i pozwoli na ponowne użycie parametrów w wielu wywołaniach poleceń.

Uwagi

Uwaga: Operator wyrażeń tablicowych lub @() mają zupełnie inne zachowanie niż operator Splatting @ .

Przeczytaj więcej na about_Splatting @ TechNet

Parametry rozpryskiwania

Splatowanie odbywa się poprzez zastąpienie znaku dolara $ operatorem splatting @ gdy używana jest zmienna zawierająca tabelę parametrów i wartości HashTable w wywołaniu polecenia.

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

Get-Process @MyParameters

Bez rozpryskiwania:

Get-Process -Name "iexplore" -FileVersionInfo

Możesz łączyć normalne parametry z parametrami rozproszonymi, aby łatwo dodawać wspólne parametry do swoich połączeń.

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

Get-Process -Name "iexplore" @MyParameters

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

Przekazywanie parametru Switch za pomocą opcji Splatting

Aby użyć Splatting do wywołania Get-Process za pomocą przełącznika -FileVersionInfo podobnego do tego:

Get-Process -FileVersionInfo

To jest połączenie z użyciem rozpryskiwania:

$MyParameters = @{
    FileVersionInfo = $true
}

Get-Process @MyParameters

Uwaga: Jest to przydatne, ponieważ można utworzyć domyślny zestaw parametrów i wykonać połączenie wiele razy w ten sposób

$MyParameters = @{
    FileVersionInfo = $true
}

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

Rurociągi i rozpryski

Zadeklarowanie ikony jest przydatne do wielokrotnego użycia zestawów parametrów lub z niewielkimi zmianami:

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

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

Jeśli jednak ikona nie jest przeznaczona do ponownego użycia, możesz nie chcieć jej deklarować. Zamiast tego można go potokować:

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

Rozpryskiwanie od funkcji najwyższego poziomu do szeregu funkcji wewnętrznych

Bez splatowania próba przekazywania wartości przez stos wywołań jest bardzo uciążliwa. Ale jeśli połączysz rozpryskiwanie z siłą @PSBoundParameters , możesz przekazać kolekcję parametrów najwyższego poziomu przez warstwy.

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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow