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

Cha*_*ler 11 powershell

重现步骤:

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

function foo
{ write-output 'foo' }


New-Alias -name bar -value foo
Run Code Online (Sandbox Code Playgroud)

从PowerShell会话:

import-module TestAlias
bar
Run Code Online (Sandbox Code Playgroud)

术语"bar"不被识别为cmdlet,函数,脚本文件或可操作程序的名称......

Sta*_*ing 11

您可以使用

Export-ModuleMember -Function * -Alias * 
Run Code Online (Sandbox Code Playgroud)

导出所有函数和别名.

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

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

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

希望这可以帮助

  • 实际上,这就是别名不会对命名约定发出警告的原因,而不是"主要观点".IIS团队已经发布了不符合约定的cmdlet,并且必须使用别名来允许兼容性.批量使用这些别名来打破命名约定是非常不推荐的,但有点广为人知(F5,AWS和FIM,仅举几例).请相信我的"重点"问题:我在PowerShell团队@Microsoft上工作了大部分准则. (2认同)

小智 9

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

Export-ModuleMember -function foo -Alias bar
Run Code Online (Sandbox Code Playgroud)