powershell - 如何在不生成 PSScriptAnalyzer 警告的情况下创建区分大小写的 Hashtable?
问题描述
默认情况下,由 PowerShell 创建的哈希表(例如$hashtable = @{}
)不区分大小写。
对于我的脚本,我想显式创建一个区分大小写的哈希表。
这可以通过以下方式完成:
$hashtable = [hashtable]::new()
或者:
$hashtable = New-Object hashtable
但我想让我的脚本也符合默认的PSScriptAnalyzer规则。对于上述区分大小写的哈希表示例,UseLiteralInitializerForHashtable规则会发出警告:
使用文字初始值设定项 @{{}} 来创建哈希表,因为它们默认不区分大小写
我希望能够通过指定来解决这个问题StringComparer
,例如:
[HashTable]::New(0, [StringComparer]::Ordinal)
但这仍然会产生错误(尽管[HashTable]::New(0, [StringComparer]::OrdinalIgnoreCase)
不会)。
AFAIK,没有类似的东西:[StringComparer]::OrdinalMatchCase
,或者?
如何在不生成 PSScriptAnalyzer 警告的情况下创建区分大小写的 Hashtable?
PSScriptAnalyzer 版本:1.18.3
测试了 Windows PowerShell ( 5.1
) 和 PowerShell Core ( 6.2.3
)
重现警告的步骤:
Invoke-ScriptAnalyzer -ScriptDefinition '[HashTable]::New(0, [StringComparer]::Ordinal)'
解决方案
您是否尝试过使用内联 c# 将哈希表封装为自定义静态类?
Add-Type -typedef @"
using System;
using System.Collections;
namespace myCsharp
{
//-----------------------------------------
public class myHashtable
//-----------------------------------------
{
//-------------------------------------
public static Hashtable GetHashtable()
//-------------------------------------
{
Hashtable ht = new Hashtable( 0, StringComparer.Ordinal);
return ht;
}
}
}
"@
$x = [myCsharp.myHashtable]::GetHashtable()
推荐阅读
- python - Snakemake - 您可以从作业脚本中访问作业属性吗?
- arrays - TypeError:json.find 不是函数(discord.js)
- sql-server - 从消息选项卡 SSMS 中捕获内容
- flutter - Flutter引擎销毁问题
- colors - 外壳和颜色输出
- javascript - 努力使用正则表达式匹配内引号+括号。我需要消极/积极的前瞻/后视吗?
- java - RedHat - RPM 如何自动选择正确的 JVM 版本?
- reactjs - 为什么我在尝试映射文件名列表时得到对象不支持属性或方法“映射”
- windows - USB设备连接AMAZON APPSTREAM2.0的问题
- python - 使用cookiecutter时如何省略花括号?