我们正在更新我们的SIP电子邮件地址,我们将使用PowerShell脚本监控AD何时更新,然后更新本地计算机。
我在@
符号处拆分电子邮件地址的部分,我正在查看@
符号的左侧。
示例:
FirstName.LastName@someplace.com
我可以在我得到的地方正确拆分
FirstName.LastName
但当我去检查条件是否包含.
时,我无法得到正确的错误。
示例:
$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,因为没有.
。
我做错了什么?我尝试在-contains
语句中使用if
,但这也不起作用。
有没有办法尝试检查-match
的{{1}}?
答案 0 :(得分:3)
-match
operator匹配regular expression,因此匹配.
将匹配除换行符之外的任何字符,而不仅仅是点。如果要匹配文字点,则需要将其转义(\.
)或进行其他类型的比较,例如与-like
运算符(-like '*.*'
)的通配符匹配或使用字符串对象的Contains()
方法。
-contains
运算符检查数组是否包含特定元素。为了能够使用该运算符,您需要将字符串转换为字符数组:
[char[]]$splitname -contains '.'
但是,我不建议这样做。其他方法更方便。
修改后的代码:
$sipaddress = "FirstName.LastName@someplace.com"
$localpart, $domain = $sipaddress -split '@'
if ($localpart.Contains('.')) {
Write-Host 'True'
} else {
Write-Host 'False'
}