我有这个简单的脚本,只需获取路径即可验证它是否存在。
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更改它时“你提供了错误的路径!”一切正常。有人可以解释为什么会发生这种情况吗?
答案 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)