You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过PowerShell获取所有Azure VM的JIT状态并导出Excel

Azure 虚拟机JIT状态查询PowerShell实现方案

前置依赖

运行脚本前先完成环境准备,在PowerShell中执行以下命令安装所需模块、登录Azure账号:

# 安装Azure官方Az模块,已安装可跳过
Install-Module -Name Az -Scope CurrentUser -Repository PSGallery -Force
# 安装Excel导出模块(无需本地安装Office即可生成xlsx文件),已安装可跳过
Install-Module -Name ImportExcel -Scope CurrentUser -Repository PSGallery -Force
# 登录Azure账号
Connect-AzAccount
# 若存在多个订阅,替换下方<订阅ID>为目标订阅ID后执行,切换到查询上下文
Set-AzContext -SubscriptionId "<你的目标订阅ID>"

完整查询脚本

脚本会自动拉取当前订阅下所有虚拟机,匹配安全中心配置的JIT策略,标记每台VM的启用状态,最终导出为Excel文件:

# 定义Excel导出路径,可自行修改
$exportPath = "C:\Temp\Azure_VM_JIT_Status.xlsx"
# 初始化结果数组
$result = @()
# 获取当前订阅下所有JIT访问策略
$jitPolicies = Get-AzResource -ResourceType "Microsoft.Security/jitNetworkAccessPolicies" -ErrorAction SilentlyContinue
# 获取订阅下所有虚拟机
$allVMs = Get-AzVM -Status
foreach ($vm in $allVMs) {
    # 匹配当前VM关联的JIT策略
    $matchedJit = $jitPolicies | Where-Object {
        $_.Properties.virtualMachines.id -contains $vm.Id
    }
    # 组装状态信息
    $vmStatus = [PSCustomObject]@{
        VM名称 = $vm.Name
        资源组 = $vm.ResourceGroupName
        所在区域 = $vm.Location
        操作系统 = if ($vm.StorageProfile.OsDisk.OsType) { $vm.StorageProfile.OsDisk.OsType } else { $vm.StorageProfile.ImageReference.Offer }
        JIT启用状态 = if ($matchedJit) { "已启用" } else { "未启用" }
        JIT允许端口 = if ($matchedJit) { ($matchedJit.Properties.ports | ForEach-Object { "$($_.protocol):$($_.number)" }) -join ";" } else { $null }
        JIT策略更新时间 = if ($matchedJit) { $matchedJit.Properties.lastModifiedTimeUtc } else { $null }
    }
    $result += $vmStatus
}
# 导出为Excel文件,自动适配列宽
$result | Export-Excel -Path $exportPath -AutoSize -WorksheetName "JIT状态统计"
# 控制台输出统计结果
$enabledCount = ($result | Where-Object JIT启用状态 -eq "已启用").Count
$disabledCount = ($result | Where-Object JIT启用状态 -eq "未启用").Count
Write-Host "查询完成:共统计VM $($result.Count) 台,其中JIT已启用 $enabledCount 台,未启用 $disabledCount 台,结果已导出至 $exportPath"

补充说明

  • 如果需要跨多个订阅查询,可以在登录后遍历Get-AzSubscription返回的所有订阅,逐个切换上下文执行上述查询逻辑,合并结果后再导出即可
  • 如果不想安装ImportExcel模块,可将最后导出Excel的命令替换为$result | Export-Csv -Path "C:\Temp\Azure_VM_JIT_Status.csv" -NoTypeInformation -Encoding UTF8,生成的CSV文件可直接用Excel打开编辑
  • 运行脚本的账号需要拥有订阅级别的虚拟机读取权限、安全中心策略读取权限,否则会出现数据拉取不全的问题

内容的提问来源于stack exchange,提问作者Suri007

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 07:09:17