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 日)。因此,例如,%
或 ls
或 cd
在 99.99% 的情况下是可靠的。我认为 99.99% 的可靠性“足够好”。 all PowerShell *** 问题上重复最多的一条评论可能是“注意:不建议在 PowerShell 脚本中使用别名,因为它们可以更改!”(不是我经常想知道的谁推荐的?上帝?;-))
但是,VSCode 中的PSScriptAnalyzer
将所有别名突出显示为问题,因此我当前的 7,000 行脚本有 488 个这样的“问题”。有没有办法告诉PSScriptAnalyzer
我喜欢别名,我打算使用别名来获得它们给我的更简洁、清晰和可读性大大提高的代码,所以我不认为它们是问题?
【问题讨论】:
“从未改变” - 事实并非如此。在最近的版本中删除了许多别名 我可以相信马蒂亚斯。但是,我使用的别名 是 的“从未改变过”的种类。例如%
、ls
、cd
等。我从来没有使用过像 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函数用于扩展ISE和文件的别名
Powershell中命令自动补全功能及使用Windows命令
PowerShell 别名、PSScriptAnalyzer 和 VSCode