我有一个PowerShell脚本处理一堆DNS A记录,我试图过滤掉默认记录(即" @"," ForestDNSZones",等等)。只是用一个简单的if语句尝试这个似乎不起作用。
代码示例:
$zoneARecords = Get-DnsServerResourceRecord -ComputerName $DNSserver -ZoneName $zoneName | ?{$_.RecordType -eq "A"}
foreach ($record in $zoneARecords) {
$hostName = $record.HostName
if ($hostName -ine "gc" -or "DomainDnsZones" -or "ForestDnsZones" -or "@") {
# Do some stuff
}
}
如果我将其缩短到单一条件,它可以工作,但我希望满足所有条件:
if ($hostName -ine "gc")
如果我扩展声明以便每个人都有明确的评价,那么它就不起作用了:
if ($hostName -ine "gc" -or $hostName -ine "DomainDnsZones" -or $hostName -ine "ForestDnsZones" -or $hostName -ine "@") {
如果我只使用-ne,那么它甚至不能用于单个记录。我有一种感觉,我错过了一些简单的东西。我已经尝试修剪字符串以排除尾随空格,但这也不起作用。字符串长度与它应该匹配,因此没有多余的空间问题。
我已经考虑过嵌套if语句,但这看起来很愚蠢。我已经在其他脚本中使用了第一个链式 - 或条件示例而没有问题。
提前致谢!
答案 0 :(得分:2)
您应该使用-and
来满足所有条件,并且您必须使用第二次尝试的样式,您可以使用自己的左手操作数进行每次比较:
if ($hostName -ine "gc" -and
$hostName -ine "DomainDnsZones" -and
$hostName -ine "ForestDnsZones" -and
$hostName -ine "@"
) { }
我会将其更改为使用-notcontains
或-notin
:
if ("gc","DomainDnsZones","ForestDnsZones","@" -notcontains $hostname) { }
或
if ($hostname -notin "gc","DomainDnsZones","ForestDnsZones","@") { }
PowerShell默认情况下不区分大小写,但您也可以使用-inotcontains
或-inotin
。