电源外壳。清除上一个读取主机

时间:2016-09-16 08:01:45

标签: powershell clear

我有以下代码,用户必须输入Y或N.如果它是ENTER或其他任何它再次请求。该请求每次都在同一行上。

我的问题是,在我输入错误的答案后,当我再次提示时,我必须写下我以前的答案。 我已经尝试在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")

1 个答案:

答案 0 :(得分: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")