Sök…


Introduktion

Splitting är en metod för att överföra flera parametrar till ett kommando som en enhet. Detta görs genom att lagra parametrarna och deras värden som nyckelvärdespar i en hashtable och dela upp dem till en cmdlet med hjälp av splitoperatören @ .

Splitting kan göra ett kommando mer läsbart och låter dig återanvända parametrar i flera kommandosamtal.

Anmärkningar

Obs: Array-uttrycksoperatören eller @() har mycket annorlunda beteende än Splatting-operatören @ .

Läs mer på about_Splatting @ TechNet

Splattparametrar

Splitting görs genom att byta ut dollartecknet $ med splitteroperatören @ när du använder en variabel som innehåller en HashTable av parametrar och värden i ett kommandosamtal.

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

Get-Process @MyParameters

Utan att dela:

Get-Process -Name "iexplore" -FileVersionInfo

Du kan kombinera normala parametrar med splattade parametrar för att enkelt lägga till vanliga parametrar till dina samtal.

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

Get-Process -Name "iexplore" @MyParameters

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

Att skicka en switch-parameter med Splatting

Så här använder du Splatting för att ringa Get-Process med -FileVersionInfo omkopplaren liknande:

Get-Process -FileVersionInfo

Detta är samtalet med hjälp av splitting:

$MyParameters = @{
    FileVersionInfo = $true
}

Get-Process @MyParameters

Obs: Det här är användbart eftersom du kan skapa en standarduppsättning paramatrar och ringa samtalet många gånger så här

$MyParameters = @{
    FileVersionInfo = $true
}

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

Rörning och stänk

Att förklara split är användbart för att återanvända uppsättningar av parametrar flera gånger eller med små variationer:

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

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

Men om stänk inte är indraget för återanvändning, kanske du inte vill förklara det. Det kan ledas istället:

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

Dela upp från toppnivåfunktion till en serie inre funktion

Utan att dela är det mycket besvärligt att försöka skicka värden ner genom samtalstacken. Men om du kombinerar splittring med kraften i @PSBoundParametrarna kan du passera den översta parametersamlingen genom lagren.

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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow