azure Powershell不区分大小写字典[重复]

oyjwcjzk  于 2023-04-12  发布在  Shell
关注(0)|答案(1)|浏览(127)

此问题已在此处有答案

Is there any way to convert case-sensitive hashtable into case-insensitive hashtable?(1个答案)
7小时前关闭
我使用Get-AzResource检索了所有Azure资源的列表,并在$Item中存储了一条示例记录。我试图为每个资源获取所有标记,但Key的大写导致了大量记录丢失。我发现很多论坛都在声明以不同的方式创建哈希表,但是考虑到我是直接从Azure获得这个值的,我不确定具体如何做到这一点。对于下面的示例,我希望$Item.tags.Environment将返回该值。

C:\> $Item

Name              : resourceName
ResourceGroupName : rgName
ResourceType      : Microsoft.Compute/disks
Location          : eastus
ResourceId        : uniqueResourceId
Tags              :
                    Name         Value
                    ===========  =============
                    ENVIRONMENT  Production
                    OWNER        SharedService

C:\> $Item.Tags

Key         Value
---         -----
ENVIRONMENT Production
OWNER       SharedService

C:\> $Item.tags.gettype()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Dictionary`2                             System.Object

C:\> $Item.tags.ENVIRONMENT
Production
C:\> $Item.tags.ENVIRONMENt
C:\> $Item.tags.Environment
C:\>

有没有办法让现有的哈希表不区分大小写?

dgsult0t

dgsult0t1#

您可以使用不区分大小写的比较器创建一个新的字典对象,并将条目复制到该对象:

$tags = @{} # hashtable literals use a case-insensitive default key comparer
# alternatively, pass the desired comparer to a dictionary constructor
# $tags = [System.Collections.Generic.Dictionary[string,psobject]]::new([StringComparer]::OrdinalIgnoreCase)

$Item.Tags.GetEnumerator() |ForEach-Object { $tags[$_.Key] = $_.Value }

# now you can do
$tags['enVirONmeNt']

相关问题