首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在使用Read-Host时,有没有办法避免换行?

在使用Read-Host时,有没有办法避免换行?
EN

Stack Overflow用户
提问于 2020-03-24 19:44:28
回答 1查看 398关注 0票数 1

我正在为我们的支持人员编写Powershell脚本,以帮助他们完成日常任务。我有一些使用Powershell的经验,但到目前为止还不是一个铁杆程序员。

我相信我的问题是相当基本的,尽管我还没有找到确切的答案。

代码语言:javascript
复制
function f_LOCAL_CheckADUser($strInitials)
{
    try
    {
        $TestVariable = Get-ADUser -Identity $strInitials -Properties *
        Write-Host " - approved" -ForegroundColor Green
    }
    catch
    {
        Write-Host " - does not exist" -ForegroundColor Red
    }
}

$Internal_Initials = Read-Host " Enter initials"; f_LOCAL_CheckADUser $Internal_Initials

发生了什么:用户输入了某人的首字母(SamAccountName),然后根据我们的广告检查该条目是否存在,这工作得很好,但是在用户输入的内容下面的行上打印了“approve”/“not exist”行。

现在看起来是这样的:

我的问题是,有没有办法避免换行符,并在用户输入输入的同一行上打印“approve”/“is not exist”?

希望它像这样显示:

我一直在广泛地寻找,实际上我找到了一些关于如何空白一行并用新行替换它的灵感,但这似乎有点夸张。所以我希望有一个简单的解决方案。

灵感:PowerShell - Overwriting line written with Write-Host感谢Boluwade Kujero发布了回复。

EN

回答 1

Stack Overflow用户

发布于 2020-03-25 20:27:23

从PowerShell 5.1开始,现在支持虚拟终端(VT)转义序列。一种形式的转义序列可以移动光标位置,只要宿主支持它。例如:

代码语言:javascript
复制
$esc = [char]27
$setCursorTop = "$esc[0;0H"

function f_LOCAL_CheckADUser($strInitials)
{
    $setCursorRight = "$esc[0;$(18 + $strInitials.length)H"
    try
    {
        $TestVariable = Get-ADUser -Identity $strInitials -Properties *
        Write-Host "${setCursorRight} - approved" -ForegroundColor Green
    }
    catch
    {
        Write-Host "${setCursorRight} - does not exist" -ForegroundColor Red
    }
}

Clear-Host
$Internal_Initials = Read-Host "${setCursorTop} Enter initials"
f_LOCAL_CheckADUser $Internal_Initials

...might会给出你想要的结果。

如果您希望保留屏幕信息,其他转义序列可能更有用。有关其他支持的VT转义序列的更多详细信息,请访问:https://docs.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences

希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60830386

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档