Ricerca…


introduzione

Lo splattaggio è un metodo per passare più parametri a un comando come una singola unità. Questo viene fatto memorizzando i parametri ei loro valori come coppie chiave-valore in una tabella hash e suddividendola in un cmdlet usando l'operatore splatting @ .

Lo splatting può rendere più leggibile un comando e consente di riutilizzare i parametri in più comandi.

Osservazioni

Nota: l' operatore di espressione Array o @() hanno un comportamento molto diverso rispetto all'operatore Splatting @ .

Maggiori informazioni su about_Splatting @ TechNet

Splattare i parametri

Lo splatting viene effettuato sostituendo il simbolo $ con l'operatore splatting @ quando si utilizza una variabile contenente un HashTable di parametri e valori in una chiamata di comando.

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

Get-Process @MyParameters

Senza splatting:

Get-Process -Name "iexplore" -FileVersionInfo

È possibile combinare parametri normali con parametri splattati per aggiungere facilmente parametri comuni alle chiamate.

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

Get-Process -Name "iexplore" @MyParameters

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

Passare un parametro Switch usando Splatting

Per utilizzare Splatting per chiamare Get-Process con l' -FileVersionInfo simile a questo:

Get-Process -FileVersionInfo

Questa è la chiamata che utilizza lo splattaggio:

$MyParameters = @{
    FileVersionInfo = $true
}

Get-Process @MyParameters

Nota: questo è utile perché puoi creare un set predefinito di parametri e fare la chiamata più volte in questo modo

$MyParameters = @{
    FileVersionInfo = $true
}

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

Piping e Splatting

La dichiarazione dello splat è utile per riutilizzare insiemi di parametri più volte o con leggere variazioni:

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

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

Tuttavia, se lo splat non è rientrato per il riutilizzo, non si può desiderare di dichiararlo. Può essere convogliato invece:

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

Splatting dalla funzione di primo livello a una serie di funzioni interne

Senza lo splatting è molto complicato cercare di passare i valori attraverso lo stack delle chiamate. Ma se si combina lo splatting con la potenza di @PSBoundParameters, è possibile passare la raccolta dei parametri di livello superiore attraverso i livelli.

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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow