查询AD陈旧计算机账户:排除VDI黄金镜像账户失败求助
解决AD陈旧计算机账户查询时排除VDI黄金镜像的问题
我来帮你搞定这个困扰!你遇到的问题大概率是筛选条件的逻辑没组合对——既要找出90天未登录的账户,又要排除名称含VDI的黄金镜像,得把两个条件用正确的逻辑连接起来。
修正后的完整代码
先给你能直接用的脚本,我会逐段解释:
# 先计算出90天前的日期作为判断阈值 $90DaysAgo = (Get-Date).AddDays(-90) # 查询AD中符合条件的计算机账户 Get-ADComputer -Filter * -Properties LastLogonDate | Where-Object { # 两个条件必须同时满足:要么从未登录过,要么最后登录时间早于90天前;并且名称不含VDI ($_.LastLogonDate -eq $null -or $_.LastLogonDate -le $90DaysAgo) -and $_.Name -notlike "*VDI*" } | # 按需选择要展示的属性 Select-Object Name, LastLogonDate, DistinguishedName
关键注意点
- 逻辑条件的组合:一定要用
-and把「陈旧账户」和「非VDI账户」两个条件绑定在一起,这样才会同时过滤掉不符合的项。 - 处理无登录记录的账户:有些计算机可能从未登录过(比如刚创建的测试账户),
LastLogonDate会是null,加上$_.LastLogonDate -eq $null可以把这类账户也纳入陈旧范围(如果不需要的话可以删掉这个分支)。 - 灵活调整匹配规则:如果你的VDI黄金镜像有特定命名规则(比如前缀是
VDI-,或者后缀是_Gold),可以修改-notlike的匹配模式,比如改成-notlike "VDI-*"或者-notlike "*_Gold",这样筛选更精准。
常见错误排查
如果你之前的代码没生效,可能是这几个原因:
- 只加了时间筛选,完全没写排除VDI的条件;
- 把
-and写成了-or,导致只要满足其中一个条件就会被保留; - 把排除条件写在了另一个
Where-Object块,或者位置不对,导致过滤失效。
内容的提问来源于stack exchange,提问作者That1Dude1
相关产品推荐
相关产品推荐

