Powershell:别名和功能之间有什么区别?

时间:2020-08-06 20:53:05

标签: windows function powershell scripting alias

我设置我的Powershell配置文件以创建常用命令的别名。 On Microsoft's documentation说,如果我想为带有参数的命令创建别名,则应将别名的值设置为执行此操作的函数。enter image description here。但是,当我在命令行中键入该函数的名称时,它和别名一样有效。

换句话说,在上图中,如果我输入CD32的行为与在命令行中输入Go的行为相同

所以我的问题是:当我只有一个函数时,为什么要使用指向函数的别名?两者之间是否存在功能差异?

1 个答案:

答案 0 :(得分:2)

  • PowerShell中的 别名 允许您为另一个命令定义 另一个名称

    • bash这样的POSIX兼容外壳不同,不能在其定义中包括传递参数-您需要一个功能

    • 典型用例是为交互式调用的便捷性 定义一个 short 替代名称;例如,PowerShell为其gc cmdlet具有内置的Get-Content别名。 PowerShell甚至根据其approved verbs的官方短别名前缀,例如给定示例中g动词的Get,建议使用别名命名约定。

    • 有问题的另一种用法是定义为不同shell的命令命名的别名。例如,PowerShell为其dir有一个内置的Get-ChildItem别名,以cmd.exe(命令提示符)的内部dir命令命名。从cmd.exe过渡时这可能会有所帮助,但它只能在非常简单的调用中运行,并且由于PowerShell的根本语法不同和参数名称不同而很快成为问题。

    • 另一个 problematic 用途是为目录未在路径($env:PATH)中列出的外部可执行文件定义别名。例如,如果您只想c:\path\to\foo.exe来执行foo,而不必向c:\path\to添加$env:PATH,则可以使用Set-Alias foo c:\path\to\foo.exe

    • 与POSIX兼容的shell(例如bash)不同,别名 (总是)可用于脚本*.ps1文件) ,但是出于健壮性和长期稳定性的考虑,它们在脚本中的使用已被削弱

  • 功能 ,正如所期望的那样,是一个命名的代码单元,可以接受参数并可以执行任意操作

    • 如果要通过自动编码传递参数和/或在调用周围提供自定义逻辑来包装现有命令,则需要使用函数包装的命令-请参见this answer