微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

循环访问 azure 对象并在标签上过滤它们

如何解决循环访问 azure 对象并在标签上过滤它们

我有一个问题,最近我们开始在 Azure 中使用标记,并且需要通过它们的标记列出特定对象。下面是用于查找资源的脚本。在这两种情况下,我们在使用 match 和 notmatch 时都会在结果中找到特定对象。这是搜索标记资源时的奇怪行为。你用什么其他方式来完成任务?

PS C:\WINDOWS\system32> $KeyName = 'Department'
PS C:\WINDOWS\system32> $Newkeyvalue = "PROD,Data"
PS C:\WINDOWS\system32> $AzsqlServer = Get-AzsqlServer
PS C:\WINDOWS\system32>          if($AzsqlServer)
>>     {
>> foreach ($server in $AzsqlServer )
>> {
>> $sqlDatabase = Get-AzsqlDatabase -ServerName $server.ServerName -ResourceGroupName $server.ResourceGroupName| Where-Object {$_.tags.Values -notmatch "PROD,Data"}
>> write-output $sqlDatabase.DatabaseName
>> }
>> }
dbname1
dbname2
dbname3
dbname4
master
master
master
**dbname5**
PS C:\WINDOWS\system32>
PS C:\WINDOWS\system32> $KeyName = 'Department'
PS C:\WINDOWS\system32> $Newkeyvalue = "PROD,Data"
PS C:\WINDOWS\system32> $AzsqlServer = Get-AzsqlServer
PS C:\WINDOWS\system32>          if($AzsqlServer)
>>     {
>> foreach ($server in $AzsqlServer )
>> {
>> $sqlDatabase = Get-AzsqlDatabase -ServerName $server.ServerName -ResourceGroupName $server.ResourceGroupName| Where-Object {$_.tags.Values -match "PROD,Data"}
>> write-output $sqlDatabase.DatabaseName
>> }
>> }
**dbname5**

解决方法

这里的问题是对列表使用 -notmatch-match 运算符会产生意外结果。切换到 -notcontains-contains 以获得精确匹配将产生所需的结果。

$AzSqlServer = Get-AzSqlServer
if ($AzSqlServer) {
    foreach ($server in $AzSqlServer) {
        $SQLDatabase = Get-AzSqlDatabase -ServerName $server.ServerName -ResourceGroupName $server.ResourceGroupName |
            Where-Object {$_.tags.Values -notcontains "PROD,Data"}
        $SQLDatabase.Databasename
    }
}

当使用 -notcontains 时,会完整比较列表的项目。如果没有与目标项目匹配的项目,该列表将仅返回 true。对列表使用 -notmatch 时,将返回与目标项不匹配的列表项。任何返回的项目都会在 True 语句中产生 boolean 结果。以下是您体验的简化示例:

# Notice how both boolean statements return True
PS> 1,2,3 -notmatch 2
1
3
PS> [bool](1,3 -notmatch 2)
True
PS> 1,3 -match 2
2
PS> [bool](1,3 -match 2)
True

# Now using -notcontains and -contains
PS> 1,3 -notcontains 2
False
PS> 1,3 -contains 2
True

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。