Követelmények megfogalmazása a szkriptekben

A szkriptjeinkbe bizonyos feltételek meglétét megkövetelhetjük egy speciális megjegyzés szerepeltetésével a szkriptfájlban. Ez a lehetőség természetesen nem csak a szó szerinti szkriptekre adott, hanem a szkriptmodulokra is, viszont nem használhatók függvényekben.

Az egy vagy több követelmény bárhol lehet a szkripten belül, viszont az adott sorban a sor legelején kell lennie. Persze érdemes a követelményeket a szkript elejéhez közel szerepeltetni, hogy könnyebb legyen a forráskódban ezeket fellelni.

Példaként álljon itt egy nagyon egyszerű szkript, amiben megkövetelem, hogy rendszergazda szintű jogkörrel legyen futtatva:

Get-Date

#requires -RunAsAdministrator

$PSVersionTable

 Annak ellenére, hogy nem a legelső sorban van a követelményt jelző #requires  megjegyzés mégis a szkript el sem indul, ha az nem teljesül:

PS C:\> C:\PowerShell\test-requires.ps1

C:\PowerShell\test-requires.ps1 : The script 'test-requires.ps1' cannot be run

 because it contains a "#requires" statement for running as Administrator. The

 current Windows PowerShell session is not running as Administrator. Start Win

dows PowerShell by  using the Run as Administrator option, and then try runnin

g the script again.

At line:1 char:1

+ C:\PowerShell\test-requires.ps1

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

    + CategoryInfo          : PermissionDenied: (test-requires.ps1:String) []

   , ScriptRequiresException

    + FullyQualifiedErrorId : ScriptRequiresElevation

A lehetőségek a PowerShell a jelenlegi legújabb 5.1-es PowerShell verzióban a következők:

#Requires

Magyarázat

-Version <N>[.<n>]

A PowerShell verziójának minimum értéke. Sajnos jelenleg még pontos vagy maximális verziót nem követelhetünk meg.

-PSSnapin <PSSnapin-Name> [-Version <N>[.<n>]]

Egy PSSnapin és annak valamely minimális verzióját követeljük meg.

-Modules { <Module-Name> | <Hashtable> }

Valamely modul jelenlétét követeljük meg. Vagy a modul nevét adjuk meg paraméterként vagy egy hashtáblát, amelynek a következő kulcsai lehetnek:

@{ModuleName = "NetAdapter"; ModuleVersion = "1.5"; GUID = "1042b422-63a8-4016-a6d6-293e19e8f8a6"}

A GUID az opcionális, kihagyható.

Amennyiben a modul megtalálható a standard modul elérési utakon, akkor a szkript be is tölti azt.

-ShellId <ShellId>

A Shell azonosítója, a „gyári” PowerShell esetében ez Microsoft.PowerShell.

-RunAsAdministrator

Ez nem igényel paraméterértéket. Akkor engedi a szkript futtatását ha emelt szintű jogosultsággal fut a PowerShell processz.

-PSEdition

Teljes Windows rendszerek esetében ez Desktop, Nano Server vagy Windows IoT esetében ez Core.

Az adott gépen elérhető ShellID-ket a következő módon lehet lekérdezni a registry-ből:

PS C:\> Get-childItem -Path hklm:\SOFTWARE\Microsoft\PowerShell\1\ShellIds | Se

lect-Object -ExpandProperty pschildname

Microsoft.PowerShell

ScriptedDiagnostics

A PSEdition értéke a következő módon ellenőrizhető:

PS C:\> $PSVersionTable.PSEdition

Desktop

Használjuk bátran a követelményjelzőket szkriptjeinkben, főleg akkor, ha azokat valaki más számára fejlesztjük, hiszen így sokkal egyértelműbb hibajelzéseket fog a szkript adni rögtön az indítás után és nem kell vergődnie addig, míg az inkompatibilitás miatt valami elromlik.



Word To HTML Converter