改进 PowerShell 中输出的可访问性

大多数终端环境仅显示原始文本。 依赖屏幕阅读器的用户在使用大量原始文本时会面临繁琐的旁白,因为原始输出没有可访问性元数据来描述内容的格式。

可通过两种方法改进 PowerShell 中输出的可访问性:

  • 以可以在支持屏幕阅读技术的其他工具中查看的方式输出数据。
  • 通过筛选和选择所需的数据来减少终端中显示的输出量,并以更易读的格式输出文本。

在终端外部的工具中显示数据

对于大量数据,而不是输出到主机,请考虑以可以在支持屏幕读取技术的其他工具中查看的格式编写输出。 可能需要将数据保存为可在其他应用程序中打开的格式的文件。

Windows 上的 Out-GridView 命令

对于小到中等大小的输出,请使用 Out-GridView 命令。 输出使用 Windows Presentation Foundation (WPF) 以表格形式呈现,非常类似于电子表格。 GridView 控件允许对数据进行排序、筛选和搜索,从而减少需要读取的数据量。 屏幕阅读器也可访问 GridView 控件。 内置于 Windows 中的讲述人工具能够读取 GridView 详细信息,包括列名和行计数。

下面的示例展示了如何在 GridView 控件中显示服务列表。

Get-Service | Out-GridView

Out-GridView 命令仅在 Windows 上的 PowerShell 中可用。

字符分隔值 (CSV) 格式

Microsoft Excel 等电子表格应用程序支持 CSV 文件。 以下示例展示了如何将命令的输出保存到 CSV 文件。

Get-Service | Export-Csv -Path .\myFile.csv
Invoke-Item .\myFile.csv

Invoke-Item 命令在 CSV 文件的默认应用程序(通常是 Microsoft Excel)中打开该文件。

超文本标记语言 (HTML) 格式

可通过 Web 浏览器(如 Microsoft Edge)查看 HTML 文件。 以下示例展示了如何将命令的输出保存到 HTML 文件。

Get-Service | ConvertTo-Html | Out-File .\myFile.html
Invoke-Item .\myFile.html

Invoke-Item 命令将在默认 Web 浏览器中打开该文件。

减少输出量

改进输出的可访问性的一种方法是减少终端中显示的输出量。 PowerShell 有几个命令可帮助筛选和选择所需的数据。

选择和筛选数据

使用 Select-ObjectSort-Object、和 Where-Object 等命令来减少输出量,而不是返回大量数据。 以下示例会获取计算机上的服务列表。

以下每个命令都以不同的方式改进输出:

  • 如果用户无权查看某些服务,则 -ErrorAction SilentlyContinue 参数将禁止显示可能生成的错误消息。
  • Where-Object 命令通过筛选列表以仅显示正在运行并在描述中具有 event 的服务来减少返回的项数。
  • Select-Object 命令仅选择服务名称和显示名称。
  • Format-List 命令以列表格式显示输出,这样可为屏幕阅读器提供更好的旁白体验。
Get-Service -ErrorAction SilentlyContinue |
    Where-Object {$_.Status -eq 'Running' -and $_.Description -match 'event'} |
    Select-Object Name, DisplayName |
    Format-List

使用计算属性重新设置输出的格式

PowerShell 输出的 .NET 对象的默认属性名称可能冗长且令人困惑。 可使用计算属性将属性名和值更改为讲述人技术读取时更易于理解的内容。

以下示例展示了如何获取内存使用量排名靠前的五个进程,并显示进程名称和内存使用量(以兆字节为单位)。

Get-Process |
    Sort-Object WorkingSet -Descending |
    Select-Object -First 5 -Property ProcessName,
        @{n="MemoryMB"; e={'{0:N}' -f ($_.WorkingSet/1Mb)}} |
    Format-List

默认情况下,Get-ProcessWorkingSet 显示为使用的内存字节数。 如果没有格式设置,就很难理解数字的大小。 计算属性会将字节数转换为兆字节,使用逗号设置数字的格式,并将值限制为两个小数位数。

ProcessName : vmmemWSL
MemoryMB    : 1,217.69

ProcessName : Memory Compression
MemoryMB    : 780.45

ProcessName : Code
MemoryMB    : 726.43

ProcessName : OUTLOOK
MemoryMB    : 460.16

ProcessName : msedgewebview2
MemoryMB    : 428.94

其他阅读材料