Powershell $line.StartsWith具有多个选项

Powershell $line.StartsWith具有多个选项,powershell,powershell-3.0,Powershell,Powershell 3.0,我希望能够在一行中扫描两个单独的值,我该怎么做 $file = Get-Content "D:\path\tmp\certlist.txt" foreach ($line in $file) { if ($line.StartsWith("snl") or $line.StartsWith("HSM1")) { $baseKey = "app.swift.snl." $profileName = $line.Substring(0,13).Tri

我希望能够在一行中扫描两个单独的值,我该怎么做

$file = Get-Content "D:\path\tmp\certlist.txt"

foreach ($line in $file)
{
    if ($line.StartsWith("snl") or $line.StartsWith("HSM1"))
    {
        $baseKey = "app.swift.snl."
        $profileName = $line.Substring(0,13).TrimEnd()
        $certType = $line.Substring(29,10).TrimEnd()
        $renewalDate = Get_Unixtime $line.Substring(42,11).TrimEnd()
        $expiryDate = Get_Unixtime $line.Substring(58,11).TrimEnd()
        Send_Zabbix ($baseKey + $profileName + "." + $certType + ".renewaldate") $renewalDate
        Send_Zabbix ($baseKey + $profileName + "." + $certType + ".expirydate") $expiryDate
    }
}

上述方法不起作用。它给了我一个意想不到的标记。

显然,我所需要的只是一个“-”

if ($line.StartsWith("snl") -or $line.StartsWith("HSM1"))

显然我只需要一个“-”

if ($line.StartsWith("snl") -or $line.StartsWith("HSM1"))

为了检查变量是否以几个值中的一个值开头,正则表达式可能比菊花链
StartsWith()调用更好

if ($line -cmatch '^(snl|HSM1)')
{
    ...
}

^
匹配字符串的开头,
(snl | HSM1)
匹配
snl
HSM1
<代码>-cmatch
进行区分大小写的匹配。如果不需要区分大小写,请使用
-imatch
或仅使用
-match
检查变量是否以几个值之一开头,正则表达式可能比菊花链
StartsWith()
调用更好

if ($line -cmatch '^(snl|HSM1)')
{
    ...
}

^
匹配字符串的开头,
(snl | HSM1)
匹配
snl
HSM1
<代码>-cmatch进行区分大小写的匹配。如果您不需要区分大小写,请使用
-imatch
或仅使用
-match

是否使用Powershell ISE?它的突出显示将让您了解此类错误的位置:)您正在使用Powershell ISE吗?它的突出显示将让您了解此类错误的位置:)