PowerShell:获取AD用户至变量后二次过滤失效问题求助
解决AD用户二次筛选无效的问题
问题根源在于Get-AdUser默认返回的属性集不包含PasswordNeverExpires和PasswordExpired,你存入$users的对象里根本没有这两个属性,直接用Where-Object自然无法筛选。
以下是两种正确的二次过滤方法:
方法一:首次查询时就包含目标属性(推荐)
第一次获取用户时,通过-Properties参数指定需要的属性,后续直接基于$users筛选即可:
# 获取所有启用状态的AD用户,同时加载密码相关属性 $users = Get-AdUser -Filter { Enabled -eq $true } -Properties PasswordNeverExpires, PasswordExpired # 二次筛选符合条件的用户 $targetUsers = $users | Where-Object { $_.PasswordNeverExpires -eq $false -and $_.PasswordExpired -eq $false }
方法二:为已有的$users补充属性
如果已经提前获取了不含目标属性的$users集合,可以批量补充属性后再筛选,避免全量重复查询:
# 假设$users是已获取的启用用户集合(仅含默认属性) $targetUsers = $users | Get-AdUser -Properties PasswordNeverExpires, PasswordExpired | Where-Object { $_.PasswordNeverExpires -eq $false -and $_.PasswordExpired -eq $false }
注意
方法一的效率更高,因为只需要向AD发起一次查询请求;方法二适合你已经持有$users集合的场景,批量查询比逐个处理更高效。
内容的提问来源于stack exchange,提问作者Cody Whittaker
相关产品推荐
相关产品推荐

