Powershell:消息框崩溃同时循环

时间:2018-04-26 12:20:58

标签: powershell

我有这个简单的脚本,只需获取路径即可验证它是否存在。

function getPaths(){

        $pathFromCMS = Read-Host "Please set the path for the copy files"
        $pathToCMS = Read-Host "Please set the path to your CMS application"

        if ((Test-Path -Path $pathFromCMS ) -and (Test-Path -Path $pathToCMS )){
            Return $True
        }
        else{
            [System.Windows.MessageBox]::Show('You have provided wrong path!')
            Return $False
        }
}
do{}while (! (getPaths) -eq $True)

echo "Hello there"

问题在于MessageBox :: Show函数。它以某种方式使循环在进入错误路径时停止。当我为Write-Host更改它时“你提供了错误的路径!”一切正常。有人可以解释为什么会发生这种情况吗?

3 个答案:

答案 0 :(得分:3)

[System.Windows.MessageBox]::Show方法返回一个值,这会破坏你的循环条件。您可以通过管道到Out-Null

来抑制返回值
[System.Windows.MessageBox]::Show('You have provided wrong path!') | Out-Null

答案 1 :(得分:0)

MessageBox上可以有不同的按钮(例如YES / NO),因此可以同步显示,以便您捕获用户点击的内容。例如:

$preference = [System.Windows.MessageBox]::Show('Do you like MessageBoxes?', "MessageBox Preference", [System.Windows.MessageBoxButton]::YesNo)

在你的情况下,即使你只想要“好”,它仍然是一个好主意等待,因为用户总是需要手动关闭它,不像{{1}的输出}。

答案 2 :(得分:-1)

这是因为在满足条件时,do {}块中没有任何内容可以执行。

你想要的是:

do{(getPaths)}while ((getPaths) -ne $True)