Powershell If语句-match或-contains未返回正确的条件

Powershell If语句-match或-contains未返回正确的条件,powershell,if-statement,match,conditional-statements,statements,Powershell,If Statement,Match,Conditional Statements,Statements,我们正在为电子邮件地址更新SIP,我们将使用PowerShell脚本来监视AD何时更新,然后更新本地计算机 我将在@符号处拆分电子邮件地址,并查看@符号的左侧 例如: FirstName.LastName@someplace.com $sipaddress = "FirstName.LastName@someplace.com" $splitname = $sipaddress.Split("@")[0] # at this point, $splitname varible will con

我们正在为电子邮件地址更新SIP,我们将使用PowerShell脚本来监视AD何时更新,然后更新本地计算机

我将在
@
符号处拆分电子邮件地址,并查看
@
符号的左侧

例如:

FirstName.LastName@someplace.com
$sipaddress = "FirstName.LastName@someplace.com"
$splitname = $sipaddress.Split("@")[0]

# at this point, $splitname varible will contain "FirstName.LastName"

if ($splitname -match '.') {
  Write-Host "TRUE"
} else {
  Write-Host "False"
}

# this returns TRUE which is perfect
但是,如果我将变量更改为这样进行测试

$sipaddress = "FirstNameLastName@someplace.com"
$splitname
变量将包含
FirstNameLastName
,如果不正确,它仍然返回TRUE。它应该返回false,因为没有

我做错了什么?我试图在
if
语句中使用
-contains
,但这也不起作用

是否有办法尝试检查
-match

进行匹配,因此匹配
将匹配除换行符以外的任何字符,而不仅仅是点。如果要匹配文字点,则需要对其进行转义(
\.
)或执行不同类型的比较,例如,使用类似
-like
运算符(
-like'*.*.
)或使用string对象的
Contains()
方法进行通配符匹配

-contains
运算符检查数组是否包含特定元素。要使用该运算符,您需要将字符串转换为字符数组:

[char[]]$splitname -contains '.'
不过,我不建议这样做。其他方法更方便

修改代码:

$sipaddress = "FirstName.LastName@someplace.com"

$localpart, $domain = $sipaddress -split '@'

if ($localpart.Contains('.')) {
  Write-Host 'True'
} else {
  Write-Host 'False'
}
不匹配,因此匹配
将匹配除换行符以外的任何字符,而不仅仅是点。如果要匹配文字点,则需要对其进行转义(
\.
)或执行不同类型的比较,例如,使用类似
-like
运算符(
-like'*.*.
)或使用string对象的
Contains()
方法进行通配符匹配

-contains
运算符检查数组是否包含特定元素。要使用该运算符,您需要将字符串转换为字符数组:

[char[]]$splitname -contains '.'
不过,我不建议这样做。其他方法更方便

修改代码:

$sipaddress = "FirstName.LastName@someplace.com"

$localpart, $domain = $sipaddress -split '@'

if ($localpart.Contains('.')) {
  Write-Host 'True'
} else {
  Write-Host 'False'
}

-match'\.
-like'*.'
。谢谢,我以后会尽量记住这一点。
-match'\.
-like'*.*.
。谢谢,我以后会尽量记住这一点。