2011-04-07 88 views
5

確保您的PowerShell函數名稱是唯一的最佳方式是什麼?從版本1開始的標準是在動詞短劃線之後和名詞之前放置一個簡短的唯一標識符。例如,用我的名字首字母可以創建函數Get-DWServer;這是沒有問題的,直到有人在另一個模塊中創建一個函數,以獲取對數據倉庫的對象引用並使用相同的函數名稱。兩三個字母是不夠的,但比這更難看。PowerShell:確保函數名稱唯一性的最佳方法?

我寧願有一個獨特的前綴*類似於.NET命名空間。這對組織更好,更容易上手,並且可以在製表符完成時使用。它可以正常擴展,因此可以將其命名爲DW.Get-Server或DW.Network.Get-Server。

這樣做的缺點是它在模塊導入/導出模塊成員期間與PowerShell的適當動詞檢查相違背。你可以通過在導入過程中指定DisableNameChecking來解決這個問題,但是我想知道如果做到這一點是草率的,並且如果PowerShell 3推出更好的解決方案可能會很糟糕。我知道PS動詞純粹主義者(是否有任何?)會抱怨說這可能「阻礙了發現」,但我想不出一個更好的選擇。

你是做什麼的? (*您可以使用module_name \ function_name表示法引用導出的函數,但這不適用於製表符完成,並且仍然沒有解決函數名稱唯一的問題)。

回答

5

我聽說Jeffrey Snover(PowerShell的發明者)多次談論這個問題,他形容這是一個困境,而不是問題。一個困境必須得到管理,但不能完全解決。問題可以解決。作爲一個PS動詞「純粹主義者」,我會說管理這個最好的方法是給你的名詞加一個2或3個字母的前綴。對於許多廣泛分佈的小命令來說,這已經足夠了。 IE,Quest AD Cmdlet與微軟的AD Cmdlet。 Get-ADUser和get-qaduser。

如果你是消費模塊,並希望使用自己的前綴,你可以用

import-module mymodule -Prefix myPrefix 

指定一個我知道這是不是一個單一的銀彈的答案,但我要說它適用於95%的情況。

+0

到目前爲止,使用名詞前綴已經適用於我,但我的範圍已經較小:主要是腳本點源其他腳本。當我將所有內容遷移到一系列模塊時,我一直希望有一個更安全,更長期的解決方案。使用Import-Module -Prefix適用於使用一個或兩個模塊的腳本,但我正在尋找一個更簡單的標準,用於模塊中的函數調用其他模塊中的函數。 動詞 - 名詞符號是非常有用的,所以我不想把它寫下來;我可能會堅持下去,穿過我的手指。 – DanW 2011-04-08 15:54:03

+1

如果您正在尋找有關如何調用其他函數的標準,請使用Module \ Verb-Noun。 – JasonMArcher 2011-04-22 00:22:17

相關問題