Megosztás a következőn keresztül:


modulok_ismertetése

Rövid leírás

Ez a cikk ismerteti a PowerShell-modulok telepítését, importálását és használatát.

Hosszú leírás

A PowerShell egy parancshéj és egy szkriptnyelv is. A PowerShell parancsai szkriptek, függvények vagy parancsmagokként vannak implementálva. A nyelv kulcsszavakat tartalmaz, amelyek a feldolgozás szerkezetét és logikáját biztosítják, valamint egyéb erőforrásokat, például változókat, szolgáltatókat, aliasokat.

A modul egy önálló, újrafelhasználható egység, amely parancsmagokat, szolgáltatókat, függvényeket, változókat és egyéb erőforrásokat tartalmazhat. Alapértelmezés szerint a PowerShell automatikusan betölt egy telepített modult, amikor először használ egy parancsot a modulból. Az automatikus modulbetöltési viselkedést a $PSModuleAutoLoadingPreferenceváltozóval konfigurálhatja. További információ a about_Preference_Variablescímű részben található.

A PowerShell-munkamenetek során manuálisan is betöltheti vagy kiürítheti a modulokat. Modul betöltéséhez vagy újratöltéséhez használja a Import-Module. Modul eltávolításához használja a Remove-Module parancsmagot.

A PowerShell tartalmazza a modulok alapkészletét. Bárki létrehozhat új modulokat c# vagy maga a PowerShell-szkriptnyelv használatával. A C#-ban lefordított .NET-szerelvényekben írt modulok natív modulok. A PowerShellben írt modulok szkriptmodulok.

Ez a cikk a PowerShell-modulok használatát ismerteti. A PowerShell-modulok létrehozásáról további információt PowerShell-modulírása című témakörben talál.

Jegyzet

A PowerShell 3.0 előtt a parancsmagok és a szolgáltatók PowerShell-beépülő modulokba lettek csomagolva. A PowerShell 3.0-tól kezdve a Microsoft.PowerShell.Core beépülő modul alapértelmezés szerint minden munkamenethez hozzáadódik. Ez az egyetlen kiegészítő, amely megmaradt a PowerShellben. Az összes többi beépülő modul modullá lett konvertálva. Az új beépülő modulok létrehozása már nem támogatott.

A modul alapértelmezett helyei

A PowerShell a következő alapértelmezett helyeken tárolja a modulokat:

  • Windows rendszeren
    • Minden felhasználó hatóköre – $Env:ProgramFiles\PowerShell\Modules
    • Aktuális felhasználói hatókör – $HOME\Documents\PowerShell\Modules
    • A PowerShell-lel szállított modulok – $PSHOME\Modules
  • Linux és macOS rendszeren
    • Minden felhasználó hatóköre – /usr/local/share/powershell/Modules
    • Aktuális felhasználói hatókör – $HOME/.local/share/powershell/Modules
    • A PowerShell-lel szállított modulok – $PSHOME/Modules

Alapértelmezés szerint az aktuális felhasználó Modules mappája nem létezik. Ha CurrentUser vagy Install-Modulehasználatával telepített egy modult a Install-PSResource hatókörbe, ezek a parancsmagok létrehozzák az aktuális felhasználó Modules mappáit. Ha a mappa nem létezik, manuálisan is létrehozhatja.

Az alábbi paranccsal hozzon létre egy Modules mappát az aktuális felhasználó számára:

$folder = New-Item -Type Directory -Path $HOME\Documents\PowerShell\Modules

Ezek a helyek automatikusan bekerülnek a $Env:PSModulePath környezeti változóba. Az alapértelmezett modulhelyekkel kapcsolatos további információkért lásd: about_PSModulePath.

Modul automatikus betöltése

Amikor először futtat egy parancsot egy telepített modulból, a PowerShell automatikusan importálja (betölti) a modult. A modult a $Env:PSModulePath környezeti változóban megadott helyeken kell tárolni.

A modul automatikus betöltése lehetővé teszi a parancsok használatát egy modulban beállítás vagy profilkonfiguráció nélkül. Az alábbi példák mindegyike azt eredményezi, hogy a CimCmdlets modul, amely Get-CimInstancetartalmaz, importálva lesz a munkamenetbe.

  • A parancs futtatása

    Get-CimInstance Win32_OperatingSystem
    
  • A parancs lekérése

    Get-Command Get-CimInstance
    
  • Segítség kérése a parancshoz

    Get-Help Get-CimInstance
    

Ha Get-Command helyettesítő karakterrel (*) használja, a PowerShell nem importál modulokat. A parancsfelderítéshez helyettesítő karaktereket használhat anélkül, hogy betöltenie kellene azokat a modulokat, amelyekre esetleg nincs szüksége a munkamenetben.

Modul manuális importálása

A modul manuális importálására akkor van szükség, ha a modul nincs telepítve a $Env:PSModulePath környezeti változó által megadott helyeken, vagy ha a modul különálló .dll vagy .psm1 fájlként van megadva, nem pedig csomagolt modulként.

Emellett a PowerShell-szolgáltatókat használó parancsok nem importálnak automatikusan modult. Ha például olyan parancsot használ, amely megköveteli a WSMan: meghajtót, például a Get-PSSessionConfiguration parancsmagot, előfordulhat, hogy a Import-Module parancsmagot kell futtatnia a Microsoft.WSMan.Management modul importálásához, amely tartalmazza a WSMan: meghajtót.

Azt is módosíthatja, hogy a modul hogyan legyen importálva a munkamenetben. A modulból importált parancsmagok főnévi részéhez egy megkülönböztető előtagot ad hozzá a Import-Module paramétere. A NoClobber paraméter megakadályozza, hogy a modul olyan parancsokat adjon hozzá, amelyek elrejtik vagy lecserélik a munkamenetben meglévő parancsokat. További információ: Névütközések kezelése.

Az alábbi példa importálja a BitsTransfer modult az aktuális munkamenetbe.

Import-Module BitsTransfer

Ha olyan modult szeretne importálni, amely nincs a $Env:PSModulePath-ban, használja a modulmappa teljes elérési útját. Ha például a TestCmdlets modult szeretné hozzáadni a C:\ps-test könyvtárban a munkamenethez, írja be a következőt:

Import-Module C:\ps-test\TestCmdlets

Egy modulmappában nem található modulfájl importálásához használja a parancs modulfájljának teljes elérési útját. Ha például a TestCmdlets.dll modult a C:\ps-test könyvtárban szeretné hozzáadni a munkamenethez, írja be a következőt:

Import-Module C:\ps-test\TestCmdlets.dll

További információ a modulok munkamenethez való hozzáadásáról: Import-Module.

Modul importálása minden munkamenet elején

A Import-Module parancs modulokat importál az aktuális PowerShell-munkamenetbe. Ha minden megkezdett PowerShell-munkamenetbe importálni szeretne egy modult, adja hozzá a Import-Module parancsot a PowerShell-profiljához.

További információ a profilokról: about_Profiles.

Közzétett modul telepítése

A közzétett modul egy regisztrált adattárból, például a PowerShell-gyűjteményből elérhető modul. A PowerShellGet és Microsoft.PowerShell.PSResourceGet modulok parancsmagokat biztosítanak a PowerShell-modulok regisztrált adattárban való kereséséhez, telepítéséhez és közzétételéhez.

A PowerShellGet modul a PowerShell 5.0-s és újabb verzióiban érhető el. A Microsoft.PowerShell.PSResourceGet modul a PowerShell 7.4-es és újabb verzióiban érhető el, és a PowerShell előnyben részesített csomagkezelője. Microsoft.PowerShell.PSResourceGet a PowerShell régebbi verzióiban a PowerShellGetmellett telepíthető. A Install-Module vagy Install-PSResource parancsmaggal telepíthet modulokat a PowerShell-gyűjteményből.

 Get-Command Install-Module, Install-PSResource
CommandType  Name                Version    Source
-----------  ----                -------    ------
Function     Install-Module      2.9.0      PowerShellGet
Cmdlet       Install-PSResource  1.0.0      Microsoft.PowerShell.PSResourceGet

További információkért, lásd a PowerShellGet áttekintése.

Modul manuális telepítése

A modul manuális telepítéséhez másolja a modul tartalmát egy másik mappából. Ez a mappa lehet a helyi gépen egy másik helyen, vagy telepíthető egy másik gépen. Ha manuálisan szeretne telepíteni egy modult, másolja a teljes modulmappát a $Env:PSModulePathegy új helyére.

A PowerShellben használja a Copy-Item parancsmagot. Például a következő parancsot futtatva másolhatja a MyModule mappát a C:\PSTest-ről.

$modulePath = $HOME\Documents\PowerShell\Modules\MyModule
Copy-Item -Path C:\PSTest\MyModule\* -Destination $modulePath -Recurse

A modulokat bármilyen helyre telepítheti, de a modulok alapértelmezett modulhelyre történő telepítése megkönnyíti a felügyeletüket.

Telepített modulok keresése

A Get-Module parancsmag lekéri az aktuális PowerShell-munkamenetbe betöltött PowerShell-modulokat.

Get-Module

A felsorolt modulok tartalmazhatnak olyan modulokat, amelyeket bármely helyről importáltak, nem csak $Env:PSModulePath.

Az alábbi paranccsal listázhatja a $Env:PSModulePathtelepített modulokat:

Get-Module -ListAvailable

Ez a parancs lekéri a $Env:PSModulePathtelepített összes modult, nem csak az aktuális munkamenetbe importált modulokat. Ez a parancs nem sorolja fel a más helyeken telepített modulokat.

További információ: Get-Module.

A modul parancsainak listázása

A Get-Command parancsmaggal megtalálhatja az összes elérhető parancsot. A Get-Command parancsmag paramétereivel olyan parancsokat szűrhet, mint a modul, a név és a főnév.

A modul összes parancsának megkereséséhez írja be a következőt:

Get-Command -Module <module-name>

Ha például meg szeretné keresni a parancsokat a BitsTransfer modulban, írja be a következőt:

Get-Command -Module BitsTransfer

A Get-Command parancsmaggal kapcsolatos további információkért lásd: Get-Command.

Modul eltávolítása

Egy modul eltávolításakor a modul által hozzáadott parancsok törlődnek a munkamenetből. Az alábbi parancs például eltávolítja a BitsTransfer modult az aktuális munkamenetből.

Remove-Module BitsTransfer

A modul eltávolítása megfordítja a modul importálásának műveletét. A modul eltávolítása nem távolítja el a modult. További információért lásd a Remove-Modulerészt.

A modulokból és beépülő modulokból parancsokat adhat hozzá a munkamenethez. A modulok minden típusú parancsot hozzáadhatnak, beleértve a parancsmagokat, a szolgáltatókat és a függvényeket, valamint az elemeket, például változókat, aliasokat és PowerShell-meghajtókat. A beépülő modulok csak parancsmagokat és szolgáltatókat adhatnak hozzá.

Mielőtt eltávolítaná a modult a munkamenetből, az alábbi parancsokkal állapítsa meg, hogy melyik modult szeretné eltávolítani.

Például a következő paranccsal keresse meg a Get-Date és Get-Help parancsmagok forrását:

Get-Command Get-Date, Get-Help -All |
    Select-Object -Property Name, CommandType, Module ,PSSnapIn

Az alábbi kimenet azt mutatja, hogy a Get-Help parancsmag a Microsoft.PowerShell.Core beépülő modul része. Ez a beépülő modul nem távolítható el a munkamenetből.

Name     CommandType Module                       PSSnapIn
----     ----------- ------                       --------
Get-Date    Function
Get-Date      Cmdlet Microsoft.PowerShell.Utility
Get-Help      Cmdlet                              Microsoft.PowerShell.Core

A Get-Date-hoz két forrás van. Az egyik függvény, a másik pedig a Microsoft.PowerShell.Utility modul parancsmagja. A modult a Remove-Modulehasználatával távolíthatja el. A függvény eltávolításához törölheti azt a Function: meghajtóról.

Remove-Item Function:Get-Date

A Function: meghajtóval kapcsolatos további információkért lásd: about_Function_Provider.

Névütközések kezelése

A névütközések akkor fordulnak elő, ha a munkamenet több parancsa is ugyanazzal a névvel rendelkezik. A modul importálása névütközést okoz, ha a modul parancsainak neve megegyezik a munkamenet parancsaival vagy elemeivel.

Import-Module olyan parancsokat adhat hozzá, amelyek elrejtik és lecserélik a parancsokat az aktuális munkamenetben. A névütközések a parancsok elrejtését vagy cseréjét eredményezhetik. A parancsok cseréje akkor történik, ha az importált modul egy, a munkamenetben meglévő paranccsal megegyező nevű parancsot tartalmaz. Az újonnan importált parancs elsőbbséget élvez a meglévő paranccsal szemben.

Ha például egy munkamenet tartalmaz egy függvényt és egy azonos nevű parancsmagot, a PowerShell alapértelmezés szerint futtatja a függvényt. Ha a munkamenet azonos nevű, azonos típusú parancsokat tartalmaz, például két azonos nevű parancsmagot, alapértelmezés szerint a legutóbb hozzáadott parancsot futtatja.

További információkért, beleértve az elsőbbségi szabályok magyarázatát és a rejtett parancsok futtatására vonatkozó utasításokat, tekintse meg a about_Command_Precedence.

A parancsnév minősítésével futtathat rejtett vagy lecserélt parancsokat. A parancs nevének minősítéséhez adja hozzá annak a modulnak a nevét, amely a parancs kívánt verzióját tartalmazza. Például:

Microsoft.PowerShell.Utility\Get-Date

A modulnév-előtaggal való futtatása biztosítja, hogy a verzió a Microsoft.PowerShell.Utility modulból fusson.

A névütközések észleléséhez használja a parancsmag Get-Command paraméterét. Alapértelmezés szerint Get-Command csak azokat a parancsokat kapja meg, amelyek a parancsnév beírásakor futnak. A All paraméter lekéri a munkamenetben a meghatározott nevű összes parancsot.

A névütközések megelőzéséhez használja a NoClobber vagy Előtag paraméterét a Import-Module parancsmagban. A előtag paraméter előtagot ad hozzá az importált parancsok nevéhez, hogy azok egyediek legyenek a munkamenetben. A NoClobber paraméter nem importál olyan parancsokat, amelyek elrejtik vagy lecserélnék a munkamenetben meglévő parancsokat.

A Alias, Cmdlet, Függvényés Változó paramétereit a Import-Module-ban is használhatja, hogy kiválassza az importálni kívánt parancsokat, és kizárja azokat a parancsokat, amelyek névütközéseket okoznak a munkamenetében.

A modulkészítők a moduljegyzék DefaultCommandPrefix tulajdonságával megakadályozhatják a névütközéseket, ha alapértelmezett előtagot adnak hozzá az összes parancsnévhez. A előtag paraméter értéke elsőbbséget élvez a DefaultCommandPrefixértékével szemben.

Lásd még