我正在尝试使用PowerShell解决一些DNS记录。除了我尝试附加“ owa”的方法外,所有的Resolve-DnsName方法都可以在下面使用。到域名的开头。我得到的最新错误是“ 无法验证参数名称上的参数”。我尝试了各种组合而没有运气(即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)
答案 0 :(得分:3)
使用(...)
将表达式的值/命令的输出作为命令参数传递 t:
Resolve-DnsName ("owa." + $Domain.Name) -type CNAME -Server 8.8.8.8
注意:$(...)
, the subexpression operator仅在您要传递的内容包含多个语句时才需要。 @(...)
, the array-subexpression operator仅在您需要保证将输出视为 array (即使仅输出单个对象)时才需要。
(...)
,$(...)
,@(...)
具有使用 any 数据类型的优势 ,而不仅仅是字符串。
或者,如果您传递的是 string 值(在这种情况下),则可以使用字符串扩展(插值),如Drako's answer中所示。
关于您尝试过的事情:
PowerShell将
$("owa.")-$($Domain.Name)
解析为两个参数:
$("owa.")
,其结果为字符串文字owa.
-$($Domain.Name)
,其值为-<domain-name>
(作为可扩展字符串的求值意味着对它的评估方式与显式双引号("-$($Domain.Name)"
的双引号一样) 。当PowerShell将复合令牌分解成多个个参数时,这并不总是很明显。行为总结为here。
要了解一般如何将未加引号的标记解析为参数,请参见this answer。
请注意,如果您的整个令牌("$("owa.")-$($Domain.Name)"
用双引号进行了标记,那么您的命令也可以使用(但没有必要)通过$(...)
嵌入字符串 literal )。
要了解有关可扩展字符串(字符串插值)的更多信息,请参见this answer。
答案 1 :(得分:3)
尝试这样写
$OWAQuery = Resolve-DnsName "owa.-$($Domain.Name)" -type CNAME -Server 8.8.8.8
(如果我正确理解它应为:owa.-somedomainname;因为破折号似乎是多余的,请在不需要时将其删除)