#控制台界面
控制台程序也可以通过交互输入、进度条、颜色和光标控制获得不错的用户体验。本页介绍跨平台可用的常用手段。
#读取输入
Read-Host 从控制台读取一行文本:
> $name = Read-Host '请输入姓名'
> Write-Host "你好,$name"
需要隐藏输入(例如密码)时使用 -AsSecureString:
> $password = Read-Host '请输入密码' -AsSecureString
读取到的 SecureString 可以传给需要安全字符串的参数,但不要把它转换回明文再保存。
#显示进度
Write-Progress 在控制台顶部显示进度条,适合循环耗时较长的任务:
> 1..5 | ForEach-Object {
Write-Progress -Activity '处理文件' -Status "第 $_ 项" -PercentComplete ($_ / 5 * 100)
Start-Sleep -Milliseconds 300
}
> Write-Progress -Activity '处理文件' -Completed
-Activity是进度条的标题。-Status显示当前步骤。-PercentComplete取 0 到 100。- 任务结束后用
-Completed清除进度条。
进度输出只在支持进度显示的宿主中可见,重定向到文件时不会保留。
#访问宿主界面
$Host.UI.RawUI 提供窗口大小、标题、颜色等控制台属性:
> $Host.UI.RawUI.WindowSize
> $Host.UI.RawUI.WindowTitle = '部署工具'
> $Host.UI.RawUI.ForegroundColor = 'Green'
修改窗口大小时需要注意,某些宿主(如部分集成终端)不支持调整,可能抛出异常:
> $size = New-Object System.Management.Automation.Host.Size(120, 30)
> $Host.UI.RawUI.WindowSize = $size
#ANSI 转义序列
PowerShell 7 支持 ANSI 转义序列,用反引号转义字符 `e 表示 ESC:
> "`e[31m错误`e[0m"
> "`e[1;32m成功`e[0m"
常见格式:
| 序列 | 效果 |
|---|---|
`e[31m | 红色前景 |
`e[32m | 绿色前景 |
`e[1m | 加粗 |
`e[0m | 重置样式 |
PowerShell 7.2 及以上还可以使用 $PSStyle:
> $PSStyle.Foreground.Red + '错误' + $PSStyle.Reset
如果输出被重定向到文件,颜色控制序列可能变成可见的乱码,必要时用 $PSStyle.OutputRendering = 'PlainText' 关闭。
#Out-ConsoleGridView
Out-ConsoleGridView 来自 Microsoft.PowerShell.ConsoleGuiTools 模块,提供可在终端中交互的表格视图:
> Install-Module Microsoft.PowerShell.ConsoleGuiTools -Scope CurrentUser
> Get-Process | Out-ConsoleGridView -Title '进程'
它需要单独安装模块,并要求终端支持交互式全屏绘制。相比之下,Out-GridView 只在 Windows 上可用,跨平台场景应优先考虑 Out-ConsoleGridView。