我正在创建一个PowerShell cmdlet,我使用CommandRuntime将信息写入终端,并使用CommandRuntime.WriteProgress(progressRecord)
在类似this的叠加层中编写进度信息。我这样创建了一个ProgressRecord
ProgressRecord progressRecord = new ProgressRecord(activityId, activity, statusDescription);
和
的当前操作progressRecord.CurrentOperation = string.Format("Name\tDate\tTime\n{0}\t{1}\t{2}", name, date, time);
最后一行是造成我麻烦的原因。我的目标是创建一个排序表,名称日期和时间作为标题由制表符分隔,并在行返回后显示在下面的相应变量。但是,在PowerShell中运行此cmdlet时,选项卡和换行符转义不会正确显示,它们只显示像符号一样的奇数圆。我也试过使用`t和`n,因为我已经看到这些描述为PowerShell脚本的转义,但它们只是显示为纯文本。
TL; DR有没有人知道如何在cmdlet中插入标签和换行符?
答案 0 :(得分:0)
反引号是双引号字符串转义字符。
write-host "Hi`tKevin`n"
它们不能在单引号内工作。我只是在写进行中试过`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主机特定的解决方案。