none
迷惑的Powershell的Break,谁来告诉我。 RRS feed

  • 问题

  • $arr=(1,2,3,4,5)
    $arr.ForEach({
        if ($_ -eq 3){
          break
        }
        write-host $_
      }
    )
    write-host "done."
    上面的PowerShell执行不输出done
    $arr=(1,2,3,4,5)
    foreach($a in $arr){
      if ($a -eq 3)
      {
        break
      }
      write-host $a
    }
    write-host "done."
    这样能输出done,谁能告诉我这两个写法有什么区别。
    2018年8月3日 8:01

全部回复

  • Why No Reply??

    我想了半天,自我解释一下。数组方法中使用break,相当于阻止了后续代码的执行。

    而循环中的break只是退出循环。不知道正确与否。

    2018年8月6日 1:06
  • 你好,

    第一个脚本是不是前面运行的时候就有代码报错了?所以导致了最后一行代码没执行?

    Regards,

    Emi


    Please remember to mark the replies as answers if they helped. If you have feedback for TechNet Subscriber Support, contact tnsf@microsoft.com.


    Click here to learn more. Visit the dedicated forum to share, explore and talk to experts about Microsoft Teams.

    2018年8月6日 1:58
    版主
  • 前面的输出了1,2;后面的输出了1,2,done。前面那个是数组的foreach方法,后面的是foreach-object的cmdlet。这个也是我百度后个人理解的,但没有官方的文档查证。
    2018年8月7日 0:51
  • 你好,

    你的这个问题,需要专业的PowerShell论坛用户来帮助你解答,请讲文件发到PowerShell论坛:

    https://social.technet.microsoft.com/Forums/office/en-US/home?forum=winserverpowershell

    该论坛是专门解决PowerShell问题的论坛,你可以从中得到更专业的技术支持。但是这是一个英文论坛,所以请在发帖的时候使用英文。

    如果有关于非开发类Office的问题,你以后也可以发帖到我们论坛,我们很乐意帮助你解决。

    Regards,

    Emi


    Please remember to mark the replies as answers if they helped. If you have feedback for TechNet Subscriber Support, contact tnsf@microsoft.com.


    Click here to learn more. Visit the dedicated forum to share, explore and talk to experts about Microsoft Teams.

    2018年8月8日 0:53
    版主