PowerShell
splatting
Zoeken…
Invoering
Splatting is een methode om meerdere parameters als een eenheid aan een opdracht door te geven. Dit wordt gedaan door de parameters en hun waarden op te slaan als sleutel / waarde-paren in een hashtable en deze naar een cmdlet te spatten met behulp van de splat-operator @
.
Splatting kan een opdracht leesbaarder maken en stelt u in staat om parameters in meerdere opdrachtoproepen opnieuw te gebruiken.
Opmerkingen
Opmerking: de operator Array expression of @()
heeft een heel ander gedrag dan de operator Splatting @
.
Lees meer op about_Splatting @ TechNet
Splatparameters
Splatting wordt gedaan door het dollarteken $
door de splatting operator @
wanneer een variabele wordt gebruikt die een HashTable van parameters en waarden bevat in een opdrachtoproep.
$MyParameters = @{
Name = "iexplore"
FileVersionInfo = $true
}
Get-Process @MyParameters
Zonder spatten:
Get-Process -Name "iexplore" -FileVersionInfo
U kunt normale parameters combineren met gesplitste parameters om eenvoudig algemene parameters aan uw oproepen toe te voegen.
$MyParameters = @{
ComputerName = "StackOverflow-PC"
}
Get-Process -Name "iexplore" @MyParameters
Invoke-Command -ScriptBlock { "Something to excute remotely" } @MyParameters
Een parameter Switch doorgeven met behulp van Splatting
Om Splatting te gebruiken om Get-Process
aan te roepen met de -FileVersionInfo
schakelaar vergelijkbaar met deze:
Get-Process -FileVersionInfo
Dit is de oproep met behulp van splatting:
$MyParameters = @{
FileVersionInfo = $true
}
Get-Process @MyParameters
Opmerking: dit is handig omdat u een standaardset paramaters kunt maken en zo vaak kunt bellen
$MyParameters = @{
FileVersionInfo = $true
}
Get-Process @MyParameters -Name WmiPrvSE
Get-Process @MyParameters -Name explorer
Buizen en spatten
Het verklaren van de splat is handig voor het meerdere keren hergebruiken van parametersets of met kleine variaties:
$splat = @{
Class = "Win32_SystemEnclosure"
Property = "Manufacturer"
ErrorAction = "Stop"
}
Get-WmiObject -ComputerName $env:COMPUTERNAME @splat
Get-WmiObject -ComputerName "Computer2" @splat
Get-WmiObject -ComputerName "Computer3" @splat
Als de splat echter niet is ingesprongen voor hergebruik, wilt u deze misschien niet aangeven. Het kan in plaats daarvan worden doorgesluisd:
@{
ComputerName = $env:COMPUTERNAME
Class = "Win32_SystemEnclosure"
Property = "Manufacturer"
ErrorAction = "Stop"
} | % { Get-WmiObject @_ }
Splatting van topniveaufunctie naar een reeks innerlijke functies
Zonder spatten is het erg lastig om te proberen waarden door de call-stack te halen. Maar als u splatting combineert met de kracht van de @PSBoundParameters , kunt u de verzameling van de hoogste parameterparameters door de lagen doorgeven.
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