2016-09-16 67 views
0

我有以下代碼,用戶必須輸入Y或N.如果它是ENTER或其他任何其他請求。該請求每次都在同一行上進行。PowerShell。清除上一個讀主機

我的問題是,我輸入一個錯誤的答案後,當我再次提示我必須寫我的以前的答案。 我試過在沒有運氣的情況下在Read-Host之前清除鍵盤緩衝區。我不想使用Clear-Host或新行,它必須位於同一行。 我的問題是,我可以在錯誤的答案後有一個簡潔的線?

function clrkb 
{ 
    while($Host.UI.RawUI.KeyAvailable) 
    { 
     $Host.UI.RawUI.ReadKey() | Out-Null 
    } 
} 
$y_temp +=1; 
do 
{ 
    clrkb 
    [Console]::SetCursorPosition(2,$y_temp);write-host Is this a service job? Y/N -f Magenta;[Console]::SetCursorPosition(29,$y_temp);$sj = read-host 
}until($sj -eq "Y" -or $sj -eq "N") 

回答

0
function clrkb{ 
    while(
     $Host.UI.RawUI.KeyAvailable){$Host.UI.RawUI.ReadKey() | Out-Null 
    } 
} 
$y_temp +=1; 
do{ 
    clrkb 
    [Console]::SetCursorPosition(2,$y_temp);write-host Is this a service job? Y/N -f Magenta;[Console]::SetCursorPosition(29,$y_temp);[Console]::Write(' ' * [Console]::WindowWidth);[Console]::SetCursorPosition(29,$y_temp);$sj = read-host 
}until($sj -eq "Y" -or $sj -eq "N") 

用空格覆蓋錯誤的答案。

也許[Console]::WindowWidth並不總是夠大,所以可以用$sj.length代替。

function clrkb{ 
    while(
     $Host.UI.RawUI.KeyAvailable){$Host.UI.RawUI.ReadKey() | Out-Null 
    } 
} 
$y_temp +=1; 
$sj=''; 
do{ 
    clrkb 
    [Console]::SetCursorPosition(2,$y_temp);write-host Is this a service job? Y/N -f Magenta;[Console]::SetCursorPosition(29,$y_temp);[Console]::Write(' ' * $sj.length);[Console]::SetCursorPosition(29,$y_temp);$sj = read-host 
}until($sj -eq "Y" -or $sj -eq "N") 
+0

'cls'清除它,但我有不止一個這樣的問題,我不想在每個問題後清除主機。它可能不是我想要的。 – xlucian

+0

使用工作空間。謝謝 – xlucian