禁用AD计算机对象并移至禁用OU脚本失效求助
排查PowerShell AD脚本升级Server2019后失效的步骤
以下是针对你的脚本在Server 2012 R2升级到2019后失效的具体排查方向和修复建议:
替换AD查询的脚本块Filter为字符串格式
Server 2019的Active Directory模块对脚本块形式的Filter兼容性有所变化,原脚本中的{ LastLogonDate -lt $cutoff -and enabled -eq $true }可能无法正确解析。建议修改为字符串Filter:Get-ADComputer -Filter "LastLogonDate -lt '$cutoff' -and enabled -eq 'True'" -Properties lastlogondate |若仍有问题,可将
$cutoff转换为AD兼容的时间格式后再传入:$cutoffStr = $cutoff.ToString('yyyyMMddHHmmss.0Z') Get-ADComputer -Filter "LastLogonDate -lt '$cutoffStr' -and enabled -eq 'True'" -Properties lastlogondate |验证目标计算机的LastLogonDate属性值
手动检查几个确认符合条件的计算机,执行:Get-ADComputer "目标计算机名" -Properties LastLogonDate | Select-Object Name, LastLogonDate确认返回的LastLogonDate确实早于6个月前,同时检查AD站点复制是否正常,避免因属性未同步导致查询不到对象。
添加错误捕获以定位具体问题
原脚本无错误处理,失效时无法获取报错信息。修改脚本加入try/catch块,捕获执行过程中的错误:$cutoff = (Get-Date).AddMonths(-6) Get-ADComputer -Filter "LastLogonDate -lt '$cutoff' -and enabled -eq 'True'" -Properties lastlogondate | foreach-object { try { $Today = Get-Date -Format d $Time = Get-Date -Format t $Destination = "OU=Computers,OU=Disabled Objects,DC=DOMAIN,DC=COM" $SourceOU = $_.Distinguishedname $Description = "Disabled on $Today at $Time - Source OU was $SourceOU" Set-ADComputer $_.distinguishedname -Description $Description -Enabled $false -ErrorAction Stop Move-ADObject $_.distinguishedname -TargetPath $Destination -ErrorAction Stop Write-host "Moved $($_.distinguishedname) to $Destination" } catch { Write-Error "处理 $($_.Name) 失败: $_" } }运行修改后的脚本,根据错误提示定位问题(如权限不足、目标OU路径错误等)。
检查执行账号的权限
升级服务器后,运行脚本的账号可能丢失了AD对象的修改/移动权限。手动用该账号执行单个测试命令:# 禁用测试计算机 Set-ADComputer "测试计算机名" -Enabled $false # 移动测试计算机到目标OU Move-ADObject "测试计算机的DN" -TargetPath "OU=Computers,OU=Disabled Objects,DC=DOMAIN,DC=COM"若执行失败,需重新配置该账号的AD权限。
确认AD模块的参数兼容性
检查Server 2019上AD模块的cmdlet参数是否有变化,执行Get-Help Get-ADComputer -Parameter Filter查看官方说明,确保Filter语法符合新版本要求。
内容的提问来源于stack exchange,提问作者Charles Waters
相关产品推荐
相关产品推荐

