2017-04-07 65 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