我正在为我们的支持人员编写Powershell脚本,以帮助他们完成日常任务。我有一些使用Powershell的经验,但到目前为止还不是一个铁杆程序员。
我相信我的问题是相当基本的,尽管我还没有找到确切的答案。
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发布了回复。
发布于 2020-03-25 20:27:23
从PowerShell 5.1开始,现在支持虚拟终端(VT)转义序列。一种形式的转义序列可以移动光标位置,只要宿主支持它。例如:
$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
希望这能有所帮助。
https://stackoverflow.com/questions/60830386
复制相似问题