如何使用PowerShell获取/删除Azure Entra ID诊断设置
检查并删除Azure Entra ID诊断页面中的订阅级诊断设置
一、明确目标设置的本质
你提到的在Azure门户Entra ID -> 诊断设置页面显示的条目,本质是订阅范围的诊断设置——这类设置选择了将Entra ID相关日志(如AuditLogs、SignInLogs等)导出到存储账户、事件中心或Log Analytics工作区。它们不属于特定资源,因此无法用Get-AzDiagnosticSetting -ResourceId这类针对资源的命令操作。
二、PowerShell检查当前关联的设置
使用以下脚本列出所有订阅级诊断设置,并筛选出包含Entra ID日志类别的条目,同时统计数量是否达到5个上限:
# 未登录Azure时执行此命令 Connect-AzAccount # 获取当前订阅ID $subscriptionId = (Get-AzContext).Subscription.Id # 拉取所有订阅级诊断设置 $allSubDiagnostics = Get-AzDiagnosticSetting -ResourceId "/subscriptions/$subscriptionId" # 筛选出包含Entra ID日志类别的设置 $entraLinkedSettings = $allSubDiagnostics | Where-Object { $_.Logs.Category -match 'AuditLogs|SignInLogs|NonInteractiveUserSignInLogs|ServicePrincipalSignInLogs|ManagedIdentitySignInLogs|ProvisioningLogs' } # 格式化输出关键信息:设置名称、关联的Entra日志类别、输出目标 $entraLinkedSettings | Select-Object Name, @{Name='关联Entra日志类别'; Expression={$_.Logs.Category -join ', '}}, @{Name='输出目标'; Expression={ $targets = @() if ($_.StorageAccountId) { $targets += "存储账户: $($_.StorageAccountId.Split('/')[-1])" } if ($_.EventHubAuthorizationRuleId) { $targets += "事件中心: $($_.EventHubName)" } if ($_.WorkspaceId) { $targets += "Log Analytics: $($_.WorkspaceId.Split('/')[-1])" } $targets -join ', ' }} # 输出当前数量是否达上限 Write-Host "当前关联的Entra诊断设置数量: $($entraLinkedSettings.Count),上限为5个"
三、删除指定的诊断设置
确认要删除的设置名称后,执行以下命令删除:
# 替换为目标设置名称 $targetSettingName = "需要删除的订阅级诊断设置名称" # 删除该设置 Remove-AzDiagnosticSetting -ResourceId "/subscriptions/$subscriptionId" -Name $targetSettingName
如果需要批量删除(例如删除所有仅用于导出SignInLogs的设置),可以用循环实现:
# 筛选并批量删除示例(谨慎操作) $entraLinkedSettings | Where-Object { $_.Logs.Category -contains 'SignInLogs' } | ForEach-Object { Remove-AzDiagnosticSetting -ResourceId "/subscriptions/$subscriptionId" -Name $_.Name -Confirm:$false }
注意事项
- 删除前务必确认目标设置无其他业务依赖,因为订阅级诊断设置可能同时包含其他Azure服务的日志类别。
- 操作后可返回Azure门户的Entra ID诊断页面,确认设置已移除。
内容的提问来源于stack exchange,提问作者stodi
相关产品推荐
相关产品推荐

