微软在 PowerShell CmdLet 参数命名方面的一致性

Microsoft's Consistency in PowerShell CmdLet Parameter Naming

假设我编写了一个包含此命令的 PowerShell 脚本:

Get-ChildItem -Recurse

但是我写了:

Get-ChildItem -Re

为了节省时间。过了一段时间后,我升级了 PowerShell 版本,Microsoft 决定向 Get-ChildItem 添加一个名为“-Return”的参数,例如 returns True 或 False,具体取决于是否找到任何项目.

在那个虚拟场景中,我是否必须编辑我以前的所有脚本以确保脚本按预期运行?我理解 Microsoft 试图节省我的打字时间,但这是我的担忧,因此我可能总是会尝试写下完整的参数名称。

当然,除非你知道一些我不知道的事情。感谢您的见解!

这听起来更像是咆哮而不是问题,但要回答:

In that virtual scenario, do I have I to edit all my former scripts to ensure that the script will function as expected?

是的!

您应该始终在脚本(或任何其他可重用代码片段)中使用完整的参数名称。

自动解析部分参数名称、别名和其他快捷方式非常方便以交互方式使用 PowerShell。它让我们启动 powershell.exe 并执行:

ls -re *.ps1|% FullName

当我们想要找到配置文件中所有脚本的路径时。非常适合探索!

但如果我要将该功能合并到脚本中,我会这样做:

Get-ChildItem -Path $Home -Filter *.ps1 -Recurse |Select-Object -ExpandProperty FullName

不仅仅是因为您提到的原因,还因为一致性和可读性 - 如果我的一位同事出现并且可能不熟悉我正在使用的快捷方式,他仍然能够辨别管道的含义和预期输出。


注意:目前有 three open issues on GitHub to add warning rules for this in PSScriptAnalyzer - 我相信项目维护者会喜欢这个:-)