0

我来自 *nix 脚本背景,一般来说,我是 powershell 和 Windows 管理员的新手。我正在尝试编写一个脚本来检查 Exchange/IIS smtp 虚拟主机集合上的 SmartHost 值。我试图弄清楚如何将循环变量插入到 ADSI 查询字符串中,但 + 运算符没有做到这一点:

$hosts = @("host1","host2")

foreach ($hostname in $hosts) {
$SMTPSvc = [ADSI]'IIS://' + $hostname + '/smtpsvc/1'
echo $SMTPSvc.SmartHost
}

使用带单引号或双引号的 + 会给我这个错误:

Method invocation failed because [System.DirectoryServices.DirectoryEntry] does not contain a method named 'op_Addition'. At line:3 char:1 + $SMTPSvc = [ADSI]'IIS://' + $hostname + '/smtpsvc/1' + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (op_Addition:String) [], RuntimeException + FullyQualifiedErrorId : MethodNotFound

将循环主机值插入 ADSI 查询字符串的正确或首选方法是什么?

4

1 回答 1

1

它看起来像一个操作顺序问题。查询的第一部分:

[ADSI]'IIS://'

正在转换为查询字符串,然后您尝试将字符串添加到生成的 [System.DirectoryServices.DirectoryEntry] 对象。由于该类不提供加法运算符,因此它失败了。相反,在构造查询之前先生成整个字符串,方法是将其括在括号中:

$SMTPSvc = [ADSI]('IIS://' + $hostname + '/smtpsvc/1')
于 2016-04-05T20:36:23.050 回答