Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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.