查询特定日期后创建的AD域Unix计算机的PowerShell脚本无返回结果
PowerShell查询AD指定日期后创建的Unix类计算机无结果问题修复
核心问题原因
- 原脚本使用
Get-ADComputer -Filter '*' -Properties *先拉取域内所有计算机的全部属性,再在本地做过滤,域内设备量超过千级时就会出现查询超时、执行卡顿无返回的问题 - 直接用字符串格式的日期和AD返回的
DateTime类型whenCreated属性做比较,类型不匹配导致判断逻辑失效,无法筛选出符合条件的结果
修复后脚本
# 显式转换日期为DateTime类型,确保比较逻辑生效 $targetDate = [DateTime]::Parse('2018-11-07 14:41:59.000') # 过滤逻辑直接在AD侧执行,仅拉取需要用到的属性,大幅提升查询效率 Get-ADComputer -Filter {CanonicalName -like '*Unix*' -and whenCreated -gt $targetDate} ` -Properties OperatingSystem,OperatingSystemVersion,ipv4Address,Created,whenCreated,Deleted,whenChanged,Modified,Description,ServicePrincipalNames,DisplayName,Location,DistinguishedName,DNSHostName | Select-Object Name,OperatingSystem,OperatingSystemVersion,ipv4Address,Created,whenCreated,Deleted,whenChanged,Modified,Description, @{Label="ServicePrincipalNames";Expression={$_.ServicePrincipalNames -join ";" }},DisplayName,Location,DistinguishedName,DNSHostName
无结果排查方案
如果修改后仍无返回,按以下步骤验证:
- 临时去掉Filter中的
-and whenCreated -gt $targetDate条件,执行查询看是否返回Unix类计算机,确认CanonicalName中的关键字匹配正确 - 取查询返回的某台Unix计算机的
whenCreated值和目标日期对比,确认确实存在符合时间条件的设备 - 域内设备量级超过十万级的情况下,可以追加
-SearchBase "OU=xxx,DC=xxx,DC=xxx"参数指定查询的OU范围,进一步缩小查询范围提升速度
内容的提问来源于stack exchange,提问作者Leo Torres
相关产品推荐
相关产品推荐

