PowerShell - OR operator



我正在尝试运行此命令以获取 A 和 CNAME 记录,但它似乎不起作用,我的语法是错误的。它仅检索 CNAME 类型的 DNS 记录。

实际命令是: Get-DnsServerResourceRecord -RRType "CNAME">

$results = Get-DnsServerZone | % {
$zone = $_.zonename
Get-DnsServerResourceRecord $zone -filter {(RRType -like "CNAME") -or (RRType -like "A")}   | select @{n='ZoneName';e={$zone}}, HostName, RecordType, @{n='RecordData';e={if ($_.RecordData.IPv4Address.IPAddressToString) {$_.RecordData.IPv4Address.IPAddressToString} else {$_.RecordData.NameServer.ToUpper()}}}
}
$results | Export-Csv -NoTypeInformation c:tempDNSRecords10.csv -Append 

TheIncorrigible1 提出的解决方案的替代方法是简单地发出两个查询:

@(
Get-DnsServerResourceRecord $zone -RRType CNAME
Get-DnsServerResourceRecord $zone -RRType A
) | select @{n='ZoneName';e={$zone}}, HostName, RecordType, @{n='RecordData';e={if ($_.RecordData.IPv4Address.IPAddressToString) {$_.RecordData.IPv4Address.IPAddressToString} else {$_.RecordData.NameServer.ToUpper()}}}

应使用Where-Object进行筛选,因为 cmdlet 没有自己的参数:

Get-DnsServerResourceRecord -ZoneName $zone |
Where-Object { $_.RRType -in 'CNAME', 'A' } |
Select-Object -Property @(
@{ Name       = 'ZoneName'
Expression = { $zone }
}
'HostName'
'RecordType'
@{ Name       = 'RecordData'
Expression = {
if ($_.RecordData.IPv4Address.IPAddressToString) {
$_.RecordData.IPv4Address.IPAddressToString
} else {
$_.RecordData.NameServer.ToUpper()
}
}
}
)

作为脚注,如果不使用通配符,-like与使用-eq相同。


文档:

  • Get-DnsServerResourceRecord
  • about_Comparison_Operators
  • Where-Object

最新更新