Buscar..


Introducción

Splatting es un método para pasar múltiples parámetros a un comando como una sola unidad. Esto se hace almacenando los parámetros y sus valores como pares clave-valor en una tabla hash y dividiéndolos en un cmdlet usando el operador de distribución @ .

Splatting puede hacer que un comando sea más legible y le permite reutilizar parámetros en múltiples llamadas de comando.

Observaciones

Nota: El operador de expresión de Array o @() tienen un comportamiento muy diferente al del operador de Splatting @ .

Lea más en about_Splatting @ TechNet

Parámetros de salpicadura

La salpicadura se realiza reemplazando el signo de dólar $ con el operador de salpicadura @ cuando se usa una variable que contiene una HashTable de parámetros y valores en una llamada de comando.

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

Get-Process @MyParameters

Sin salpicaduras:

Get-Process -Name "iexplore" -FileVersionInfo

Puede combinar parámetros normales con parámetros distribuidos para agregar fácilmente parámetros comunes a sus llamadas.

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

Get-Process -Name "iexplore" @MyParameters

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

Pasando un parámetro Switch usando Splatting

Para usar Splatting para llamar a Get-Process con el interruptor -FileVersionInfo similar a esto:

Get-Process -FileVersionInfo

Esta es la llamada utilizando splatting:

$MyParameters = @{
    FileVersionInfo = $true
}

Get-Process @MyParameters

Nota: esto es útil porque puede crear un conjunto predeterminado de parámetros y hacer la llamada muchas veces de esta manera

$MyParameters = @{
    FileVersionInfo = $true
}

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

Tubería y salpicaduras

Declarar el splat es útil para reutilizar conjuntos de parámetros varias veces o con ligeras variaciones:

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

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

Sin embargo, si el splat no tiene sangría para su reutilización, es posible que no desee declararlo. Se puede canalizar en su lugar:

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

Splatting de la función de nivel superior a una serie de funciones internas

Sin salpicaduras es muy complicado intentar pasar los valores a través de la pila de llamadas. Pero si combina splatting con la potencia de @PSBoundParameters , puede pasar la colección de parámetros de nivel superior a través de las capas.

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
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow