2011-04-15 86 views
6

我有一個具有多種功能的模塊。如何使用模塊清單導出PowerShell模塊別名?

因爲我已經以非PowerShell的方式命名它們,所以我想重命名它們。但是,由於模塊已經在使用中,我想保留舊的函數名稱。

達到此目的的最佳方法似乎是使用別名。我已經有一個模塊清單的規定:

AliasesToExport = '*' 

所以我創建了一個別名,該模塊與New-Alias -Name test -Value oldFunctionName

函數是像平常一樣導入的,但別名不存在。

我知道我可以使用模塊中的Export-ModuleMember。但是我有一個已經應該處理這個問題的清單。

因此,這裏有最後我的問題:

爲什麼別名不通過清單將導出?

函數本身是否有特殊的地方,我可以或必須定義一個別名?或者我必須在特別的地方使用New-Alias cmdlet嗎?

我想的有點像參數別名:

[parameter(Mandatory=$true, Position=0)][Alias("name","path")][String]$filename 

但功能來代替。

回答

5

似乎並沒有找到我正在尋找的解決方案。

所以我不得不用出口型ModuleMember

Export-ModuleMember -Function * -Alias * 

起初我只是用參數「別名」的功能正在正確導出感謝清單(FunctionsToExport =「*」),但隨後就在別名被導出。

因此,請確保使用Export-ModuleMember cmdlet導出要導出的所有內容。

3

將-Scope Global添加到New-Alias命令似乎有訣竅。

New-Alias -Name test -Value oldFunctionName -Scope Global 

當我嘗試這個時,我注意到一些讓我感到驚訝的東西。我在一個模塊中有一個函數,其目的是創建別名。我很驚訝地看到,當我使用這個函數時(在模塊被導入之後),它創建的別名與模塊相關聯。如果我刪除模塊,則使用此功能創建的所有別名也會消失。

+2

請不要爲模塊聲明全局變量。 :) – JasonMArcher 2011-04-16 02:21:47

+0

這基本上是答案,它應該從「是」開始。另外,你可能不需要scope參數。對globals的評論是一種干擾:在我的系統中,Import-Module默認爲全局,如果你設置爲local,New-Alias -Scope Global不會跳轉它如本答案中的旁註所示。另外,最初的問題是關於「Import-Module」後面當前範圍內的內容,所以不要污染全局,但要明白這與此無關。 – 2017-02-09 19:12:35

2

如果你看看:

get-help New-ModuleManifest -full 

對於-AliasesToExport你可以看到如下:

-AliasesToExport <string[]> 
Specifies the aliases that the module exports. Wildcards are permitted. 

You can use this parameter to restrict the aliases that are exported by the module. It can remove aliases from the list of exported aliases, but it cannot add aliases to the list. 

If you omit this parameter, New-ModuleManifest creates an AliasesToExport key with a value of * (all), meaning that all aliases that are exported by the module are exported by the manifest. 

我可能是錯的,但在我的理解-AliasesToExport可用於限制導出的別名,但是句子「New-ModuleManifest創建了一個值爲*(全部)的AliasesToExport鍵,這意味着模塊導出的所有別名都由清單導出」意味着對我來說在你必須導出模塊中的別名。

+0

您還必須使用Export-ModuleMember作爲別名。 – JasonMArcher 2011-04-16 02:21:27

+0

「FunctionsToExport」中說明了相同的幫助信息,我不必顯式導出函數。 – Tom 2011-04-18 08:16:54

+1

這是因爲函數默認情況下導出,與變量和別名不同。這在Export-ModuleMember文檔中得到確認。 此外,New-ModuleManifest的幫助指出,它不能單獨導出別名,而只能限制模塊導出的別名: '「指定模塊導出的別名。允許使用通配符。 您可以使用此參數來限制模塊導出的別名,它可以從導出的別名列表中刪除別名,但不能將別名添加到列表中。 – 2012-06-14 19:57:44