Используйте (...)
для передачи значения выражения / вывода команды в качестве аргумента команды. t:
Resolve-DnsName ("owa." + $Domain.Name) -type CNAME -Server 8.8.8.8
Примечание: $(...)
, оператор подвыражения , требуется, только если то, что вы пытаетесь передать, содержит несколько операторов.@(...)
, оператор подвыражения массива , необходим только в том случае, если необходимо гарантировать, что выходные данные обрабатываются как массив , даже если выводится только один объект.
(...)
, $(...)
, @(...)
имеют преимущество работы с любым типом данных , а не только со строками.
В качестве альтернативы, , если вы передаете строку значение (как в этом случае), вы можете использовать расширение строки (интерполяция) , как показанов ответ Драко .
Что касается то, что вы пытались :
$("owa.")-$($Domain.Name)
анализируется PowerShell как два аргумента:
- Subexpression
$("owa.")
, который оценивается как строковый литерал owa.
- Расширяемая строка
-$($Domain.Name)
,который оценивается как -<domain-name>
(оценка как расширяемая строка означает, что вычисляется так же, как если бы вы явно указали в двойном кавычке этот токен ("-$($Domain.Name)"
)).
Это не всегдаочевидно когда PowerShell разбивает составной токен на несколько аргументов ;Поведение обобщено здесь .
Чтобы узнать о , как токены без кавычек анализируются как аргументы вообще , см. этот ответ .
Обратите внимание, что если бы у вас было двойных кавычек вашего всего токена ("$("owa.")-$($Domain.Name)"
), ваша команда тоже сработала бы (но не было бы необходимости вставлять строку литерал через $(...)
).
Чтобы узнать больше о расширяемых строках (интерполяция строк) , см. этот ответ .