Exchange 2010 PowerShell批量设置自动回复脚本报错求助
问题排查与修正方案
我来帮你梳理下这个PowerShell脚本里的问题,主要有几个关键错误需要修正,咱们一步步来:
1. Import-Csv的Header参数用错了
你的CSV文件本身已经自带Users和Email表头了,加上-Header "Users", "Email"会让PowerShell把CSV的第一行(也就是原本的表头)当成第一条用户数据,真正的用户信息反而从第二行开始处理。这就是为什么会提示“找不到域对象‘Users’”——它把表头文本当成了用户名去查找了!
修正方法: 直接删掉-Header参数,正常导入CSV即可:
$content = Import-Csv "C:\Scripts\File\files.csv"
2. ForEach循环的语法错误
你写的ForEach ($_.Users in $content)是错误的用法,$_是PowerShell管道里的自动变量,不能在ForEach循环的变量定义里这么用。咱们应该自定义一个循环变量,比如$user,用来遍历每一条CSV记录。
修正方法: 改成正确的循环结构:
ForEach ($user in $content) { # 后面的代码都用$user来调用属性,比如$user.Users、$user.Email }
3. 变量插值与笔误问题
在双引号字符串里直接写$user.Users的话,PowerShell有时候没法正确解析对象属性,得用子表达式$()把属性包裹起来,确保变量能正确展开。另外你在ExternalMessage里把Users拼写成了Ysers,这也是个小笔误,得改过来。
修正方法: 修正消息内容里的变量和笔误:
-InternalMessage "$($user.Users) no longer works here, please reach them at $($user.Email)" -ExternalMessage "$($user.Users) no longer works here, please reach them at $($user.Email)"
完整修正后的脚本
把所有修正整合起来,最终能用的脚本是这样的:
$content = Import-Csv "C:\Scripts\File\files.csv" ForEach ($user in $content) { Set-MailboxAutoReplyConfiguration $user.Users -AutoReplyState enabled -ExternalAudience all -InternalMessage "$($user.Users) no longer works here, please reach them at $($user.Email)" -ExternalMessage "$($user.Users) no longer works here, please reach them at $($user.Email)" } Exit
额外提醒
- 要确保CSV里的
Users列内容是Exchange能识别的邮箱标识,比如别名、用户主体名称(UPN)或者邮箱地址,不然还是会找不到对象哦。 - 运行脚本的账号得有修改邮箱自动回复配置的权限,比如Exchange的收件人管理员角色。
内容的提问来源于stack exchange,提问作者jodokast89
相关产品推荐
相关产品推荐

