В моей лаборатории разработки и тестирования Azure (DTL) есть много ресурсов, которые не были помечены. Как я могу получить список всех немаркированных ресурсов в DTL / группе ресурсов?
Как получить все ресурсы Azure без тегов в группе ресурсов Azure
Ответы (5)
Вот простой цикл PowerShell для получения немаркированных ресурсов.
$resources = Get-AzureRmResource
foreach($resource in $resources)
{
if ($resource.Tags -eq $null)
{
echo $resource.Name, $resource.ResourceType
}
}
Другие способы запроса этой информации, а также установки тегов программно или как часть развертывания ресурсов описаны здесь.
Если вы хотите избежать ситуации, когда в итоге получаются немаркированные ресурсы, вы можете применить настроенная политика, согласно которой все ресурсы должны иметь значение для определенного тега.
Вот идиоматическая оболочка PowerShell, дополняющая ответ @ huysmania, который выражается в процедурном языке мышления (и обновлен для новых командлетов PowerShell Az):
Get-AzResource | Where-Object Tags -eq $null | Select-Object -Property Name, ResourceType
и краткая (псевдоним) форма:
Get-AzResource | ? Tags -eq $null | select Name, ResourceType
‹#Bellow - это сценарий PowerShell для поиска немаркированных ресурсов - вы можете изменить вывод сценария в соответствии с вашими требованиями. Надежда должна быть полезной. Спасибо! #>
Write-Host "List all resource where Tag value is not Set"
Write-Host "********************************************"
#Fetch all resource details
$resources=get-AzureRmResource
foreach ($resource in $resources) {
$tagcount=(get-AzureRmResource | where-object {$_.Name -match $resource.Name}).Tags.count
if($tagcount -eq 0) {
Write-Host "Resource Name - "$resource.Name
Write-Host "Resource Type and RG Name : " $resource.resourcetype " & " $resource.resourcegroupname "`n"
}
}
$resource
уже имеет член тега. Нет необходимости в $tagcount=(get-AzureRmResource | where-object {$_.Name -match $resource.Name}).Tags.count
. Это неэффективно и медленно, потому что для поиска тега текущего ресурса необходимо выполнять поиск по каждому ресурсу. Вы можете получить счет просто с помощью $tagcount = $resource.Tags.Count
.
- person RoadRunner; 14.04.2020
Обычно я просто запускаю эту команду, чтобы вывести таблицу немаркированных ресурсов, используя _ 1_. Он фильтрует ресурсы Azure с помощью $null
или пустых тегов, используя _ 3_.
Get-AzResource `
| Where-Object {$null -eq $_.Tags -or $_.Tags.Count -eq 0} `
| Format-Table -AutoSize
Если вы хотите перечислить немаркированные ресурсы для определенной группы ресурсов, вы можете просто добавить переключатель -ResourceGroupName
в положение Get-AzResource
.
$resourceGroupName = "My Resource Group"
Get-AzResource -ResourceGroupName $resourceGroupName `
| Where-Object {$null -eq $_.Tags -or $_.Tags.Count -eq 0} `
| Format-Table -AutoSize
Примечание. В приведенном выше примере используется более новая версия Модуль Azure PowerShell Az, который заменяет AzureRM
.
Эта ссылка есть решение для этого вопроса. Он прекрасно объясняет назначение и запрос тегов с помощью PowerShell.
$ resourceGroupName = 'InternalReportingRGDev'
$ azureRGInfo = Get-AzureRmResourceGroup -Name $ resourceGroupName foreach ($ item в $ azureRGInfo)
{
Find-AzureRmResource -ResourceGroupNameEquals $ item.ResourceGroupName | ForEach-Object {Set-AzureRmResource -ResourceId $ PSItem.ResourceId -Tag $ item.Tags -Force}
}