什麼是 PowerShell 模組?
PowerShell 模組是一個可重複使用的套件,包含部分 PowerShell 功能。 PowerShell 裡的所有東西(函式、變數、DSC 資源等)都可以打包成模組。 通常,模組是存放特定路徑上特定類型檔案的資料夾。 市面上有幾種不同類型的 PowerShell 模組。
什麼是 PowerShell 腳本?
PowerShell 腳本是一系列指令,儲存在 .ps1 檔案中,以啟用重用與分享。 PowerShell 工作流程同時也是 PowerShell 腳本,會列出一組任務並為這些任務提供順序。 欲了解更多資訊,請參閱「 PowerShell工作流程入門指南」。
PowerShell 腳本和 PowerShell 模組有什麼不同?
模組通常比較適合分享,但我們啟用腳本分享,是為了讓你更容易為社群貢獻工作流程和腳本。 欲了解更多資訊,請參閱以下部落格:
我該如何發佈到 PowerShell 資源庫?
您必須先在 PowerShell 資源庫 註冊帳號,才能將套件發佈到 Gallery。 這是因為發佈套件需要一個 NuGetApiKey,而該 ApiKey 在註冊時提供。 註冊時,請使用個人、工作或學校帳號登入 PowerShell 資源庫。 首次登入時需完成一次性註冊程序。 之後,你的 NuGetApiKey 會在您的個人檔案頁面上顯示。
註冊完畢後,請使用 Publish-Module 或 Publish-Script 這兩個 cmdlet 將你的套件發佈到 Gallery。 欲了解更多執行這些指令鏈的細節,請造訪「發佈」標籤,或閱讀 「發佈模組 」與「 發佈腳本 」文件。
安裝或儲存套件時,你不需要註冊或登入圖庫。
我收到「未處理申請」。 當我嘗試將套件發佈到 PowerShell 資源庫 時, 這是什麼意思?
完整的錯誤訊息是:「無法處理請求。」「指定的 API 金鑰無效或無權存取指定的套件。」 遠端伺服器回傳錯誤:(403) 禁止。」
下列原因會發生此錯誤:
- 指定的 API 金鑰無效。 請確保你已指定帳戶中有效的 API 金鑰。 要取得你的 API 金鑰,請查看你的個人頁面。
- 指定的套件名稱不屬於你。 如果你已經確認你的 API 金鑰是正確的,那麼可能已經存在與你嘗試使用的套件名稱相同。 包裹可能已被擁有者取消發布,若如此,該包裹將不會出現在任何搜尋結果中。 要判斷同名套件是否已存在,請開啟瀏覽器並導覽該套件的詳細資訊頁面:
https://www.powershellgallery.com/packages/<packageName>。 例如,直接導航到 不https://www.powershellgallery.com/packages/pester管是否未公開,都會帶你進入 Pester 模組的詳細頁面。 如果已有名稱衝突且未列出的套件,你可以:- 請為您的包裹選擇另一個名稱。
- 聯絡現有方案的擁有者。
為什麼我不能用個人帳號登入,但昨天卻能登入?
請注意,您的畫廊帳號無法更改您的主要電子郵件別名。 欲了解更多資訊,請參閱 Microsoft 電子郵件別名。
為什麼我在 packages 標籤中勾選所有分類勾選框時,卻看不到所有圖庫套件?
選擇分類勾選框,表示您表示「我希望看到此類別中的所有包裹。」只會顯示所選類別的包裹。 同理,選擇所有類別勾選框,就是表示「我希望看到任何類別中的所有包裹」。但圖庫中有些包裹不屬於任何分類,因此不會出現在結果中。 若要查看圖庫中的所有包裹,請取消勾選所有分類,或重新選擇套件標籤。
發佈模組到 PowerShell 資源庫 有什麼要求?
任何類型的 PowerShell 模組(腳本模組、二進位模組或 manifest 模組)都可以發佈到 gallery。 要發佈一個模組,PowerShellGet 需要知道一些相關資訊——版本、說明、作者,以及授權方式。 這些資訊會在發佈過程中從 模組清單 (.psd1)檔案讀取,或是從 Publish-Module 指令碼的 LicenseUri 參數值讀取。 所有發佈至畫廊的模組必須包含模組清單。 任何包含以下資訊的模組,都可以發佈到畫廊:
- 版本
- Description
- 作者
- 模組授權條款的 URI,可以作為清單 PrivateData 部分的一部分,或是 Publish-Module 指令檔的 LicenseUri 參數。
我該如何建立一個格式正確的模組清單?
建立模組清單最簡單的方法是執行 New-ModuleManifest 指令碼。 在 PowerShell 5.0 或更新版本中,New-ModuleManifest 會產生一個格式正確的模組清單,並保留空白欄位,用於存放有用的元資料,如 ProjectUri、 LicenseUri 和 Tags。 只要填空,或以產生的清單作為格式正確範例即可。
要驗證所有必需的元資料欄位是否正確填入,請使用 Test-ModuleManifest 指令檔。
要更新模組清單檔案欄位,請使用 Update-ModuleManifest 指令檔。
將劇本發佈給畫廊有什麼要求?
任何類型的 PowerShell 腳本(腳本或工作流程)都可以發佈到畫廊。 要發佈腳本,PowerShellGet 需要知道幾件事——版本、說明、作者,以及授權方式。 這些資訊會在發佈過程中從腳本檔案的 PSScriptInfo 區段讀取,或根據 Publish-Script 指令檔的 LicenseUri 參數值讀取。 所有發佈到畫廊的腳本必須包含元資料資訊。 任何包含以下資訊的 PSScriptInfo 區塊腳本,皆可發布至 Gallery:
- 版本
- Description
- 作者
- 腳本授權條款的 URI,可以作為腳本的 PSScriptInfo 區段的一部分,或是 Publish-Script cmdlet 的 LicenseUri 參數中。
我該怎麼搜尋?
在文字框輸入你要找的內容。 舉例來說,如果你想找與 Azure SQL 相關的模組,只要輸入「azure sql」。 我們的搜尋引擎會在所有已發佈的套件中尋找這些關鍵字,包括標題、描述以及跨元資料。 然後,根據加權品質分數,會顯示最接近的匹配。 你也可以在搜尋查詢中使用 field:“value” 語法依特定欄位搜尋以下欄位:
- Tags
- Functions
- Cmdlets
- DSC資源
- PowerShellVersion
舉例來說,當你搜尋 PowerShellVersion:“2.0” 時,只會顯示與 PowerShellVersion 2.0 相容的結果(基於模組/腳本清單)。
我該如何建立一個格式正確的腳本檔案?
建立格式正確腳本檔最簡單的方法是執行 New-ScriptFileInfo 指令檔。 在 PowerShell 5.0 中,New-ScriptFileInfo 會產生一個格式正確且包含空白欄位的腳本檔案,以存放像 ProjectUri、 LicenseUri 和 Tags 等有用的元資料。 只要填空,或以產生的腳本檔作為格式正確範例即可。
要確認所有必要的元資料欄位都已正確填入,請使用 Test-ScriptFileInfo 指令檔。
要更新腳本的元資料欄位,請使用 Update-ScriptFileInfo 指令檔。
還有哪些其他類型的 PowerShell 模組存在?
PowerShell 模組一詞也指實作實際功能的檔案。 腳本模組檔案(.psm1)包含 PowerShell 程式碼。 二進位模組檔案(.dll)包含已編譯的程式碼。
這裡有一種想法:封裝模組的資料夾就是模組資料夾。 module 資料夾可以包含模組清單(.psd1),描述資料夾內容。 實際執行工作的檔案是腳本模組檔案(.psm1)和二進位模組檔案(.dll)。 DSC 資源位於特定的子資料夾中,並以腳本模組檔案或二進位模組檔案實作。
Gallery 中的所有模組都包含模組清單,而大多數模組包含腳本模組檔案或二進位模組檔案。 模組這個詞因為這些不同的意義而容易讓人混淆。 除非另有明確說明,本頁所有「module」一詞的使用皆指包含這些檔案的模組資料夾。
套件管理與 PowerShellGet 有什麼關係? (高層次回答)
PackageManagement 是使用任何套件管理器的常用介面。 最終,不管你是處理 PowerShell 模組、MSI、Ruby gem、NuGet 套件還是 Perl 模組,你都能用 PackageManagement 的指令(Find-Package 和 Install-Package)找到並安裝它們。 PackageManagement 透過為每個套件管理器設置一個套件提供者,並接入 PackageManagement。 醫療提供者負責所有實際工作;他們從儲存庫擷取內容,並在本地安裝內容。 通常,套件提供者只是將現有套件管理器工具包裝成特定套件類型的包裝。
PowerShellGet 是 PowerShell 套件的管理器。 有一個 PSModule 套件提供者透過 PackageManagement 公開 PowerShellGet 功能。 因此,你可以執行 Install-Module,或Install-Package -Provider PSModule是從 PowerShell 資源庫 安裝模組。
某些 PowerShellGet 功能,包括 Update-Module 與 Publish-Module,無法透過 PackageManagement 指令存取。
總結來說,PowerShellGet 專注於為 PowerShell 內容提供優質的套件管理體驗。 套件管理專注於透過一組通用工具來展現所有套件管理經驗。 如果你覺得這個答案不滿意,可以在這份文件底部的「 套件管理實際上如何與 PowerShellGet 相關? 」章節中有一個詳細的回答。
欲了解更多資訊,請造訪 套件管理專案頁面。
NuGet 與 PowerShellGet 有什麼關聯?
PowerShell 資源庫 是 NuGet Gallery 的修改版本。 PowerShellGet 使用 NuGet 提供者來處理基於 NuGet 的倉庫,例如 PowerShell 資源庫。
你可以用 PowerShellGet 對任何有效的 NuGet 倉庫或檔案分享。 你只需要執行 Register-PSRepostory 指令檔來新增儲存庫即可。
這是否代表我可以用 NuGet.exe 來與畫廊合作?
Yes.
套件管理實際上和 PowerShellGet 有什麼關聯? (技術細節)
PowerShellGet 在底層非常重視套件管理基礎設施。
在 PowerShell cmdlet 層, Install-Module 其實是一個薄 Install-Package -Provider PSModule包裹的 。
在 PackageManagement 套件提供者層,PSModule 套件提供者實際上會呼叫其他 PackageManagement 套件提供者。 例如,當你使用基於 NuGet 的畫廊(例如 PowerShell 資源庫)時,PSModule 套件提供者會使用 NuGet 套件提供者來與該倉庫合作。
圖 1:PowerShellGet 架構
執行 PowerShellGet 需要什麼?
一般來說,我們建議選擇最新版本的PowerShellGet模組(注意它需要.NET 4.5)。
PowerShellGet 模組需要 PowerShell 3.0 或更新版本。
因此, PowerShellGet 需要以下其中一個作業系統:
- Windows 10
- Windows 8.1 專業版
- Windows 8.1 企業版
- Windows 7 SP1
- Windows Server 2016
- Windows Server 2012 R2
- Windows Server 2008 R2 SP1
PowerShellGet 也需要 .NET Framework 4.5 或以上的版本。 如需詳細資訊,請參閱 安裝適用於開發人員的 .NET Framework。
未來會發佈的套件名稱可以保留嗎?
無法搶佔包裹名稱。 如果你覺得現有包裹採用了更適合你包裹名稱的名稱,試 著聯絡包裹的擁有者。 如果幾週內沒收到回覆,你可以聯絡客服,PowerShell 資源庫 團隊會幫你處理。
我該如何宣稱包裹的所有權?
詳情請參考 PowerShellGallery.com 上的「管理套件擁有者 」。
我該如何處理一位違反我包裹授權的包裹擁有者?
我們鼓勵 PowerShell 社群合作,解決套件擁有者與其他套件擁有者之間可能產生的任何爭議。 我們已制定爭議 解決程序 ,請您在 PowerShellGallery.com 行政人員介入前遵守。