如何使自己的别名覆盖模块的别名?

时间:2018-10-23 16:45:59

标签: powershell alias

我在touch中创建了$profile的别名,但是我也使用PSCX似乎拥有它自己的touch。当我运行touch时,PSCX会运行:

$ which touch
Pscx\Set-FileTime

我如何使PowerShell比模块别名更喜欢我的别名?

2 个答案:

答案 0 :(得分:2)

在您的$PROFILE中:

  • 首先,显式导入PSCX模块-此时,该模块的touch别名将被导入,并将替换任何现有定义:{{1} }

    • 注意:即使您的Import-Module PSCX中目前不是{em> ,也要添加Import-Module PSCX;通常,模块位于$PROFILE环境变量中列出的目录之一中,因此它是auto-loaded, on demand
      正是按需导入(其时间无法预测(无论何时您第一次碰巧从模块调用命令))都会阻止可靠的别名替换。强制在您的$env:PSModulePath 之前中导入模块,然后定义别名版本即可解决该问题。
  • 然后根据需要重新定义别名;例如:$PROFILE

    • 注意事项:如果以后有人用Set-Alias touch touch.exe 强行重新导入模块,您的别名将再次被替换。

注意:所讨论的特定别名不是必需的,而是为了替换用Import-Module -Force PSCX定义的别名(对于内置别名,例如-Option AllScopedir,则为true ),您将面临两个次优的选择:

  • 要么:使用select重新定义,但这意味着 all 范围将看到新的定义;例如-Option AllScope

  • 或:先删除原始别名-例如Set-Alias -Option AllScope touch touch.exe(PSv6 +:Remove-Item alias:touch)-然后定义为是必需的,但这意味着其他作用域将不再看到原始定义。

答案 1 :(得分:0)

将其作为答案而不是评论,以便我可以输入更多文本。

请参见https://serverfault.com/questions/452430/how-to-override-the-default-dir-alias-in-powershell

意见如下:

但是,根据您的使用情况,我强烈建议您不要在任何脚本或模块中使用别名,因为它们可以更改并且可能无法执行您想要的操作。

如果您真的想使用别名,我可能会避免所有这些,并创建一个仍然有意义的无冲突别名。也许tftfile用于TouchFile。