我们正在更新电子邮件地址的SIP,我们将使用PowerShell脚本来监视AD何时更新,然后更新本地计算机。
我到了在@
符号处拆分电子邮件地址的部分,我正在查看@
符号的左侧。
例:
FirstName.LastName@someplace.com
我可以在我刚刚得到的地方正确拆分它
名字.姓氏
但是当我去检查条件是否包含.
时,我无法得到正确的 true 假。
例:
$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
?
-match
运算符执行正则表达式匹配,因此匹配.
将匹配除换行符以外的任何字符,而不仅仅是点。如果要匹配文字点,则需要对其进行转义(.
)或进行不同类型的比较,例如与-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'
}