【问题标题】:Powershell Do Until variable contains string twicePowershell 直到变量包含字符串两次
【发布时间】:2020-05-27 19:50:11
【问题描述】:

我正在尝试使用 do 循环运行两次 tracert 命令。我只是通过计算“跟踪完成”的次数来做到这一点。显示。所以在下面的脚本中,我希望循环一直运行,直到变量包含“跟踪完成”。 2次。但显然它不起作用。

do {
         $2+= tracert $ip 

   } until ( $2.Contains("Trace complete.") -ge 2) 

 #(  $2 | select-string "Trace complete").length -eq 2 

我也尝试了 select string 方法,但在 Trace Complete 出现两次之前,这两种方法都不会导致循环结束。有什么帮助吗?

编辑 1:

我还想将 tracert 的输出存储在一个变量中,以便我可以查看它

【问题讨论】:

    标签: powershell


    【解决方案1】:

    tracert 命令返回一个字符串数组,因此Contains() 函数在这里不起作用。

    这是一个解决方案,每次tracert 命令包含字符串跟踪完成通过使用正则表达式。如果 joined 字符串不包含该术语,我将变量增加 0

    最后,当$count 变量大于等于 2 时,until 条件将停止。

    $count = 0
    $output = do { 
        $output = tracert 127.0.0.1
        if (($output -join '' -match 'Trace complete\.')) {
            $output # outputs the tracert result
            $count++
        }
    
    } until ( $count -ge 2) 
    
    $output
    

    【讨论】:

    • 您好,谢谢您的回答。抱歉,我想我没有澄清我的要求,但我也想看看 tracert 的输出。可以将其添加到您的脚本中吗?
    • 我更改了代码。它现在输出您想要的结果。
    • 一旦脚本执行完毕,它会显示 2 个正确的 tracert 结果,但是当我检查 $output 变量时,我只看到一次 tracert 结果而不是两次?基本上我试图运行两次tracert并邮寄输出。
    • 我又改了代码。这次do 循环的输出被捕获并存储到外部$output 变量中,您可以重复使用...
    • 这正是我想要的。太感谢了!!! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-27
    相关资源
    最近更新 更多