0

我正在创建一个 PowerShell cmdlet,我在其中使用 CommandRuntime 将信息写入终端,并使用CommandRuntime.WriteProgress(progressRecord)在看起来像这样的叠加层中写入进度信息。我这样创建了一个 ProgressRecord

ProgressRecord progressRecord = new ProgressRecord(activityId, activity, statusDescription);

和当前的操作

progressRecord.CurrentOperation = string.Format("Name\tDate\tTime\n{0}\t{1}\t{2}", name, date, time);

最后一行是给我带来麻烦的原因。我的目标是创建一个排序表,其中名称日期和时间作为标题,由选项卡分隔,它们的相应变量在换行后显示在下方。但是,当此 cmdlet 在 PowerShell 中运行时,制表符和换行符转义不会正确显示,它们只会显示奇怪的圆圈,如符号。我也尝试过使用 `t 和 `n,因为我看到这些被描述为 PowerShell 脚本的转义,但它们只是显示为纯文本。

TL;DR 有谁知道如何在 cmdlet 中插入制表符和换行符?

4

1 回答 1

0

反引号是双引号字符串转义字符。

write-host "Hi`tKevin`n"

它们不适用于单引号。我刚刚在 write-progress 中尝试了带双引号的 `n 和 `t ,我看到了选项卡的滑稽面孔,所以我可以知道它们被正确解释了

因此,这意味着制表符和换行符在写入进度中的行为不像您希望的那样。

我确实验证了 -status 和 -currentoperation 字符串是否足够长。您可以使用包装来实现表格的外观。但这意味着您的脚本取决于托管 Powershell 的环境。

从命令行版本 PS,您可以设置这些:

$host.ui.RawUI.BufferSize.Width=80
$host.UI.RawUI.WindowSize.Width=80

但它没有任何效果。您可以运行 mode.exe:

mode con: cols=80

哪个有效。两者都不适用于 psISE。

$host.ui.rawui|gm # in powershell.exe

表明有直接访问屏幕缓冲区的方法。您可以使用这些方法将自己的脚本放在一起以显示进度。这也将是特定于 powershell 主机的解决方案。

于 2013-07-12T01:14:29.310 回答