PowerShell
Splatting
Recherche…
Introduction
La splatting est une méthode de transmission de plusieurs paramètres à une commande en une seule unité. Cela se fait en stockant les paramètres et leurs valeurs en tant que paires clé-valeur dans une table de hachage et en les répartissant dans une applet de commande à l'aide de l'opérateur de répartition @
.
La fragmentation peut rendre une commande plus lisible et vous permet de réutiliser des paramètres dans des appels de commande multiples.
Remarques
Remarque: L' opérateur d'expression Array ou @()
a un comportement très différent de celui de l'opérateur Splatting @
.
En savoir plus sur about_Splatting @ TechNet
Paramètres de splatting
La répartition est effectuée en remplaçant le signe dollar $
par l'opérateur de répartition @
lors de l'utilisation d'une variable contenant une table de hachage contenant des paramètres et des valeurs dans un appel de commande.
$MyParameters = @{
Name = "iexplore"
FileVersionInfo = $true
}
Get-Process @MyParameters
Sans splatting:
Get-Process -Name "iexplore" -FileVersionInfo
Vous pouvez combiner des paramètres normaux avec des paramètres splatted pour ajouter facilement des paramètres communs à vos appels.
$MyParameters = @{
ComputerName = "StackOverflow-PC"
}
Get-Process -Name "iexplore" @MyParameters
Invoke-Command -ScriptBlock { "Something to excute remotely" } @MyParameters
Passage d'un paramètre Switch à l'aide de la division
Pour utiliser Splatting pour appeler Get-Process
avec le commutateur -FileVersionInfo
similaire à ceci:
Get-Process -FileVersionInfo
Ceci est l'appel utilisant le splatting:
$MyParameters = @{
FileVersionInfo = $true
}
Get-Process @MyParameters
Note: Ceci est utile car vous pouvez créer un jeu de paramètres par défaut et passer plusieurs fois l'appel comme ceci
$MyParameters = @{
FileVersionInfo = $true
}
Get-Process @MyParameters -Name WmiPrvSE
Get-Process @MyParameters -Name explorer
Tuyauterie et éclaboussure
La déclaration de splat est utile pour réutiliser des ensembles de paramètres plusieurs fois ou avec de légères variations:
$splat = @{
Class = "Win32_SystemEnclosure"
Property = "Manufacturer"
ErrorAction = "Stop"
}
Get-WmiObject -ComputerName $env:COMPUTERNAME @splat
Get-WmiObject -ComputerName "Computer2" @splat
Get-WmiObject -ComputerName "Computer3" @splat
Cependant, si le splat n'est pas indenté pour être réutilisé, vous ne souhaiterez peut-être pas le déclarer. Il peut être canalisé à la place:
@{
ComputerName = $env:COMPUTERNAME
Class = "Win32_SystemEnclosure"
Property = "Manufacturer"
ErrorAction = "Stop"
} | % { Get-WmiObject @_ }
Division de la fonction de niveau supérieur en une série de fonctions internes
Sans splatting, il est très difficile d'essayer de transmettre des valeurs à travers la pile d'appels. Mais si vous combinez la répartition avec la puissance de @PSBoundParameters, vous pouvez transmettre la collection de paramètres de niveau supérieur aux couches.
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