PowerShell 101:匯入模組

你是否曾經運行過 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-ModuleImport-Module,或者使用 Force 參數簡化過程:

Import-Module -Name SmbShare -Force

Force 參數會在一步中卸載並重新加載模組,使其非常適合開發和測試工作流。

結論

在本指南中,您學會了如何管理 PowerShell 模組——檢查導入、導入、移除和重新導入模組。您還探索了 PowerShell 如何動態導入模組,以及如何控制加載以手動故障排除或測試自訂配置。

現在,通過在您的腳本中實驗自訂模組來應用這些技能。探索模組開發並使用 Force 參數以確保變更生效。

使用 PowerShell 模組提升您的故障排除、腳本開發和整體 PowerShell 工作流程!

Source:
https://adamtheautomator.com/powershell-modules-guide-2/