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:
68 . á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