PowerShell
Rozpryskiwanie
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