Megosztás a következőn keresztül:


A fröccsenésről

RÖVID LEÍRÁS

Ez a cikk azt ismerteti, hogyan adhat át paramétereket a powershell-parancsoknak a splatting használatával.

HOSSZÚ LEÍRÁS

[A témához Rohn Edwards (Gulfport, Mississippi) járult hozzá, rendszergazda és a 2012-es Scripting Games Advanced Division győztese. A Windows PowerShell 3.0-ra javítva.]

A fröccsenés egy olyan módszer, amellyel paraméterértékek gyűjteményét egységként adjuk át egy parancsnak. A PowerShell a gyűjtemény minden értékét egy parancsparaméterrel társítja. A splatted paraméterértékek nevesített szórásváltozókban vannak tárolva, amelyek standard változóknak tűnnek, de a dollárjel (@) helyett egy At szimbólummal ($) kezdődnek. A At szimbólum azt jelzi a PowerShellnek, hogy egyetlen érték helyett egy értékgyűjteményt ad át.

A splatting rövidebbé és könnyebben olvashatóvá teszi a parancsokat. A splatting értékeket újra felhasználhatja különböző parancshívásokban, és a splatting használatával paraméterértékeket adhat át az $PSBoundParameters automatikus változóból más szkripteknek és függvényeknek.

A Windows PowerShell 3.0-tól kezdve a "splatting" technikával egy parancs összes paraméterét is reprezentálhatja.

SZINTAXIS

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

Ha paraméterértékeket szeretne megadni a pozícióparaméterekhez, amelyekben nincs szükség paraméternevekre, használja a tömb szintaxisát. Paraméternév és értékpárok megadásához használja a kivonattábla szintaxisát. A splatted érték bárhol megjelenhet a paraméterlistában.

A splatting során nem szükséges hashtáblát vagy tömböt használnia az összes paraméter átadásához. Bizonyos paramétereket a splatting használatával adhat át, másokat pedig pozíció vagy paraméternév alapján adhat át. Emellett egyetlen parancsban több objektumot is fröccsenhet, így minden paraméterhez legfeljebb egy értéket adhat át.

FRÖCCSENÉS HASH TÁBLÁKKAL

Használjon kivonattáblát a paraméternév és az értékpárok összeillesztéséhez. Ezt a formátumot minden paramétertípushoz használhatja, beleértve a pozíció- és kapcsolóparamétereket is. A pozícióparamétereket név szerint kell hozzárendelni.

Az alábbi példák két Copy-Item parancsot hasonlítanak össze, amelyek a Test.txt fájlt az ugyanabban a könyvtárban lévő Test2.txt fájlba másolja.

Az első példa a paraméternevek hagyományos formátumát használja.

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

A második példa a kivonattáblázat paraméterátadási módszert használja. Az első parancs létrehoz egy paraméternév- és paraméter-érték párok kivonattábláját, és a $HashArguments változóban tárolja. A második parancs a $HashArguments változót használja egy "splatting" parancsban. Az At (@HashArguments) szimbólum a parancsban szereplő dollárjelet ($HashArguments) helyettesíti.

Ha értéket szeretne megadni a WhatIf kapcsolóparaméterhez, használja a $True vagy a $False.

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

Megjegyzés: Az első parancsban az At szimbólum (@) kivonattáblát jelöl, nem pedig egy fröccsenő értéket. A PowerShell kivonattábláinak szintaxisa a következő: @{\<name\>=\<value\>; \<name\>=\<value\>; ...}*

FRÖCCSENÉS TÖMBÖKKEL

Egy tömb használatával olyan pozícióparaméterek értékeit splatálhatja, amelyek nem igényelnek paraméterneveket. Az értékeknek pozíció-szám sorrendben kell lenniük a tömbben.

Az alábbi példák két Copy-Item parancsot hasonlítanak össze, amelyek a Test.txt fájlt az ugyanabban a könyvtárban lévő Test2.txt fájlba másolja.

Az első példa azt a hagyományos formátumot használja, amelyben a paraméternevek ki vannak hagyva. A paraméterértékek pozíció sorrendben jelennek meg a parancsban.

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

A második példa tömb szétbontását használja. Az első parancs létrehoz egy tömböt a paraméterértékek közül, és a $ArrayArguments változóban tárolja. Az értékek pozíció sorrendben vannak a tömbben. A második parancs a $ArrayArguments változót használja egy splatting parancsban. Az At (@ArrayArguments) szimbólum a parancsban szereplő dollárjelet ($ArrayArguments) helyettesíti.

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

PÉLDÁK

Ez a példa bemutatja, hogyan használhatja újra a splatted értékeket a különböző parancsokban. A példában szereplő parancsok a Write-Host parancsmaggal írnak üzeneteket a gazdagép programkonzoljára. Az előtér- és háttérszínek megadásához a splatting módszert használja.

Az összes parancs színének módosításához módosítsa a $Colors változó értékét.

Az első parancs létrehoz egy paraméternevekből és értékekből álló kivonattáblát, és a kivonattáblát a $Colors változóban tárolja.

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

A második és a harmadik parancs a $Colors változót használja paraméterezésként egy Write-Host parancsban. A $Colors variablehasználatához cserélje le a dollárjelet ($Colors) at szimbólumra (@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."

Ez a példa bemutatja, hogyan továbbíthatja a paramétereiket más parancsoknak a splatting és az $PSBoundParameters automatikus változó használatával.

Az $PSBoundParameters automatikus változó egy szótárobjektum (System.Collections.Generic.Dictionary), amely tartalmazza a szkriptek vagy függvények futtatásakor használt összes paraméternevet és értéket.

Az alábbi példában a $PSBoundParameters változóval továbbítjuk a szkriptnek vagy függvénynek átadott paraméterértékeket Test2 függvénytől a Test1 függvényhez. A Test1 mindkét hívása a Test2 függvényen splattinggal történik.

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

SPLATTING PARANCS PARAMÉTEREI

A splatting használatával egy parancs paramétereit jelölheti. Ez a technika akkor hasznos, ha proxyfüggvényt, vagyis egy másik parancsot meghívó függvényt hoz létre. Ez a funkció a Windows PowerShell 3.0-ban jelenik meg.

A parancs paramétereinek kibontásához használja a @Args a parancs paramétereit. Ez a technika egyszerűbb, mint a parancsparaméterek számbavétele, és akkor is korrektúra nélkül működik, ha az úgynevezett parancs paraméterei módosulnak.

A funkció az $Args automatikus változót használja, amely tartalmazza az összes hozzárendeletlen paraméterértéket.

Az alábbi függvény például meghívja a Get-Process parancsmagot. Ebben a függvényben @Args a Get-Process parancsmag összes paraméterét jelöli.

function Get-MyProcess { Get-Process @Args }

A Get-MyProcess függvény használatakor a rendszer minden hozzárendeletlen paramétert és paraméterértéket átad @Args, ahogyan az alábbi parancsok is mutatják.

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\...

A @Args olyan függvényekben is használhatja, amelyek kifejezetten deklarált paramétereket használnak. Egy függvényben többször is használhatja, de a megadott paramétereket a rendszer a @Argsösszes példányának átadja, ahogy az alábbi példában is látható.

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)

MEGJEGYZÉSEK

A PowerShell Desired State Configuration (DSC) nem splatting használatára lett tervezve. Nem használhat splattingot az értékek DSC-erőforrásba való továbbításához. További információért lásd Gael Colas cikkét a Pseudo-Splatting DSC erőforrásokról.

LÁSD MÉG

tömbök_ról

a_Automatikus_Változókról

a_hash_táblákról

a_Paraméterekről