如何在使用Powershell获得价值时忽略哈希键中的空白

时间:2020-05-01 06:36:19

标签: powershell hash azure-powershell

我正在尝试获取哈希键的值。密钥完全匹配时,它工作正常。但是,由于在键中找到的任何空间都给出了错误。 工作正常:

$tagHash = (Get-AzResourceGroup -Name "twmstgmsnp").Tags
$datevalue = $tagHash.GetEnumerator() | ? Key -eq Date | % Value
Write-Host "Resource Group Date tag : " $datevalue.Replace(' ','')

我正在尝试忽略键中的空格:

$tagHash = (Get-AzResourceGroup -Name "twmstgmsnp").Tags
$datevalue = $tagHash.GetEnumerator() | ? Key -eq 'Date'.Replace(' ','') | % Value
Write-Host "Resource Group Date tag : " $datevalue.Replace(' ','')

错误:实际上我的$ datevalue为空,因为没有得到值。

You cannot call a method on a null-valued expression.

2 个答案:

答案 0 :(得分:1)

如果我不误解您的意思,那么您想获取该值,例如当密钥像D a t e时,如果是这样,则可以使用下面的命令。

$tagHash = (Get-AzResourceGroup -Name "<group-name>").Tags
$datevalue = $tagHash.GetEnumerator() | ? {($_.Key).ToString().Replace(' ','') -eq 'Date'} | % Value
Write-Host "Resource Group Date tag : " $datevalue.Replace(' ','')

enter image description here

该标记类似于门户中的以下内容:

enter image description here

答案 1 :(得分:0)

这里是一种方法:

$data = @{ "aaa" = "bbb"; "c c c" = "ddd" }

$search = "ccc"
$matches = $data.Keys | where-object { $_.Replace(" ", "") -eq $search }
# c c c

$values = $data[$matches]
# ddd

请注意,您可以获得多个匹配项,因此在这种情况下,您需要计算出想要的值-例如:

$data = @{ "aaa" = "bbb"; "c c c" = "ddd"; "ccc" = "eee" }

$search = "ccc"
$matches = $data.Keys | where-object { $_.Replace(" ", "") -eq $search }
# ccc
# c c c

$values = $data[$matches]
# eee
# ddd