Powershell 如何在不生成PSScript Analyzer警告的情况下创建区分大小写的哈希表?
默认情况下,PowerShell创建的哈希表(例如,Powershell 如何在不生成PSScript Analyzer警告的情况下创建区分大小写的哈希表?,powershell,hashtable,case-sensitive,psscriptanalyzer,Powershell,Hashtable,Case Sensitive,Psscriptanalyzer,默认情况下,PowerShell创建的哈希表(例如,$hashtable=@{})不区分大小写 对于我的脚本,我想显式地创建一个区分大小写的哈希表 这可以通过以下方式实现: $hashtable = [hashtable]::new() 或: 但是我想让我的脚本也符合默认规则。对于上述区分大小写的哈希表示例,规则将显示一条警告: 使用文本初始值设定项@{}创建哈希表,因为默认情况下它们不区分大小写 我希望能够通过指定StringComparer来解决这个问题,比如: [HashTable]::
$hashtable=@{}
)不区分大小写
对于我的脚本,我想显式地创建一个区分大小写的哈希表
这可以通过以下方式实现:
$hashtable = [hashtable]::new()
或:
但是我想让我的脚本也符合默认规则。对于上述区分大小写的哈希表示例,规则将显示一条警告:
使用文本初始值设定项@{}创建哈希表,因为默认情况下它们不区分大小写
我希望能够通过指定StringComparer
来解决这个问题,比如:
[HashTable]::New(0, [StringComparer]::Ordinal)
但这仍然会生成一个错误(尽管[HashTable]::New(0[StringComparer]::OrdinalIgnoreCase)
不会)
好吧,这里没有这样的东西:[StringComparer]::OrdinalMatchCase
,或者
如何在不生成PSScript Analyzer警告的情况下创建区分大小写的哈希表
PSScript分析器版本:1.18.3
测试了Windows PowerShell(
5.1
)和PowerShell核心(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()
[HashTable]::New(0,[StringComparer]::Ordinal)正在这里工作,没有任何错误。您使用的是哪个PS版本?关于信息,VScode的PS插件没有抱怨任何这些格式。我已经添加了一些版本信息和步骤来重现问题中的警告。我隐约记得读到过,您可以在文件中添加PSSA说明。这将让您告诉它忽略该文件的指定规则。我想你也可以在工作区做同样的事情。。。但是我还没有找到任何关于这个想法的文件。[脸红]谢谢你的建议,我想我实际上是在确认我没有忽略这件事中显而易见的东西。我已经创建了一个问题增强请求:感谢您的建议。虽然这在技术上是可行的,但与创建精益PowerShell脚本的实际PSScriptAnalyzer目标相去甚远。。。
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()