如何在PowerShell中连接值?

时间:2018-12-20 14:34:38

标签: powershell

我正在尝试使用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)

2 个答案:

答案 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中所示。


关于您尝试过的事情

  

$("owa.")-$($Domain.Name)

PowerShell将

解析为两个参数:

  • 子表达式$("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;因为破折号似乎是多余的,请在不需要时将其删除)