Azure 更新管理以 csv 格式生成补丁状态报告

Azure update management generate patch status report in a csv format

我正在创建 Azure Automation Runbook 以生成有关管理组下虚拟机补丁状态的报告。

使用的查询如下

联合更新,工作区('xxxx').操作,工作区('yyyy').操作
|其中 TimeGenerated > ago(10d) |其中分类(“安全更新”、“关键更新”、“关键和安全更新”)和 ResourceType ==“virtualMachines” |按计算机、分类、更新状态、产品、发布日期、MSRCSeverity 总结更新=makeset(标题) |按更新状态排序

$result = Invoke-AzOperationalInsightsQuery -WorkspaceId $WorkspaceID -Query $query

这里我需要从同一管理组下的不同订阅查询日志分析工作区.. 运行 由于帐户在管理组级别将 RBAC 设置为“Log Analytics Reader”。 但是查询结果是空记录集,当它直接在 Log Analytics 工作区上执行时,相同的查询会获取记录。

任何关于我在这里遗漏的指导都会很有帮助。 谢谢

这个命令 Invoke-AzOperationalInsightsQuery 只能对一个订阅进行操作,所以在你的情况下,你需要使用一个循环来设置订阅 Set-AzContext -Subscription <subscription-id>,以获取你的 RunAs 帐户的所有订阅可以访问,使用Get-AzSubscription.

样本:

$connectionName = "AzureRunAsConnection"
try
{
    # Get the connection "AzureRunAsConnection "
    $servicePrincipalConnection=Get-AutomationConnection -Name $connectionName         

    "Logging in to Azure..."
    Connect-AzAccount `
        -ServicePrincipal `
        -TenantId $servicePrincipalConnection.TenantId `
        -ApplicationId $servicePrincipalConnection.ApplicationId `
        -CertificateThumbprint $servicePrincipalConnection.CertificateThumbprint 
}
catch {
    if (!$servicePrincipalConnection)
    {
        $ErrorMessage = "Connection $connectionName not found."
        throw $ErrorMessage
    } else{
        Write-Error -Message $_.Exception
        throw $_.Exception
    }
}

$query = "xxxxxx"
$subs = Get-AzSubscription
foreach($sub in $subs){
    Set-AzContext -Subscription $sub.Id
    #do the things you want e.g. $result = Invoke-AzOperationalInsightsQuery -WorkspaceId $WorkspaceID -Query $query
    
}

这只是一个示例,要使其正常工作,还记得在脚本中循环不同的 $WorkspaceID