PowerShell禁用AD闲置计算机脚本报错:op_Addition方法不存在
解决PowerShell脚本中ADComputer对象的op_Addition错误
问题分析
你遇到的错误根源是$Info变量被意外初始化为Microsoft.ActiveDirectory.Management.ADComputer类型对象,而非字符串或数组类型。当执行$Info += "$UpdateInformation - $Date"时,PowerShell尝试调用ADComputer对象的加法方法,但该类型并不包含op_Addition方法,因此抛出报错。
你的用户账户脚本能正常运行,说明该脚本中$Info是正确初始化为字符串/数组的;而计算机脚本里大概率存在变量名冲突,或是初始化步骤缺失。
解决方案
1. 显式初始化$Info变量
在脚本开头,确保$Info被初始化为空字符串或空数组,避免后续被意外赋值为AD对象:
# 初始化为空字符串(适合直接拼接文本) $Info = "" # 或者初始化为数组(适合存储多条独立记录) # $Info = @()
如果使用数组存储,后续可直接添加字符串元素,最后输出时用-join合并为带换行的文本:
$Info += "$UpdateInformation - $Date" # 发送邮件前合并内容 $emailBody = $Info -join "`n"
2. 排查变量名冲突
检查脚本中是否有其他代码将$Info赋值为AD查询结果,比如:
# 错误示例:此处将$Info赋值为ADComputer对象集合 $Info = Get-ADComputer -Filter * -Properties LastLogonDate
若存在此类情况,将该变量改名(比如改为$allComputers),避免和用于拼接通知内容的$Info重名。
修改后的代码示例
# 初始化用于存储通知信息的变量 $Info = "" $Date = Get-Date -Format "yyyy-MM-dd" $inactiveThreshold = (Get-Date).AddDays(-90) # 获取90天未登录的计算机对象 $inactiveComputers = Get-ADComputer -Filter { LastLogonDate -lt $inactiveThreshold } -Properties LastLogonDate, Description foreach ($computer in $inactiveComputers) { # 禁用计算机账户 Disable-ADAccount -Identity $computer # 更新账户描述 $newDescription = "Disabled due to inactivity $Date" Set-ADComputer -Identity $computer -Description $newDescription # 记录操作信息 $UpdateInformation = "Disabled computer: $($computer.Name) (Last logged on: $($computer.LastLogonDate.ToString('yyyy-MM-dd')))" $Info += "$UpdateInformation`n" } # 仅当有操作记录时发送邮件 if ($Info -ne "") { Send-MailMessage -To "admin@yourdomain.com" -From "AD-Script@yourdomain.com" -Subject "Inactive Computers Disabled - $Date" -Body $Info -SmtpServer "smtp.yourdomain.com" }
内容的提问来源于stack exchange,提问作者knownocode
相关产品推荐
相关产品推荐

