在 powershell 中将带引号的字符串与变量连接起来

join quoted strings with variable in powershell

我来自 *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 查询字符串的正确或首选方法是什么?

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

[ADSI]'IIS://'

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

$SMTPSvc = [ADSI]('IIS://' + $hostname + '/smtpsvc/1')