2016-04-05 13 views
0

Ich komme aus einem * Nix Scripting-Hintergrund und ich bin ein Neuling für Powershell und Windows-Admin im Allgemeinen. Ich versuche, ein Skript zu schreiben, das den SmartHost-Wert auf einer Sammlung virtueller Exchange/IIS-SMTP-Hosts überprüft. Ich versuche, herauszufinden, wie die geschlungenen Variable in den ADSI Query-String einzufügen, aber der Operator + nicht tut den Trick:verbinden zitierte Strings mit Variablen in Powershell

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

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

Mit dem + mit einfachen oder doppelten Anführungszeichen gibt mir diese Fehlermeldung:

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

Was der richtige oder bevorzugter Weg wäre, den geschleiften Host-Wert in das ADSI Query-String einfügen?

Antwort

1

Es sieht aus wie eine Reihenfolge der Vorgänge Problem. Der erste Teil der Abfrage:

[ADSI]'IIS://' 

wird auf die Query-String umgewandelt und dann versuchen Sie einen String an das resultierende [System.DirectoryServices.DirectoryEntry] Objekt hinzuzufügen. Da diese Klasse keinen Additionsoperator bereitstellt, schlägt sie fehl. Stattdessen zunächst die gesamte Zeichenfolge erzeugen, bevor die Abfrage konstruieren, indem sie in Klammern umschließen:

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

'$ SMTPSvc = [ADSI] "IIS: // $ hostname/smtpsvc/1"' würde auch in diesem Fall arbeiten. – Matt