Sdílet prostřednictvím


O Splattingu

STRUČNÝ POPIS

Popisuje, jak pomocí splattingu předávat parametry příkazům v PowerShellu.

DLOUHÝ POPIS

[Tímto tématem přispěl Rohn Edwards z Gulfportu, Mississippi, správce systému a vítěz Advanced Division of the Scripting Games v roce 2012. Revidováno pro Windows PowerShell 3.0.]

Splatting je metoda předání kolekce hodnot parametrů do příkazu jako jednotky. PowerShell přidruží každou hodnotu v kolekci k parametru příkazu. Hodnoty splattovaných parametrů se ukládají do pojmenovaných proměnných splatting, které vypadají jako standardní proměnné, ale začínají symbolem At (@) místo znaku dolaru ($). Symbol At říká PowerShellu, že předáváte kolekci hodnot místo jedné hodnoty.

Splatting vaše příkazy zkrátí a zjednoduší jejich čtení. Hodnoty splattingu můžete znovu použít v různých voláních příkazů a pomocí splattingu předat hodnoty parametrů z $PSBoundParameters automatické proměnné jiným skriptům a funkcím.

Od Windows PowerShell 3.0 můžete také použít splatting k reprezentaci všech parametrů příkazu.

SYNTAXE

<CommandName> <optional parameters> @<HashTable> <optional parameters>
<CommandName> <optional parameters> @<Array> <optional parameters>

Pokud chcete zadat hodnoty parametrů pro poziční parametry, ve kterých nejsou požadovány názvy parametrů, použijte syntaxi pole. Pokud chcete zadat páry název parametru a hodnota, použijte syntaxi tabulky hash. Splatted hodnota se může zobrazit kdekoli v seznamu parametrů.

Při splattingu nemusíte k předání všech parametrů používat zatřiďovací tabulku ani pole. Některé parametry můžete předat pomocí splattingu a jiné podle pozice nebo názvu parametru. Můžete také nastavit více objektů v jednom příkazu, abyste nepředáli více než jednu hodnotu pro každý parametr.

SPLATTING S HASH TABULKAMI

Pomocí zatřiďovací tabulky můžete splatovat páry název parametru a hodnota. Tento formát můžete použít pro všechny typy parametrů, včetně pozičních a přepínacích parametrů. Poziční parametry musí být přiřazeny pomocí názvu.

Následující příklady porovnávají dva Copy-Item příkazy, které zkopírují soubor Test.txt do Test2.txt souboru ve stejném adresáři.

První příklad používá tradiční formát, ve kterém jsou zahrnuty názvy parametrů.

Copy-Item -Path "test.txt" -Destination "test2.txt" -WhatIf

Druhý příklad používá splatting tabulky hash. První příkaz vytvoří tabulku hash párů název_parametru a parametr-hodnota a uloží ji do $HashArguments proměnné . Druhý příkaz používá proměnnou $HashArguments v příkazu s splatting. Symbol At (@HashArguments) nahrazuje v příkazu znak dolaru ($HashArguments).

Pokud chcete zadat hodnotu parametru přepínače WhatIf, použijte $True nebo $False.

$HashArguments = @{
  Path = "test.txt"
  Destination = "test2.txt"
  WhatIf = $true
}
Copy-Item @HashArguments

Poznámka: V prvním příkazu symbol At (@) označuje tabulku hash, nikoli splattovanou hodnotu. Syntaxe zatřiďovacích tabulek v PowerShellu je: @{\<name\>=\<value\>; \<name\>=\<value\>; ...}*

SPLATTING S POLI

Pomocí pole můžete splatovat hodnoty pro poziční parametry, které nevyžadují názvy parametrů. Hodnoty musí být v matici seřazené podle pozice a čísla.

Následující příklady porovnávají dva Copy-Item příkazy, které zkopírují soubor Test.txt do Test2.txt souboru ve stejném adresáři.

První příklad používá tradiční formát, ve kterém jsou názvy parametrů vynechány. Hodnoty parametrů se v příkazu zobrazí v pořadí podle pozice.

Copy-Item "test.txt" "test2.txt" -WhatIf

Druhý příklad používá splatting pole. První příkaz vytvoří pole hodnot parametrů a uloží ho do $ArrayArguments proměnné . Hodnoty jsou v poli v pořadí pozice. Druhý příkaz používá proměnnou $ArrayArguments v příkazu při splattingu. Symbol At (@ArrayArguments) nahrazuje v příkazu znak dolaru ($ArrayArguments).

$ArrayArguments = "test.txt", "test2.txt"
Copy-Item @ArrayArguments -WhatIf

PŘÍKLADY

Tento příklad ukazuje, jak znovu použít splattované hodnoty v různých příkazech. Příkazy v tomto příkladu používají rutinu k zápisu Write-Host zpráv do konzoly hostitelského programu. Pomocí splattingu určuje barvy popředí a pozadí.

Pokud chcete změnit barvy všech příkazů, stačí změnit hodnotu $Colors proměnné .

První příkaz vytvoří tabulku hash obsahující názvy a hodnoty parametrů a uloží tabulku hash do $Colors proměnné .

$Colors = @{ForegroundColor = "black"; BackgroundColor = "white"}

Druhý a třetí příkaz používají proměnnou $Colors pro splatting v Write-Host příkazu. Pokud chcete použít $Colors variableznak , nahraďte znak dolaru ($Colors) symbolem At (@Colors).

#Write a message with the colors in $Colors
Write-Host "This is a test." @Colors

#Write second message with same colors. The position of splatted
#hash table does not matter.
Write-Host @Colors "This is another test."

Tento příklad ukazuje, jak předat parametry jiným příkazům pomocí splattingu $PSBoundParameters a automatické proměnné.

Automatická $PSBoundParameters proměnná je objekt slovníku (System.Collections.Generic.Dictionary), který obsahuje všechny názvy parametrů a hodnoty, které se používají při spuštění skriptu nebo funkce.

V následujícím příkladu $PSBoundParameters použijeme proměnnou k předání hodnot parametrů předaných skriptu nebo funkci z Test2 funkce do Test1 funkce. Obě volání Test1 funkce z Test2 používají splatting.

function Test1
{
    param($a, $b, $c)

    $a
    $b
    $c
}

function Test2
{
    param($a, $b, $c)

    #Call the Test1 function with $a, $b, and $c.
    Test1 @PsBoundParameters

    #Call the Test1 function with $b and $c, but not with $a
    $LimitedParameters = $PSBoundParameters
    $LimitedParameters.Remove("a") | Out-Null
    Test1 @LimitedParameters
}
Test2 -a 1 -b 2 -c 3
1
2
3
2
3

PARAMETRY PŘÍKAZU SPLATTING

Splatting můžete použít k reprezentaci parametrů příkazu. Tato technika je užitečná při vytváření funkce proxy, tj. funkce, která volá jiný příkaz. Tato funkce je zavedená v Windows PowerShell 3.0.

Pokud chcete vyjádřit parametry příkazu, použijte @Args k reprezentaci parametrů příkazu . Tato technika je jednodušší než výčet parametrů příkazu a funguje bez revize i v případě, že se parametry volaného příkazu změní.

Funkce používá automatickou $Args proměnnou, která obsahuje všechny nepřiřazené hodnoty parametrů.

Například následující funkce volá rutinu Get-Process . V této funkci @Args představuje všechny parametry rutiny Get-Process .

function Get-MyProcess { Get-Process @Args }

Při použití Get-MyProcess funkce se do předají @Argsvšechny nepřiřazené parametry a hodnoty parametrů, jak je znázorněno v následujících příkazech.

Get-MyProcess -Name PowerShell
Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
    463      46   225484     237196   719    15.86   3228 powershell
Get-MyProcess -Name PowerShell_Ise -FileVersionInfo
ProductVersion   FileVersion      FileName
--------------   -----------      --------
6.2.9200.16384   6.2.9200.1638... C:\Windows\system32\WindowsPowerShell\...

Můžete použít @Args ve funkci, která má explicitně deklarované parametry. Ve funkci ji můžete použít více než jednou, ale všechny parametry, které zadáte, se předají všem instancím objektu @Args, jak je znázorněno v následujícím příkladu.

function Get-MyCommand
{
    Param ([switch]$P, [switch]$C)
    if ($P) { Get-Process @Args }
    if ($C) { Get-Command @Args }
}

Get-MyCommand -P -C -Name PowerShell
Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
408      28    75568      83176   620     1.33   1692 powershell

Path               : C:\Windows\System32\WindowsPowerShell\v1.0\powershell.e
Extension          : .exe
Definition         : C:\Windows\System32\WindowsPowerShell\v1.0\powershell.e
Visibility         : Public
OutputType         : {System.String}
Name               : powershell.exe
CommandType        : Application
ModuleName         :
Module             :
RemotingCapability : PowerShell
Parameters         :
ParameterSets      :
HelpUri            :
FileVersionInfo    : File:             C:\Windows\System32\WindowsPowerShell
                     \v1.0\powershell.exe
                     InternalName:     POWERSHELL
                     OriginalFilename: PowerShell.EXE.MUI
                     FileVersion:      10.0.14393.0 (rs1_release.160715-1616
                     FileDescription:  Windows PowerShell
                     Product:          Microsoft Windows Operating System
                     ProductVersion:   10.0.14393.0
                     Debug:            False
                     Patched:          False
                     PreRelease:       False
                     PrivateBuild:     False
                     SpecialBuild:     False
                     Language:         English (United States)

POZNÁMKY

PowerShell Desired State Configuration (DSC) nebyl navržen pro použití splattingu. K předání hodnot do prostředku DSC nemůžete použít splatting. Další informace najdete v článku Pseudo-Splatting DSC prostředků Gaela Colase.

VIZ TAKÉ

about_Arrays

about_Automatic_Variables

about_Hash_Tables

about_Parameters