2016-09-16 7 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

関連する問題