2016-04-05 75 views
0

我來自* nix腳本背景,並且我一般是PowerShell和Windows管理員的總新手。我試圖編寫一個腳本來檢查Exchange/IIS smtp虛擬主機集合上的SmartHost值。我試圖找出如何環狀變量插入ADSI查詢字符串,但+運營商沒有做的伎倆:在PowerShell中加入帶引號的變量字符串

$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查詢字符串正確或首選的方法是什麼?

回答

1

它看起來像操作順序問題。查詢的第一部分:

[ADSI]'IIS://' 

正在轉換到查詢字符串,然後嘗試將字符串添加到所得到的[System.DirectoryServices.DirectoryEntry]對象。由於該類不提供添加運算符,因此失敗。取而代之的是,在後面的括號括起來構建查詢之前,首先生成整個字符串:

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

'$ SMTPSVC = [ADSI] 「IIS:// $主機名/ SMTPSVC/1」'也將在這種情況下工作。 – Matt