使用Powershell匹配键时获取空哈希值

时间:2020-05-01 11:31:49

标签: powershell hash azure-powershell

我试图通过匹配键名(忽略白色和字符大小写)来获取键的值。

代码:

$tagHash = (Get-AzResourceGroup -Name "twmstgmsnp").Tags
Write-Host "Resource Group tags key : " $tagHash.Keys
Write-Host "Resource Group tags value : " $tagHash.Values
$ownervalue = $tagHash.GetEnumerator() | ? {($_.Key).ToString().Replace(' ','') -eq 'CreatedBy'} | % Value
Write-Host "Resource Group CREATEDBY tag : " $ownervalue

结果:

资源组标记键:PURPOSE Created By

资源组标记值:QA MS Team2 env Shubham Mishra

资源组CREATEDBY标签:

enter image description here

注意:如果键的文本应为“ createdby”,则应始终获取该值。密钥是否为“创建者”,“创建者”,“创建者”,“创建者”。它应该忽略关键的空格和大小写。

2 个答案:

答案 0 :(得分:1)

我的猜测是,通过首先替换键的所有空格,然后将其与CreatedBy进行比较,您可以最轻松地获得键的确切名称。
不需要GetEnumerator()方法,只需从.Keys数组中获取键名:

$ownerKey = $tags.Keys | Where-Object { ($_ -replace '\s') -eq 'CreatedBy'}
Write-Host "Resource Group CREATEDBY Tag   : $ownerKey"
Write-Host "Resource Group CREATEDBY Value : $($tags[$ownerKey])"

输出:

Resource Group CREATEDBY Tag   :  Created By
Resource Group CREATEDBY Value :  Shubham Mishra

默认情况下,-eq运算符不区分大小写。如果您需要在其他地方进行区分大小写的比较,请使用-ceq

答案 1 :(得分:0)

如果您以纯文本格式阅读第四行和第五行的内容,那么哪里出了问题可能更有意义。

第4行:
将所有这些都放入变量中:从$tagHash获取枚举数,然后获取所有键(如“ Created By”),然后获取每个匹配值。

$ownervalue = $tagHash.GetEnumerator() | ? {($_.Key).ToString().Replace(' ','') -eq 'CreatedBy'} | % Value

第5行:
将变量写入主机窗口。

Write-Host "Resource Group CREATEDBY tag : " $ownervalue

这就是您想要用纯文本表达的内容:
$tagHash获取枚举数,然后获取“创建者”之类的所有键,然后为每个匹配项将值写入主机窗口。

$tagHash.GetEnumerator() | Where-Object { $_.Key -like '*Created*By*'} | For-Each
{
    Write-Host "Resource Group CREATEDBY tag : " $_.Value
}