2017-04-07 89 views
0

我想弄清楚我需要继续提示用户输入有效的UNC路径的循环。我将它设置为测试路径并输出到控制台,路径无效。但是,之后,它又回到了我的选择提示。我想要它,请求用户在进入下一步之前输入另一条有效路径。这是我的循环:Powershell:修复我的循环逻辑

do{ 
    Write-Host ""      
    $pathPrompt = Write-Host "Please enter path to file/folder:" -ForegroundColor Cyan; 
    $path  = Read-Host; 
    $test  = Test-Path $path 

    if($test -eq $false){ 
     Write-Host "ERROR! Invalid Path!" -ForegroundColor Red 
    } 
}until($test -eq $true){ 
    Write-Host "" 
    Write-Host "Getting ACL on"$path -ForegroundColor Green 
    Get-NTFSAccess -Path $path 
} 

我在想什么或不在这里做什么?

+0

你写遗嘱循环什么,直到它得到一个有效的路径,然后获取路径,此时它会退出的NTFS访问信息。如果你想重新开始并寻求新的路径,你应该考虑将代码封装在一个循环中的可能性。我应该注意到,这里的代码强烈表明这是一个家庭作业问题,并且要求其他人为你做功课确实被认为是不好的形式。 –

+0

如果不是作业,我向你保证。我正在研究一种可以获得NTFS烫发的工具,然后通过选择应用新的或删除旧的烫发。 – T4RH33L

+0

您不需要在条件中添加$ test。直接使用'(Test-path $ path)'然后执行其他操作 –

回答

1

听起来像你想重用你的验证测试。你可以把它放在一个函数重用:

Function Get-ValidPath { 
    do { 
     Write-Host "`r`nPlease enter path to file/folder:" -ForegroundColor Cyan 
     $path = Read-Host 
     $test = Test-Path $path 

     if ($test -eq $false) { 
      Write-Host "ERROR! Invalid Path!" -ForegroundColor Red 
     } 
    } until ($test -eq $true) 
    $path 
} 
$validatedpath1 = Get-ValidPath 
Write-Host "`r`nGetting ACL on $validatedpath1" -ForegroundColor Green 
Get-NTFSAccess -Path $validatedpath1 
$validatedpath2 = Get-ValidPath 
+0

我仍然得到相同的结果。当我输入一个无效路径时,我收到错误消息,并返回到我的提示选项,而不是提示输入路径。 – T4RH33L

+0

@ T4RH33L所以当它失败时,你不希望它写“请输入路径..”只是“错误...”?答案更新为只写第一次。 – BenH

+0

当它失败时,我想让它说“错误!无效路径!”然后重新提示用户“请输入文件/文件夹的路径:”,直到获得有效路径。 – T4RH33L