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

如何通过PowerShell生成过去4天的Intune设备统计PNG图表

解决Intune过去4天设备统计报告的PowerShell实现方案

要实现过去4天的设备统计,核心是利用Graph API的$filter参数在服务器端筛选时间范围,避免本地过滤的兼容性问题。以下是修改后的完整脚本,包含时间筛选逻辑:

Connect-MgGraph -Scopes "DeviceManagementManagedDevices.Read.All"

Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Windows.Forms.DataVisualization

# 计算过去4天的UTC时间(符合Graph API的ISO 8601格式)
$fourDaysAgo = (Get-Date).AddDays(-4).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ")

# 筛选过去4天内同步的、符合条件的设备(服务器端过滤,效率更高)
$updateddevices = Get-MgDeviceManagementManagedDevice -Filter "OSVersion eq '16.7' and DeviceCategoryDisplayName eq 'in use' and LastSyncDateTime ge $fourDaysAgo" -All
$totaldevices = Get-MgDeviceManagementManagedDevice -Filter "OperatingSystem eq 'iOS' and DeviceCategoryDisplayName eq 'in use' and LastSyncDateTime ge $fourDaysAgo" -All

# 定义数据点
$dataPoints = @{
    "已更新至16.7" = $updateddevices.Count
    "iOS总设备数" = $totaldevices.Count
}

# 创建图表(原图表逻辑保留)
$chart = New-Object System.Windows.Forms.DataVisualization.Charting.Chart
$chartArea = New-Object System.Windows.Forms.DataVisualization.Charting.ChartArea
$chart.ChartAreas.Add($chartArea)

$series = New-Object System.Windows.Forms.DataVisualization.Charting.Series
$series.ChartType = [System.Windows.Forms.DataVisualization.Charting.SeriesChartType]::StackedColumn
$chart.Series.Add($series)

$dataPoints.GetEnumerator() | ForEach-Object {
    $dataPoint = New-Object System.Windows.Forms.DataVisualization.Charting.DataPoint 
    $dataPoint.AxisLabel = $_.Key
    $dataPoint.YValues[0] = $_.Value 
    $dataPoint.IsValueShownAsLabel = $true
    $series.Points.Add($dataPoint)
}

$chart.Titles.Add("过去4天iOS设备统计")
$chartArea.AxisX.Title = "设备类型"
$chartArea.AxisY.Title = "数量"

# 显示图表并保存
$form = New-Object System.Windows.Forms.Form
$form.Text = "设备统计图表"
$form.ClientSize = New-Object System.Drawing.Size(500, 350)
$chart.Dock = [System.Windows.Forms.DockStyle]::Fill
$form.Controls.Add($chart)
$form.ShowDialog()

$chart.SaveImage("C:\Downloads\last4days_chart.png", [System.Drawing.Imaging.ImageFormat]::Png)

关键说明:

  1. 时间格式处理:Graph API要求时间参数为UTC的ISO 8601格式(如2024-05-20T00:00:00Z),因此用ToUniversalTime()转换并格式化,避免本地时间与服务器时间的差异问题。
  2. 服务器端筛选:使用-Filter参数直接在Graph服务器端过滤数据,相比本地Where-Object更高效,且避免了DateTimeOffset类型本地比较的兼容性问题(这也是你之前用(Get-Date).AddDays(-1)未生效的核心原因)。
  3. 权限说明:确保Connect-MgGraph时申请了DeviceManagementManagedDevices.Read.All权限,否则无法获取设备数据。

如果需要按每天分组统计(比如过去4天每天的更新设备数),可以在获取数据后按日期分组:

# 按LastSyncDateTime的日期分组统计已更新设备
$dailyUpdated = $updateddevices | Group-Object -Property { $_.LastSyncDateTime.Date } | Sort-Object Name

# 构建按天的数据点
$dailyDataPoints = @{}
$dailyUpdated | ForEach-Object {
    $dailyDataPoints[$_.Name.ToString("yyyy-MM-dd")] = $_.Count
}

# 后续图表逻辑可修改为折线图或柱状图展示每日数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 15:01:15