使用Get-IntuneManagedDevice筛选今日同步的符合条件Apple设备
解决PowerShell筛选Apple设备今日同步时间无结果的问题
你原本的命令能正确筛选出制造商为Apple、受监管(IsSupervised=$true)、序列号非空且设备名不含"MOB-"的设备,但添加lastsyncdatetime为今日的筛选条件后无结果,核心问题在于字符串格式的日期无法正确匹配时间范围,以及lastsyncdatetime包含时分秒导致精确匹配几乎不可能命中。
关键解决思路
- 避免直接用字符串比较日期,先把
lastsyncdatetime字段转换成DateTime对象,规避系统文化差异导致的格式解析错误(比如英文系统会把DD/MM/YYYY当成MM/DD/YYYY)。 - 筛选"今日"设备时,匹配今日00:00:00到次日00:00:00之间的所有时间,而非精确到某一秒的时间点。
修改后的命令示例
假设你使用的是Microsoft Graph PowerShell模块(Intune设备管理常用),修改后的命令如下:
# 定义今日的起始和结束时间范围 $todayStart = Get-Date -Hour 0 -Minute 0 -Second 0 $todayEnd = $todayStart.AddDays(1) # 获取并筛选符合条件的设备 Get-MgDeviceManagementManagedDevice -Filter "Manufacturer eq 'Apple' and IsSupervised eq true and SerialNumber ne null and not(DeviceName contains 'MOB-') and not(ManagedDeviceName contains 'MOB-')" | Where-Object { # 按指定格式转换同步时间为DateTime对象,避免格式解析错误 $syncTime = [DateTime]::ParseExact($_.lastsyncdatetime, 'dd/MM/yyyy HH:mm:ss', [System.Globalization.CultureInfo]::InvariantCulture) # 判断是否在今日时间范围内 $syncTime -ge $todayStart -and $syncTime -lt $todayEnd } | Select-Object SerialNumber, DeviceName, ManagedDeviceName, lastsyncdatetime
原方法失效的原因
- 精确匹配无意义:
lastsyncdatetime包含时分秒,只有设备同步时间和你输入的精确时间完全一致才会被选中,这种情况几乎不会发生。 - 字符串比较的隐患:直接用字符串筛选(比如
lastsyncdatetime eq '01/10/2024 00:00:00'),不仅会因为时分秒漏选大量设备,还可能因系统文化设置导致日期解析错误。
额外注意事项
- 如果你的
lastsyncdatetime格式带AM/PM标识,需要调整ParseExact的格式字符串为'dd/MM/yyyy hh:mm:ss tt'。 - 若使用旧版Intune PowerShell模块(
Get-IntuneManagedDevice),逻辑完全一致,替换对应命令即可。
内容的提问来源于stack exchange,提问作者Gavin Eldred
相关产品推荐
相关产品推荐

