2016-04-05 29 views
0

değişkenli alıntı dizeleri katılmak * nix komut dosyası arka planından geliyorum ve genel olarak powershell ve Windows admin için yeni bir kullanıcıyım. Exchange/IIS SMTP sanal konaklarının bir koleksiyonunda SmartHost değerini kontrol edecek bir komut dosyası yazmaya çalışıyorum. Ben ADSI sorgu dizesi içine ilmekli değişken eklemek için nasıl anlamaya çalışıyorum ama + operatörü hile yapmaz: + tek veya çift tırnak kullanılmasıpowershell

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

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

bana bu hata veriyor:

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

ne ADSI sorgu dizesine ilmekli konak değeri eklemek için uygun ya da tercih edilen yolu olurdu?

cevap

1

Bir işlem sırası sorunu gibi görünüyor. Sorgunun ilk bölümü:

[ADSI]'IIS://' 

sorgu dizesi dönüştürülür ediliyor ve daha sonra ortaya çıkan [System.DirectoryServices.DirectoryEntry] nesneye bir dize eklemeyi deneyin. Bu sınıf bir ek işleç sağladığından, başarısız olur. Bunun yerine, parantez içine içine alarak sorgu oluşturmadan önce ilk tamamını dize oluşturmak:

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

'$ SMTPSvc = [ADSI] "IIS: // $ hostname/smtpsvc/1"' de bu durumda işe yarar. – Matt