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


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow