Как объединить значения в PowerShell? - PullRequest
0 голосов
/ 20 декабря 2018

Я пытаюсь разрешить некоторые записи DNS с помощью PowerShell.Все методы Resolve-DnsName работают ниже, за исключением того, где я пытаюсь добавить «owa».в начало доменного имени.Последняя ошибка, которую я получаю: « не может проверить аргумент для имени параметра ».Я пробовал различные комбинации без удачи (например, owa. $ Domain.Name).Как правильно объединить значения для достижения успешного разрешения DNS?

$Domain = New-Object System.Object
$Domain | Add-Member -type NoteProperty -name MXRecord -value $MXQuery
$Domain | Add-Member -type NoteProperty -name Name -value "mydomain.com"
$MXQueryRecord = Resolve-DnsName $Domain.Name -type MX -Server 8.8.8.8
$OWAQuery = Resolve-DnsName $("owa.")-$($Domain.Name) -type CNAME -Server 8.8.8.8
$TXTQuery = Resolve-DnsName $Domain.Name -type TXT -Server 8.8.8.8
$NSQuery = Resolve-DnsName $Domain.Name -type NS -Server 8.8.8.8

$Queries =$($MXQuery,$OWAQuery,$TXTQuery,$NSQuery)

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

Попробуйте написать это так

$OWAQuery = Resolve-DnsName "owa.-$($Domain.Name)" -type CNAME -Server 8.8.8.8

(если я правильно понял, что это должно выглядеть следующим образом: owa.-somedomainname; потому что тире кажется лишним, просто удалите его, если не нужно)

0 голосов
/ 20 декабря 2018

Используйте (...) для передачи значения выражения / вывода команды в качестве аргумента команды. 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)"), ваша команда тоже сработала бы (но не было бы необходимости вставлять строку литерал через $(...)).
Чтобы узнать больше о расширяемых строках (интерполяция строк) , см. этот ответ .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...