2015-01-15 137 views
1

我有一些代码,接受一个字符串,该if-or我需要检查,如果该字符串不包含@符号之后PowerShell的字符串不包含

Foreach($user in $allUsers){ 
    if($user.DisplayName.ToLower().Contains("example.com") -or $user.DisplayName.ToLower()) { 
    } else { 
     $output3 = $externalUsers.Rows.Add($user.DisplayName) 
    } 
} 

部分。如何检查@符号是否丢失?

+2

'.Contains()'返回一个布尔值。只需检查'!($ user.DisplayName.ToLower()。Contains(“@”))'? – Matt 2015-01-15 18:30:35

+0

完美!如果你创建这个答案,我会接受它。 – 2015-01-15 18:32:23

回答

4

有一百万的方式做到这一点,我可能会去以下由于可读性:

$user.DisplayName -inotmatch "@" 

-match运营商确实在使用上的图案左侧操作数的正则表达式匹配右侧。

i前缀来使其明确区分 nsensitive和not前缀否定表达

你也可以这样做:

-not($user.DisplayName.ToLower().Contains("@")) 
or 
!$user.DisplayName.ToLower().Contains("@") 

对于简单的通配符的文本匹配(也许你讨厌正则表达式,我知道什么?):

$user.DisplayName -notlike "*@*" 

或者,对于使用IndexOf的子字符串;

$user.DisplayName.IndexOf("@") -eq (-1)