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