2011-04-15 83 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