Powershell如果声明不接受多个OR条件

时间:2016-10-20 02:25:51

标签: windows powershell dns

我有一个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语句,但这看起来很愚蠢。我已经在其他脚本中使用了第一个链式 - 或条件示例而没有问题。

提前致谢!

1 个答案:

答案 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