You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 21:15:36