PowerShell是一種非凡的強大腳本語言。但要發揮其潛力,您必須知道如何導入正確的模塊。
在本教程中,您將學習到專業級導入PowerShell模塊所需的一切知識。通過對cmdlets、參數和模塊的深入理解,您可以創建比以往更快、更高效、更有效的腳本。
繼續閱讀,讓您的PowerShell技能得到超級提升,將您的腳本遊戲提升到新的高度!
先決條件
本教程將進行實踐演示。要跟著做,請確保您的系統已安裝了PowerShell。本教程以Windows 10和PowerShell 5.1作為示例,但相同的命令應該適用於大多數版本的Windows和PowerShell。
導入單個模塊
PowerShell模塊包含您可以在PowerShell腳本中使用的預先構建的代碼,為您節省時間和精力。當您導入PowerShell模塊時,您利用預先構建的代碼,而不是從頭開始。
但如何導入 PowerShell 模組?Import-Module
命令 是在 PowerShell 中導入模組的主要方法。導入單個模組是 Import-Module
命令的最基本用法之一,這是您在本教程中將要學習的第一件事情。
以管理員身份開啟 PowerShell,執行下面的 Import-Module
命令來搜尋 PSDiagnostics
模組並將其加載到內存中。如果成功,模組將被導入,但該命令不會產生輸出。
盡可能通過 Install-Module 命令從在線存儲庫導入模組是非常推薦的。該命令將為您處理相依性和版本管理。
一旦導入了模組,您可以使用該模組的任何 cmdlet 或函數來幫助您診斷和排除問題。 Enable-PSTrace
cmdlet 是 PSDiagnostics 模組提供的一個範例 cmdlet,它可以在 PowerShell 中啟用診斷追蹤。
現在,運行以下 Enable-PSTrace
命令以執行診斷追蹤並將結果保存到指定的 -TraceFilePath
(C:\\MyTrace.log
)。由於結果保存到文件中,此命令不會在控制台提供輸出。
某些模組可能需要在使用之前進行額外配置或設置。請務必閱讀模組附帶的文檔,以了解任何先決條件或要求。
一次導入多個模組
單個模組的導入沒問題。但是,當您經常需要一次導入多個模組時,使用 Import-Module
命令也是可以的。
一次導入多個模組是在 PowerShell 中節省時間和精力的好方法。但是究竟如何?您將指定以逗號分隔的模組名稱。
執行以下命令以搜索多個模塊(Dism,PowerShellGet,PSReadline
)並將它們加載到內存中。與導入單個模塊一樣,此命令不提供輸出。
顯示模塊導入詳細信息
如前所述,成功導入模塊不會提供輸出。但是承認吧。您可能會懷疑模塊是否真的已經被導入。
-Verbose
參數是一個有用的選項,您可以在許多 PowerShell 命令和函數中使用,包括 Import-Module
命令。此參數告訴 PowerShell 在執行命令時顯示有關命令的詳細信息。因此,您可以獲得有價值的反饋,用於故障排除和調試。
執行以下命令導入 SmbShare
模組,並附加 -Verbose
參數以列印模組導入詳細資訊。
如下所示,-Verbose
參數提供了有關正在載入的模組檔案以及從模組導入的各種函數的詳細資訊。此資訊有助於理解模組的內部運作。
在這種情況下,SmbShare
模組提供了用於管理 Windows 機器上的 SMB 共享的 cmdlet。這些 cmdlet 包括但不限於 New-SmbShare
(建立新的共享)和 Remove-SmbShare
(移除現有共享)。

重新將模組導入相同的工作階段
無論您的模組是否出現問題,或者您只是想確保您正在使用最新版本的模組,重新導入 PowerShell 都是有益的。如何?通過將 -Force
參數附加到 Import-Module
命令。
這個-Force
參數允許您在不必關閉並重新開啟 PowerShell 會話的情況下繼續使用模組提供的 cmdlet 和函數。
重新導入模組的一個常見用例是在開發並對模組進行更改時。您可以將模組重新導入到當前會話中,以在最終確定之前測試這些更改。
運行以下命令-Force
以從其原始位置移除並重新導入SmbShare
模組。
-Prefix
參數允許您為從模組導入的 cmdlet 和函數指定前綴。在這種情況下,所有導入的 cmdlet 和函數將以New
開頭。此參數可用於避免會話中現有 cmdlet 或函數的衝突。
例如,原始模組中的Get-SmbShare
cmdlet 將在重新導入的模組中變為Get-NewSmbShare
。
現在,運行下面的Get-Command以檢索 SmbShare 模組所選取的(Select-Object)所有 cmdlet 和函數的列表。
以下是 SmbShare 模組的 cmdlet 現在名稱前添加了前綴 New。這個輸出確認了模組已成功重新匯入。

使用 NuGet 套件手動匯入 PowerShell 模組
到目前為止,您已成功從 PowerShell Gallery 匯入了模組。但如果您要尋找的模組不在那裡該怎麼辦呢?
您可以從 NuGet 套件手動安裝和匯入 PowerShell 模組。在 PowerShell 上下文中,NuGet 套件是一組文件,包括一個 PowerShell 模組以及模組工作所需的任何依賴模組或庫。
要從 NuGet 套件中匯入模組,您需要按照以下步驟手動下載、提取和安裝 NuGet 套件:
1. 轉到 Az.Automation 模組的 Azure PowerShell Gallery 頁面。
2. 接下來,點擊 手動下載 標籤 → 下載原始 nupkg 檔案 以下載該套件。本教程以從 Azure PowerShell Gallery 下載的 Az.Automation 1.9.1 模組為例。但是,相同步驟適用於其他 NuGet 套件。

3. 下載後,執行下面的 Unblock-File
命令,它不提供輸出,但解除了下載的 .nupkg 檔案的封鎖。請務必將檔案路徑更改為您下載套件的路徑。
解封套件是必要的。為什麼?PowerShell 可能不允許從網路下載的檔案執行,作為一項安全措施,以防止執行潛在有害的指令稿
4。現在,將下載的 .nupkg 檔案解壓縮到您本機機器上的一個資料夾。您可能需要一個壓縮/解壓縮工具,如 7-zip 或 WinRAR 來解壓縮套件。NuGet 套件是一個ZIP檔案,包含一組檔案,這些檔案組成了一個模組。
5. 從提取的資料夾中刪除以下內容。
解壓縮的 NuGet 套件內容包括一些不需要的元數據和檔案,不需要手動模組安裝。
Name | Type |
---|---|
_rels | Folder |
Package | Folder |
[Content_Types].xml | XML File |
Az.Automation.nuspec | XML Manifest File |

6. 使用更具描述性的名稱重新命名您提取的資料夾,例如 az.automation,以避免可能出現的任何錯誤。請記住保持所有字母小寫,並避免在其名稱中使用特殊字符。
7. 接下來,執行下面的 $env:PSModulePath
指令,以查找您當前的殼模組路徑。該指令返回您系統上所有默認模組路徑的列表。PowerShell 在這些路徑中搜索,以在指令稿或指令中指定模組名稱時自動加載模組。
請注意這些路徑,因為您將在接下來的步驟中需要它們。

8. 複製新命名的資料夾(az.automation)到步驟七中註釋的其中一個目錄。這樣做可以定義模組的範圍(特定或所有使用者)。
Path | Function |
---|---|
C:\Users\admin\Documents\WindowsPowerShell\Modules | Makes the module available for the specific user account (admin). This tutorial uses this location as an example. |
C:\Program Files\WindowsPowerShell\Modules | Makes the module available for all user accounts on your local machine. |
9. 現在,執行以下命令來安裝並將模組(az.automation)導入到您的 PowerShell 會話中。請確保將 az.automation 替換為您的模組的實際名稱。

10. 最後,執行以下 Get-Module 命令來驗證模組(az.automation)是否已成功導入。

也許您不想依賴自動發現。如果是這樣,請在導入模組時指定精確的文件位置(C:\az.automation)。

結論
使用聯合功能或分組代碼,PowerShell 模組可以改變遊戲規則。在這個教程中,您已經學會了多種將 PowerShell 模組導入到您的會話中的方法,包括手動從 NuGet 套件導入模組。您還觸及了控制導入過程的不同參數。
通過掌握這些技術,您可以輕鬆地導入和使用模塊來增強您的自動化腳本。但學習不必止於此。為什麼不通過學習導出模塊成員,將您的 PowerShell 模塊管理技能提升到下一個水平呢?
Source:
https://adamtheautomator.com/import-powershell-modules/