Powershell If语句-match或-contains未返回正确的条件
我们正在为电子邮件地址更新SIP,我们将使用PowerShell脚本来监视AD何时更新,然后更新本地计算机 我将在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
@
符号处拆分电子邮件地址,并查看@
符号的左侧
例如:
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'*.*.
。谢谢,我以后会尽量记住这一点。