Powershell如果语句不会接受多个OR条件

我有一个PowerShell脚本处理一堆DNS Alogging,我试图过滤出默认logging(即“@”,“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,那么即使是单个logging也不行。 我有一种感觉,我错过了一些简单的东西。 我已经尝试修剪string以排除尾随空格,但是这也不起作用。 string长度匹配它应该,所以没有多余的空间问题。

我想过嵌套if语句,但这似乎愚蠢。 我已经在其他脚本中使用了链接的第一个示例 – 或条件没有问题。

提前致谢!

你应该使用-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