about_Modules
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 olyan kulcsszavakat tartalmaz, amelyek a feldolgozás struktúrájá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 változóval $PSModuleAutoloadingPreference
konfigurálhatja. További információ: about_Preference_Variables.
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 következőt Import-Module
: . Egy 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 a PowerShell-modul írása című témakörben talál.
Feljegyzés
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 beépülő modul 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:
- Minden felhasználó hatóköre –
$env:ProgramFiles\WindowsPowerShell\Modules
- Jelenlegi felhasználói hatókör –
$HOME\Documents\WindowsPowerShell\Modules
- A PowerShell-lel szállított modulok –
$PSHOME\Modules
Alapértelmezés szerint az Modules
aktuális felhasználó mappája nem létezik. Ha a hatókörben Install-Module
telepített egy modult, CurrentUser
vagy Install-PSResource
a parancsmagok létrehozzák az Modules
aktuális felhasználó 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\WindowsPowerShell\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 környezeti változóban megadott helyeken $env:PSModulePath
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 tartalmazza Get-CimInstance
, 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
Helyettesítő karakter*
() használata Get-Command
esetén 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ó vagy .psm1
fájlként .dll
van megadva a csomagolt modul helyett.
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 meghajtót tartalmazó WSMan:
Microsoft.WSMan.Management modul importálásához.
Azt is módosíthatja, hogy a modul hogyan legyen importálva a munkamenetben. Az előtag paraméter Import-Module
például egy megkülönböztető előtagot ad hozzá a modulból importált parancsmagok főnévrészéhez. 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 nem szerepel az Ön $env:PSModulePath
mappájában, használja a modulmappához vezető teljes elérési utat. Ha például hozzá szeretné adni a TestCmdlets modult a címtárban a C:\ps-test
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 hozzá szeretné adni a TestCmdlets.dll modult a címtárban a C:\ps-test
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 parancsot a Import-Module
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 elérhető modul, például a PowerShell-galéria. A PowerShellGet és a Microsoft.PowerShell.PSResourceGet modulok parancsmagokat biztosítanak a PowerShell-modulok egy 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 kiadásaiban is megtalálható. A PowerShell 7.4-es és újabb kiadásai tartalmazzák a Microsoft.PowerShell.PSResourceGet modult, és a PowerShell előnyben részesített csomagkezelője. A Microsoft.PowerShell.PSResourceGet a PowerShellGet mellett telepíthető a PowerShell régebbi verzióiban. A PowerShell-galéria modulok telepítéséhez használja a Install-Module
Install-PSResource
parancsmagot.
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ó: PowerShellGet – áttekintés.
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 saját új helyére $env:PSModulePath
.
A PowerShellben használja a Copy-Item
parancsmagot. Futtassa például a következő parancsot a mappa C:\PSTest
másolásához:MyModule
$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 onnan $env:PSModulePath
.
A következő paranccsal listázhatja a következő helyen $env:PSModulePath
telepített modulokat:
Get-Module -ListAvailable
Ez a parancs lekéri az összes telepített modult $env:PSModulePath
, 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
Get-Command
A parancsmaggal megtalálhatja az összes elérhető parancsot. A parancsmag paramétereivel Get-Command
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>
A BitsTransfer modul parancsainak megkereséséhez például írja be a következőt:
Get-Command -Module BitsTransfer
A parancsmaggal kapcsolatos további információkért lásd: Get-Command
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ó: Remove-Module.
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 forrást és Get-Help
a Get-Date
parancsmagokat:
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ő modulban található. 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
Két forrás létezik a következőhöz Get-Date
: . Az egyik függvény, a másik pedig a Microsoft.PowerShell.Utility modul parancsmagja . A modult a következővel Remove-Module
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
További információ a Function:
meghajtóról: 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ó, beleértve a rejtett parancsok futtatására vonatkozó elsőbbségi szabályok és utasítások magyarázatát, lásd: 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élda:
Microsoft.PowerShell.Utility\Get-Date
A modulnév-előtaggal való futtatás Get-Date
biztosítja, hogy a Microsoft.PowerShell.Utility modulból futtassa a verziót .
A névütközések észleléséhez használja a parancsmag Minden paraméterét Get-Command
. Alapértelmezés szerint csak azokat a parancsokat kapja meg, Get-Command
amelyek a parancsnév beírásakor futnak. A Minden paraméter a munkamenet adott nevével rendelkező összes parancsot lekéri.
A névütközések megelőzéséhez használja a parancsmag NoClobber vagy Prefix paraméterét Import-Module
. Az előtag paraméter hozzáad egy előtagot 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.
Az Alias, a Parancsmag, a Függvény és a Változó paraméter használatával Import-Module
is csak az importálni kívánt parancsokat választhatja ki, és kizárhatja azokat a parancsokat, amelyek névütközéseket okoznak a munkamenetben.
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. Az előtag paraméter értéke elsőbbséget élvez a DefaultCommandPrefix értékével szemben.