代码之家  ›  专栏  ›  技术社区  ›  Chad Miller

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

  •  11
  • Chad Miller  · 技术社区  · 15 年前

    复制步骤:

    在\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 回复  |  直到 8 年前
        1
  •  9
  •   Marijn    12 年前

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

    Export-ModuleMember -function foo -Alias bar
    
        2
  •  11
  •   Start-Automating Christian    15 年前

    你可以使用

    Export-ModuleMember -Function * -Alias * 
    

    导出所有函数和别名。

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

    我会更详细地讲一点这是为什么。

    简短的答案是,别名虽然在编写一行程序时很方便,但却是理解脚本或模块的障碍。它们是一个好的Cmdlet的锦上添花,但要公开的核心是好的Cmdlet。别名使用户更难阅读您的脚本来确定您要做什么(设置内容比sc更容易理解)。变量可能更糟,因为它们很容易被设置为意外的值,并且对于帮助模块用户发现它们存在的帮助非常小。由于命令很容易被发现(get command-module foo),并且更容易浏览(使用get help),因此模块将导出的默认值仅为命令。与PowerShell中的大多数其他内容一样,如果选择,则可以覆盖它,但默认情况下,命令是从模块中导出的唯一内容。

    希望这有帮助