присоединиться к строкам в кавычках с переменной в powershell

Я исхожу из опыта написания сценариев * nix, и я новичок в PowerShell и администраторе Windows в целом. Я пытаюсь написать сценарий, который будет проверять значение SmartHost в коллекции виртуальных хостов Exchange/IIS smtp. Я пытаюсь понять, как вставить циклическую переменную в строку запроса 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?


person gnomemade    schedule 05.04.2016    source источник


Ответы (1)


Похоже на порядок действий. Первая часть запроса:

[ADSI]'IIS://'

преобразуется в строку запроса, а затем вы пытаетесь добавить строку в результирующий объект [System.DirectoryServices.DirectoryEntry]. Поскольку этот класс не предоставляет оператора сложения, он терпит неудачу. Вместо этого сначала сгенерируйте всю строку, прежде чем создавать запрос, заключив ее в квадратные скобки:

$SMTPSvc = [ADSI]('IIS://' + $hostname + '/smtpsvc/1')
person zdan    schedule 05.04.2016
comment
$SMTPSvc = [ADSI]"IIS://$hostname/smtpsvc/1" также будет работать в этом случае. - person Matt; 06.04.2016