PowerShell 别名、PSScriptAnalyzer 和 VSCode

Posted

技术标签:

【中文标题】PowerShell 别名、PSScriptAnalyzer 和 VSCode【英文标题】:PowerShell Aliases, PSScriptAnalyzer and VSCode 【发布时间】:2020-07-08 07:14:44 【问题描述】:

有没有办法阻止PSScriptAnalyzer 突出显示alias 警告?例如

'rm' is an alias of 'Remove-Item'. Aliases can introduce possible problems and make scripts hard to maintain. Please consider changing alias to its full content.

PowerShell 中的别名非常有用。我有一个简单的规则:我只在脚本中使用 rational 内置别名(我忽略了奇怪的别名)。为什么?好吧,这些特定别名中的大多数现在已经 13 年了,并且从未改变过(PowerShell 1.0 发布于 2006 年 11 月 14 日)。因此,例如,%lscd 在 99.99% 的情况下是可靠的。我认为 99.99% 的可靠性“足够好”。 all PowerShell *** 问题上重复最多的一条评论可能是“注意:不建议在 PowerShell 脚本中使用别名,因为它们可以更改!”(不是我经常想知道的推荐的?上帝?;-))

但是,VSCode 中的PSScriptAnalyzer 将所有别名突出显示为问题,因此我当前的 7,000 行脚本有 488 个这样的“问题”。有没有办法告诉PSScriptAnalyzer 我喜欢别名,我打算使用别名来获得它们给我的更简洁、清晰和可读性大大提高的代码,所以我不认为它们是问题?

【问题讨论】:

“从未改变” - 事实并非如此。在最近的版本中删除了许多别名 我可以相信马蒂亚斯。但是,我使用的别名 的“从未改变过”的种类。例如%lscd 等。我从来没有使用过像 rvpa 这样更exotic(坦率地说是奇怪)别名的人(Resolve- Path)、rwmi (Remove-WmiObject)、sajb (Start-Job) 等。我只使用那些超可靠的 - 而超可靠的意思是“13 年来从未改变”和“我每次使用 PowerShell 时经常使用的那种命令”(rvpa 从不属于此类)。 sc -> Set-Content 在 5.1 中有效,在 6.2 中被删除 ¯\_(ツ)_/¯ 不管:是的,您可以禁止个别规则。打开命令面板(Shift+Ctrl+P),搜索“Select PSScriptAnalyzer Rules”并取消选中PSAvoidUsingCmdletAliases 如果你真的想让你的代码不可移植,难以阅读,而且只是丑陋的 [grin] ... PSScriptAnalyzer 可以选择禁用各种测试 - 和可以在每个脚本/行/所有内容的基础上这样做。说明在 PSSA 网站上。 我可以绝对肯定地说,“无法辨认”不是真的。例如dir D:\ | more。我打赌超过一百万美元,你会非常很难找到一个具有基本编程能力的人会发现这个“难以理解”。我知道你反对化名,我只是发现几乎是宗教上坚持从不使用化名(以及几乎怨恨投射到任何敢于的人身上!)有点...... 令人困惑。我完全捍卫/支持你的不使用别名的权利,我只是觉得它有些“僵化”。 :-) 【参考方案1】:

Mathias 的评论指出要搜索“选择 PSScriptAnalyzer 规则”,但我找不到该设置(VS 1.58.2,ms-vscode.powershell 2021.6.2)。

我找到的解决方案是将“脚本分析:设置路径”更改为指向包含以下代码的已创建文件1 以将某些别名列入白名单。下面我取消了相关部分的注释。

@
# Only diagnostic records of the specified severity will be generated.
# Uncomment the following line if you only want Errors and Warnings but
# not Information diagnostic records.
#Severity = @('Error','Warning')

# Analyze **only** the following rules. Use IncludeRules when you want
# to invoke only a small subset of the default rules.
IncludeRules = @('PSAvoidDefaultValueSwitchParameter',
                  'PSMisleadingBacktick',
                  'PSMissingModuleManifestField',
                  'PSReservedCmdletChar',
                  'PSReservedParams',
                  'PSShouldProcess',
                  'PSUseApprovedVerbs',
                  'PSAvoidUsingCmdletAliases',
                  'PSUseDeclaredVarsMoreThanAssignments')

# Do not analyze the following rules. Use ExcludeRules when you have
# commented out the IncludeRules settings above and want to include all
# the default rules except for those you exclude below.
# Note: if a rule is in both IncludeRules and ExcludeRules, the rule
# will be excluded.
#ExcludeRules = @('PSAvoidUsingWriteHost')

# You can use rule configuration to configure rules that support it:
Rules = @
    PSAvoidUsingCmdletAliases = @
        Whitelist = @("cd")
    


[1]https://github.com/PowerShell/vscode-powershell/blob/master/examples/PSScriptAnalyzerSettings.psd1

【讨论】:

以上是关于PowerShell 别名、PSScriptAnalyzer 和 VSCode的主要内容,如果未能解决你的问题,请参考以下文章

如何创建永久 PowerShell 别名

powershell PowerShell函数用于扩展ISE和文件的别名

Powershell中命令自动补全功能及使用Windows命令

PowerShell 别名、PSScriptAnalyzer 和 VSCode

powershell 具有Linux样式提示的PowerShell配置文件和常用Docker命令的别名

powershell 为Sublime Text设置别名