PowerShell if命令使用问题:URL含点判断条件始终触发告警
问题根因
- 代码中错误使用了大于比较运算符
-gt,该运算符的作用是判断左侧值是否大于右侧值,和你预期的「判断是否包含字符」的逻辑完全不符。 - PowerShell的字符串
-gt比较采用字典序规则,绝大多数正常输入的URL字符串字典序都大于.,因此判断条件几乎永远成立,就会出现无论输入什么都弹窗的问题。 - 该写法本身不存在语法错误,所以运行过程中不会返回任何报错信息。
修复方案
判断字符串不包含英文点号,可以任选以下一种写法替换原有判断逻辑:
方案1:使用通配符匹配运算符-notlike
$url = Read-Host 'URL' if ($url -notlike "*.") { msg * "The title does not contain(.)" }
方案2:使用正则匹配运算符-notmatch
$url = Read-Host 'URL' if ($url -notmatch '\.') { msg * "The title does not contain(.)" }
方案3:调用.NET字符串原生Contains方法
$url = Read-Host 'URL' if (-not $url.Contains('.')) { msg * "The title does not contain(.)" }
内容的提问来源于stack exchange,提问作者ahmed
相关产品推荐
相关产品推荐

