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


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow