你是否曾經運行過 PowerShell 命令,卻收到令人不安的「該術語未被識別為 cmdlet 的名稱」錯誤訊息?問題可能只是因為缺少或未引入模組。即使在現代的 PowerShell 版本中,理解模組的運作原理也是診斷和修復這些問題的關鍵。
好消息是?本指南涵蓋了從檢查 PowerShell 當前已引入的模組到掌握如何引入、移除和重新引入模組的所有內容。到最後,你將能夠無縫管理 PowerShell 模組,無論是排解意外錯誤還是處理自訂模組。
深入了解,讓 PowerShell 模組幫助你自信地優化工作流程!
檢查已引入的模組
當模組未正確加載時,PowerShell 命令可能會以難以理解的錯誤訊息失敗。例如,嘗試執行 Get-ADUser 而不先引入 ActiveDirectory 模組將導致「找不到命令」的錯誤。同樣,嘗試使用 Azure 命令則需要 Az 模組在你的會話中存在。
PowerShell 必須引入相關模組,以確保命令按預期運行並使其命令可用。
要查看當前已引入的模組,請使用:
Get-Module
當你運行 Get-Module 時,將會看到類似於以下的輸出:
ModuleType Version Name ExportedCommands ---------- ------- ---- ---------------- Manifest 7.0.0.0 Microsoft.PowerShell.Management {Add-Computer, Add-Content, Checkpoint-Computer...} Manifest 7.0.0.0 Microsoft.PowerShell.Utility {Add-Member, Add-Type, Clear-Variable...} Script 2.0.0 PSReadline {Get-PSReadLineKeyHandler, Get-PSReadLineOption...} Binary 1.0.0.1 SmbShare {Get-SmbShare, Set-SmbShare, Remove-SmbShare...}
這會顯示目前在你的 PowerShell 會話中加載的所有模組的列表,顯示其類型(清單、腳本或二進位)、版本號、模組名稱以及它們所提供的命令的摘要。ExportedCommands 列顯示每個模組可用的 cmdlet。
接下來,檢查您可以導入的模塊中的命令:
Get-Module -Name SmbShare -ListAvailable | Select exportedcommands
當您運行此命令時,您將看到輸出列出 SmbShare 模塊中所有可用的命令。例如:
ExportedCommands ---------------- {Get-SmbShare, New-SmbShare, Remove-SmbShare, Set-SmbShare, Get-SmbShareAccess, Grant-SmbShareAccess, Block-SmbShareAccess, Revoke-SmbShareAccess, Get-SmbMapping}
這個輸出顯示了您可以從 SmbShare 模塊中使用的所有 cmdlet。每個命令都有特定的目的,用於管理 SMB 共享:
- Get-SmbShare:列出系統上的所有 SMB 共享
- New-SmbShare:創建一個新的 SMB 共享
- Remove-SmbShare:刪除現有的 SMB 共享
- Set-SmbShare:修改現有共享的屬性
了解可用的命令有助於您選擇適合您任務的工具。您可以使用類似的命令來探索其他模塊的功能。
自動導入模塊
要查看 PowerShell 如何動態處理模塊,這裡有一個顯示動態模塊加載的示例:
PS> Get-Module ModuleType Version Name ExportedCommands ---------- ------- ---- ---------------- Manifest 7.0.0.0 Microsoft.PowerShell.Management {Add-Computer, Add-Content...} Manifest 7.0.0.0 Microsoft.PowerShell.Utility {Add-Member, Add-Type...} Script 2.0.0 PSReadline {Get-PSReadLineKeyHandler...} PS> Get-SmbShare PS> Get-Module ModuleType Version Name ExportedCommands ---------- ------- ---- ---------------- Manifest 7.0.0.0 Microsoft.PowerShell.Management {Add-Computer, Add-Content...} Manifest 7.0.0.0 Microsoft.PowerShell.Utility {Add-Member, Add-Type...} Script 2.0.0 PSReadline {Get-PSReadLineKeyHandler...} Binary 1.0.0.1 SmbShare {Get-SmbShare, Set-SmbShare...}
如上所示,當您運行 Get-SmbShare 時,PowerShell 會自動導入 SmbShare 模塊。您可以在運行命令後看到此模塊出現在列表中。
移除和重新導入模塊
您可能需要從內存中清除一個模塊,例如在測試新配置或解決衝突時。如果是這樣,沒關係;PowerShell 允許您在不卸載模塊的情況下移除它,使您能夠根據需要重置或刷新會話。
要從內存中移除一個模塊:
Remove-Module -Name SmbShare
Remove-Module
指令會清除記憶體中的模組,但不會將其從系統中卸載。雖然在日常使用中移除模組的情況很少,但在特定情境下仍然有其用途。
要手動將模組導入回來:
Import-Module -Name SmbShare
手動導入在故障排除或在自訂環境中工作時可以非常有幫助。
變更後重新導入模組
在開發模組時,您可能會遇到所做的變更未立即生效的情況。舊的數據或配置可能仍然在模組中加載,導致此行為。
重新導入模組可確保 PowerShell 使用最新版本。如果您修改了正在開發的模組,則必須重新導入它。
您可以同時使用 Remove-Module
和 Import-Module
,或者使用 Force
參數簡化過程:
Import-Module -Name SmbShare -Force
Force
參數會在一步中卸載並重新加載模組,使其非常適合開發和測試工作流。
結論
在本指南中,您學會了如何管理 PowerShell 模組——檢查導入、導入、移除和重新導入模組。您還探索了 PowerShell 如何動態導入模組,以及如何控制加載以手動故障排除或測試自訂配置。
現在,通過在您的腳本中實驗自訂模組來應用這些技能。探索模組開發並使用 Force
參數以確保變更生效。
使用 PowerShell 模組提升您的故障排除、腳本開發和整體 PowerShell 工作流程!
Source:
https://adamtheautomator.com/powershell-modules-guide-2/