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