如何让从Azure获取的PowerShell现有字典大小写不敏感?
解决Azure资源标签哈希表大小写敏感问题
直接修改从Azure返回的现有哈希表的大小写敏感度是做不到的——PowerShell里默认哈希表的CaseSensitive属性是只读的。不过有几个实用的 workaround 可以解决这个问题:
方法1:转成大小写不敏感的新哈希表
创建一个新的不区分大小写的哈希表,把原tags里的键值对导进去:
# 初始化大小写不敏感的哈希表 $caseInsensitiveTags = [hashtable]::new([System.StringComparer]::OrdinalIgnoreCase) # 把原标签的键值对导入新表 foreach ($key in $Item.Tags.Keys) { $caseInsensitiveTags[$key] = $Item.Tags[$key] } # 现在不管键的大小写都能正常取值 $caseInsensitiveTags.Environment $caseInsensitiveTags.environment
方法2:取值时直接忽略大小写匹配
如果不想额外创建哈希表,可以直接通过模糊匹配键来取值:
# 找到和目标键忽略大小写匹配的键名 $targetKey = $Item.Tags.Keys | Where-Object { $_ -ieq 'Environment' } # 取出对应的值 $Item.Tags[$targetKey]
方法3:批量处理所有资源时统一转换
如果要遍历所有Get-AzResource返回的资源,可以一次性给每个资源添加一个不敏感的标签属性:
$resources = Get-AzResource | ForEach-Object { $newTags = [hashtable]::new([System.StringComparer]::OrdinalIgnoreCase) foreach ($key in $_.Tags.Keys) { $newTags[$key] = $_.Tags[$key] } # 给资源对象新增一个大小写不敏感的标签属性 $_ | Add-Member -MemberType NoteProperty -Name 'CaseInsensitiveTags' -Value $newTags -Force $_ } # 后续直接用新属性取值即可 $resources[0].CaseInsensitiveTags.Environment
内容的提问来源于stack exchange,提问作者Andrew Draper
相关产品推荐
相关产品推荐

