如果Else语句在其他方面无法使用PowerShell

时间:2019-03-11 02:36:24

标签: powershell if-statement

我在powershell脚本中使用if 。

if ($match.Groups.Count) {
    while ($match.Success) {
        Write-Host ("Match found: {0}" -f $match.Value)
        $match = $match.NextMatch()
    }
}
else {

    Write-Host "Not Found"
}

在if端有效,但在else端,它不能返回“ Not Found”。它没有显示任何错误。

1 个答案:

答案 0 :(得分:3)

PetSerAl像以前一样无数次地在评论中提供了关键的指针:

令人惊讶的是,静态[System.Text.RegularExpressions.Match]方法(或其实例方法对应物)返回的[regex]::Match()实例即使其匹配操作,其.Groups属性中也包含1个元素没有成功 [1] ,因此,假设实例存储在$match中, $match.Groups.Count 总是返回$true

相反,像在.Success循环中所做的那样,使用while属性来确定是否找到了匹配项:

if ($match.Success) {
    while ($match.Success) {
        "Match found: {0}" -f $match.Value
        $match = $match.NextMatch()
    }
} else {
    "Not Found"
}

请注意,我删除了Write-Host调用,因为Write-Host is generally the wrong tool to use,除非意图是明确地将只写到显示,从而绕过PowerShell的输出流,从而具有将输出发送到其他命令,将其捕获到变量中或将其重定向到文件的能力。


[1] [regex]::Match('a', 'b').Groups.Count返回1,即使比赛显然没有成功。