Általános paraméterek (common parameters)

Már korábban is érintettük, de összefoglaló jelleggel legyen egy külön fejezete az általános paramétereknek. Vannak ugye azok a kapcsolók, amelyekkel a cmdletek, függvények vagy szkritekben található Write-Debug és Write-Verbose cmdletek kimenetét tudjuk bekapcsolni:

function Test-DebugVerbose{

[cmdletbinding()]

param()

Write-Debug "Ez egy hibaüzenet"

Write-Verbose "Ez egy szószátyárság"

}

Ha ezt a függvényt futtatjuk, akkor alaphelyzetben semmilyen kimenetet nem kapunk:

PS C:\> Test-DebugVerbose

PS C:\>

Ámde ha a -Debug kapcsolót alkalmazzuk, akkor automatikusan az „Inquire”, azaz rákérdező üzemmódba kapcsoljuk a Write-Debug kifejezéseket, anélkül, hogy a $DebugPreference változót nyüstölnünk kellene:

PS C:\> Test-DebugVerbose -Debug

DEBUG: Ez egy hibaüzenet

 

Confirm

Continue with this operation?

[Y] Yes  [A] Yes to All  [H] Halt Command  [S] Suspend  [?] Help

(default is "Y"):y

A -verbose kapcsoló egy fokkal szelídebb, ott csak egyszerűen láthatóvá válnak a Write-Verbose üzenetek:

PS C:\> Test-DebugVerbose -Verbose

VERBOSE: Ez egy szószátyárság

Hasonló célokra, de több finomhangolási lehetőséggel használhatók az -…Action paraméterek:

function Test-ActionParams {

[cmdletbinding()]

param()

Write-Warning "Ez egy figyelmeztetés"

Write-Error "Ez egy hiba"

}

Ezt futtatva paraméterek nélkül mindkét kiírást megkapjuk:

PS C:\> Test-ActionParams

WARNING: Ez egy figyelmeztetés

Test-ActionParams : Ez egy hiba

At line:1 char:1

+ Test-ActionParams

+ ~~~~~~~~~~~~~~~~~

    + CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorExce

   ption

    + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorExcepti

   on,Test-ActionParams

A -WarningAction és -ErrorAction paraméterekkel felül tudjuk bírálni az alakpműködést. Itt azonban több lehetőségünk is van:

SilentlyContinue:      némán megy tovább, de a megfelelő változóba bejegyzi az üzenete

Stop:                                        kilép

Continue:                              megy tovább, de az üzenetet megjeleníti

Inquire:                                 rékérdez, hogy mi legyen

Ignore:                                    némán megy tovább és az üzenetet is eldobja (PowerShell 3.0 után elérhető)

Suspend:                                 felfüggeszti a működést, alpromptot nyit, folytatható

Az előbb emlegetett változó a hibáknál alaphelyzetben az $error tömb. A figyelmeztetéseknek és az információknak (PowerShell 5.0) nincs alaphelyzetben változójuk, ezek csak akkor tárolódnak, ha használjuk a megfelelő -…Variable paramétert.

Például:

PS C:\> Register-PSSessionConfiguration -Name Uj -RunAsCredential $cred -Warnin

gVariable figyelmeztetes

WARNING: When RunAs is enabled in a Windows PowerShell session configuration,

the Windows security model cannot enforce a security boundary between

different user sessions that are created by using this endpoint. Verify that

the Windows PowerShell runspace configuration is restricted to only the

necessary set of cmdlets and capabilities.

 

 

   WSManConfig: Microsoft.WSMan.Management\WSMan::localhost\Plugin

 

Type            Keys                                Name

----            ----                                ----

Container       {Name=Uj}                           Uj

Kaptam fent egy figyelmeztetést, de ugyanakkor az eltárolódott a $figyelmeztetes változóban is.

PS C:\> $figyelmeztetes

When RunAs is enabled in a Windows PowerShell session configuration, the Windo

ws security model cannot enforce a security boundary between different user se

ssions that are created by using this endpoint. Verify that the Windows PowerS

hell runspace configuration is restricted to only the necessary set of cmdlets

 and capabilities.

Érdekes lehetőség, hogy ha a változó neve elé egy „+” jelet teszünk, akkor a változó tartalmához hozzáadódik újabb elemként a  figyelmeztetés:

PS C:\> Write-Warning "Ez mégegy figyelmeztetés" -WarningVariable +figyelmeztet

es

WARNING: Ez mégegy figyelmeztetés

PS C:\> $figyelmeztetes

When RunAs is enabled in a Windows PowerShell session configuration, the Windo

ws security model cannot enforce a security boundary between different user se

ssions that are created by using this endpoint. Verify that the Windows PowerS

hell runspace configuration is restricted to only the necessary set of cmdlets

 and capabilities.

Ez mégegy figyelmeztetés

Ezzel létre tudunk hozni a figyelmeztetésekhez az $error-hoz hasonló tömböt.

Az -OutVariable változó megadásával a kimenetet tudjuk betölteni egy változóba. Ez egy alternatív tárolóhely, mellette az igazi kimenetre is kikerülnek az adatok:

PS C:\> Get-Service h* -OutVariable szolgáltatások

 

Status   Name               DisplayName

------   ----               -----------

Stopped  hidserv            Human Interface Device Service

Stopped  HomeGroupProvider  HomeGroup Provider

 

 

PS C:\> $szolgáltatások

 

Status   Name               DisplayName

------   ----               -----------

Stopped  hidserv            Human Interface Device Service

Stopped  HomeGroupProvider  HomeGroup Provider

Ha nem szeretnénk az „igazi” kimenetet megkapni, akkor valamilyen elnyomási lehetőséggek kell éljünk.

A -PipelineVariable nagyon hasznos tud lenni, ha egymásba ágyazott csővezetékeket használunk, hiszen így az egyes csőszakaszok elemeire nem csak a $_ változóval hivatkozhatunk, hanem minden szakasznak más, nevesített változója lehet:

PS C:\> Get-ChildItem C:\PowerShell -Directory -PipelineVariable könyvtár | %{

>>>     Get-ChildItem -Path $könyvtár.FullName -PipelineVariable belül | %{

>>>         "$($könyvtár.name): $($belül.name)"

>>>     }

>>> }

20150923: PowerShell_transcript.STLENO.hEISfK_G.20150923171910.txt

20150923: PowerShell_transcript.STLENO.ME7m43pf.20150923172347.txt

Carbon: ActiveDirectory

Carbon: bin

Carbon: Certificates

A fenti példában az első Get-ChildItemmel a könyvtárakat listázom ki, a második szakaszban ezen könyvtárak tartalmát. Eredményül a könyvtár neve mellett a belső elem nevét akarok kiírni. Az alkalmazott ‑PipelineVariable paraméterrel nagyon egyszerűen tudtam hivatkozni a különböző szakaszok elemeire.

Az -OutBuffer paraméterrel azt határozhatjuk meg, hogy hány elem összegyűjtése után továbbítódjanak az adatok a következő csőszakaszba. Ez alaphelyzetben 1, azaz minden egyes elem rögtön továbbmegy. Bizonyos esetekben, ha egynél nagyobb értéket állítunk be, ezzel hatékonyabbá tehetjük a feldolgozást. Ennek a paraméternek a működését viszonylag nehéz szemléltetni, hiszen kívülről ez nem nagyon látszik, főleg egy könyvben. A következő két kifejezést futtatva azonban észrevehető, hogy az első szinte azonnal adja az első elemet, míg a második csak néhány másodperces késéssel, ami azt mutatja, hogy tényleg legyártotta a 10000 elemet (vagy a összeset, ha az kevesebb, mint 10000) és csak utána került sor a Select-Object-re:

PS C:\> Get-ChildItem c:\ -ErrorAction SilentlyContinue -Recurse | Select-Objec

t -First 1

 

 

    Directory: C:\

 

 

Mode                LastWriteTime         Length Name

----                -------------         ------ ----

d-----      2015.08.01.     23:31                Downloads

 

 

PS C:\> Get-ChildItem c:\ -ErrorAction SilentlyContinue -Recurse -OutBuffer 100

00| Select-Object -First 1

 

 

    Directory: C:\

 

 

Mode                LastWriteTime         Length Name

----                -------------         ------ ----

d-----      2015.08.01.     23:31                Downloads

Az óvatos végrehajtás paramétereit már ismerjük: -WhatIf és -Confirm.



Word To HTML Converter