我有一个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 。