Modulok importálása és eltávolítása

A modulokról tehát egyelőre annyit tudunk, hogy egy-egy könyvtár tartalma alkot egy modult, de vajon hol vannak ezek? Egy modulkönyvtár állhat egy adott felhasználó rendelkezésére, ilyenkor a $home\Documents\WindowsPowerShell\Modules hely alkönyvtáraként célszerű létrehozni vagy oda másolni. Ha minden felhasználó részére szeretnénk elérhetővé tenni a modult, akkor a $PSHOME\modules könyvtár alkönyvtáraként érdemes létrehozni. Ez utóbbi helyen található modulokat hívjuk rendszermoduloknak. Ezen két elérési úton található modulokat a PowerShell a teljes elérési út kiírása nélkül is megtalálja. Természetesen ettől eltérő helyre is lehet tenni a modulokat, de ilyenkor a teljes elérési út megadásával kell rájuk hivatkozni, vagy a $PSModulePath környezeti változó tartalmát kell módosítani:

[12] PS C:\> $env:PSModulePath

C:\Users\Administrator\Documents\WindowsPowerShell\Modules;C:\Windows\system

32\WindowsPowerShell\v1.0\Modules\

[13] PS C:\> $env:PSModulePath += ";c:\sajátmodulok"

A [12]-es sorban lekérdeztem ezt a változót, a [13]-as sorban kibővítette egy egyedi elérési úttal.

A modulkönyvtárak létrehozása még önmagában nem teszi elérhetővé a modul elemeit, ezután be kell importálni a modult. A rendszermodulokat a tálcán található PowerShell ikon jobb egérgomb-nyomás után megjelenő menüvel egy mozdulattal is be tudjuk importálni PowerShell 2.0-ban:

60 . ábra Az összes rendszermodul importálása

PowerShell 3.0-tól kezdve ilyen menüelemünk már nincs, cserébe egy új szolgáltatás, a „module autoload” áll rendelkezésünkre, azaz a modulok automatikus betöltésével egyszerűen elérhetjük a rendszermodulokat. Erre akkor kerül sor, ha valamely modulban található parancsra hivatkozunk. Ha nincs szükségünk erre a kényelmi szolgáltatásra, akkor kikapcsolhatjuk a $PSModuleAutoloadingPreference  változó segítségével:

All:                                       ez az alaphelyzet szerinti működés

ModuleQualified:   csak a modulban található cmdlet teljes nevére hivatkozva töltődik be automatikusan a modul

None:                                    csak az Import-Module paranccsal lehet modulokat betölteni

A modulokat természetesen egyesével is lehet bármikor importálni. Elsőként kérdezzük le a rendelkezésünkre álló modulokat a get-module  cmdlet segítségével:

[1] PS C:\> Get-Module -ListAvailable

 

ModuleType Name                      ExportedCommands

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

Manifest   ActiveDirectory           {}

Manifest   ADRMS                     {}

Manifest   AppLocker                 {}

Manifest   BestPractices             {}

Manifest   BitsTransfer              {}

Manifest   GroupPolicy               {}

Manifest   PSDiagnostics             {}

Manifest   ServerManager             {}

Manifest   TroubleshootingPack       {}

Itt a ListAvailable kapcsolót kellett használni, hiszen enélkül csak a már beimportált modulokat kapjuk meg. Az előző paranccsal csak a már korábban említett elérési utakon található modulokat találja meg a get-module. Ezek közül beimportálni a modulokat az import-module  cmdlettel lehet:

[2] PS C:\> Import-Module psdiagnostics

Ez nem sok kimenetet ad. Azt kideríteni, hogy mit is hoztunk be ezzel a rendszerünkbe a get‑module cmdlettel lehet:

[4] PS C:\> Get-Module psdiagnostics

 

ModuleType Name                      ExportedCommands

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

Script     psdiagnostics             {Enable-PSTrace, Enable-WSManTrace, ...

Hogy jobban látható legyen a modul tartalma, nézzük kicsit részletesebb, olvashatóbb formában:

[5] PS C:\> Get-Module psdiagnostics | fl *

 

 

ExportedCommands    : {Enable-PSTrace, Enable-WSManTrace, Start-Trace, Disab

                      le-PSWSManCombinedTrace...}

Name                : psdiagnostics

Path                : C:\Windows\system32\WindowsPowerShell\v1.0\Modules\psd

                      iagnostics\PSDiagnostics.psm1

Description         :

Guid                : c61d6278-02a3-4618-ae37-a524d40a7f44

ModuleBase          : C:\Windows\system32\WindowsPowerShell\v1.0\Modules\psd

                      iagnostics

PrivateData         :

Version             : 1.0.0.0

ModuleType          : Script

AccessMode          : ReadWrite

ExportedFunctions   : {[Disable-PSTrace, Disable-PSTrace], [Disable-PSWSManC

                      ombinedTrace, Disable-PSWSManCombinedTrace], [Disable-

                      WSManTrace, Disable-WSManTrace], [Enable-PSTrace, Enab

                      le-PSTrace]...}

ExportedCmdlets     : {}

NestedModules       : {}

RequiredModules     : {}

ExportedVariables   : {}

ExportedAliases     : {}

SessionState        : System.Management.Automation.SessionState

OnRemove            :

ExportedFormatFiles : {}

ExportedTypeFiles   : {}

Egy modulból számunkra legfontosabbak az elérhető parancsok, ezek listáját a következő módon érjük el:

[6] PS C:\> (Get-Module psdiagnostics).exportedcommands

 

Name                           Value

----                           -----

Enable-PSTrace                 Enable-PSTrace

Enable-WSManTrace              Enable-WSManTrace

Start-Trace                    Start-Trace

Disable-PSWSManCombinedTrace   Disable-PSWSManCombinedTrace

Disable-PSTrace                Disable-PSTrace

Disable-WSManTrace             Disable-WSManTrace

Get-LogProperties              Get-LogProperties

Stop-Trace                     Stop-Trace

Enable-PSWSManCombinedTrace    Enable-PSWSManCombinedTrace

Set-LogProperties              Set-LogProperties

Ha egy parancs részleteire vagyunk kíváncsiak, akkor azt a következő kifejezéssel érhetjük el:

[7] PS C:\> (Get-Module psdiagnostics).exportedcommands."Enable-PSTrace" | fl

 *

 

 

HelpUri             :

ScriptBlock         :

                          $Properties = Get-LogProperties ($script:psprovide

                      rname + $script:analyticlog)

                          $Properties.Enabled = $true

                          Set-LogProperties $Properties

 

CmdletBinding       : False

DefaultParameterSet :

Definition          :

                          $Properties = Get-LogProperties ($script:psprovide

                      rname + $script:analyticlog)

                          $Properties.Enabled = $true

                          Set-LogProperties $Properties

 

Options             : None

Description         :

OutputType          : {}

Name                : Enable-PSTrace

CommandType         : Function

Visibility          : Public

ModuleName          : psdiagnostics

Module              : psdiagnostics

Parameters          : {}

ParameterSets       : {}

Látható, hogy egy-egy parancs (jelen esetben egy függvény) definíciója egy hashtáblában található, és mivel a parancsok, függvények neveiben általában van kötőjel, ezért idézőjellel kell hivatkozni a hashtábla „kulcsára”.

Modult eltávolítani a remove-module  cmdlettel lehet:

[17] PS C:\> Remove-Module psdiagnostics



Word To HTML Converter