无法在脚本模块中创建PowerShell别名

时间:2009-12-30 04:02:54

标签: powershell

重现的步骤:

使用以下函数和别名在\ WindowsPowerShell \ Modules \ TestAlias \ TestAlias.psm1中创建TestAlias模块:

function foo
{ write-output 'foo' }


New-Alias -name bar -value foo

来自PowerShell会话:

import-module TestAlias
bar
  

术语“bar”无法识别为cmdlet,函数,脚本文件或可运行程序的名称...

2 个答案:

答案 0 :(得分:11)

您可以使用

Export-ModuleMember -Function * -Alias * 

导出所有函数和别名。

默认情况下,Windows PowerShell模块仅导出命令(函数或cmdletS),而不导出变量或别名。

我将详细介绍为什么会这样。

简短的回答是别名虽然在编写一个内衬时很方便,但却是理解脚本或模块的障碍。它们是一个很好的cmdlet的结块,但暴露的核心是良好的cmdlet。别名使得阅读脚本的用户更难以弄清楚你想要做什么(Set-Content比sc更容易理解)。变量可能更糟糕,因为它们可以很容易地设置为意外值,因为你的模块用户没有什么可以帮助他们知道它们在那里。由于命令很容易被发现(Get-Command -Module FOO)并且更易于探索(使用Get-Help),因此模块将导出的默认命令仅为命令。与PowerShell中的大多数其他内容一样,如果您选择,可以覆盖它,但默认情况下,命令是从模块中导出的唯一内容。

希望这有助于

答案 1 :(得分:9)

使用PSM1文件中的Export-ModuleMember导出别名

Export-ModuleMember -function foo -Alias bar