在 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')
我来自 *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')