2011-05-17 56 views
36

我有一個模塊xy,它具有多個用於最終用戶的函數和幾個由函數調用但不由最終用戶調用的內部幫助函數。如何隱藏Powershell模塊中的「助手」函數

Get-Command -Module xy -CommandType function 

列出我的所有功能在我的模塊文件夾(如get-fooget-foo_helper

有沒有辦法隱藏從最終用戶get-foo_helper功能是誰在使用:

Get-Command -Module tcaps -CommandType function 

回答

38

我所做的一件事就是對我想要導出的函數使用動詞 - 名詞命名約定,但是在輔助函數中省略了連字符。

然後,export-modulemember *-*只負責導出您想要導出的內容。

+0

我也使用這種方法。這很容易做到,並且函數自我記錄它們的可見性。 – JasonMArcher 2011-05-17 16:27:56

+3

我不打算投票,但我確實認爲這是一個壞主意,因爲它違反了PowerShell其餘部分使用的正確的動詞 - 名詞命名約定,即使違反僅在您自己的模塊中,儘管我確實很佩服務實簡單的解決方案。 – 2014-07-01 15:50:42

+3

我完全理解你的批評。對我而言,實用主義勝過技術(私人)違規。 – 2014-07-01 19:03:40

3

你可以使用Export-ModuleMember或創建模塊清單並指定導出的命令。您可以使用New-ModuleManifest來創建清單文件。

3

在許多情況下,聲明的函數可以用一個scriptblock(即匿名函數)代替。

34

只需將Export-ModuleMember添加到您的模塊底部即可。

比方說,你有你的模塊中的以下功能:

New-Function0 
New-Function1 
New-Function2 
New-HelperFunction0 

這些行添加到模塊文件的底部:

Export-ModuleMember -function New-Function0 
Export-ModuleMember -function New-Function1 
Export-ModuleMember -function New-Function2 

當你運行該模塊的導入模塊,它只會導入由Export-ModuleMember定義的函數。

現在讓我們假設你也想爲New-Function1導出一個別名。只需添加到您的模塊的結尾:當您使用導入模塊

Export-ModuleMember -alias nf1 

現在,它會加載您定義的功能,以及爲新功能1別名(NF1)。