Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/121.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 如何在不生成PSScript Analyzer警告的情况下创建区分大小写的哈希表?_Powershell_Hashtable_Case Sensitive_Psscriptanalyzer - Fatal编程技术网

Powershell 如何在不生成PSScript Analyzer警告的情况下创建区分大小写的哈希表?

Powershell 如何在不生成PSScript Analyzer警告的情况下创建区分大小写的哈希表?,powershell,hashtable,case-sensitive,psscriptanalyzer,Powershell,Hashtable,Case Sensitive,Psscriptanalyzer,默认情况下,PowerShell创建的哈希表(例如,$hashtable=@{})不区分大小写 对于我的脚本,我想显式地创建一个区分大小写的哈希表 这可以通过以下方式实现: $hashtable = [hashtable]::new() 或: 但是我想让我的脚本也符合默认规则。对于上述区分大小写的哈希表示例,规则将显示一条警告: 使用文本初始值设定项@{}创建哈希表,因为默认情况下它们不区分大小写 我希望能够通过指定StringComparer来解决这个问题,比如: [HashTable]::

默认情况下,PowerShell创建的哈希表(例如,
$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()