我有一个脚本来调用API端点,以便从应用程序的层次结构中检索数据。
此层次结构有几个级别:校园,建筑,楼层为了使它对用户友好,我编写了一个脚本来编译一个表,该表将被查询的层次结构级别的名称放入一个数组中,并将一个数字添加到一个新数组列(基本上是数组索引,使其可读)中的条目中
脚本使用Format-Table
命令将表写入终端,然后使用Read-Host
命令要求用户根据提供的提示提供输入。
如果我调用这个脚本,并将它赋给一个变量(以使输出操作更容易),提示符不会显示,因此您可以盲目地提供值,而不会实现您想要的。
例如,如果我直接调用脚本,我会在终端窗口中得到:
.\My-script-here.ps1
Number name
------ ----
1 Campus 1
2 Campus 2
Enter number of campus:
如果我把它赋值给一个变量,我会得到:
$variable = .\My-script-here.ps1
Enter number of campus:
有没有一种方法可以让编译后的表在将脚本赋值给变量时出现?当前脚本中的行是$Table | Format-Table -Property Number,Name
,我尝试将其通过管道传输到Write-Output
,但这没有什么区别
1条答案
按热度按时间von4xj4u1#
如果你想打印一个格式正确的表格到 display only,使用
Out-Host
:一个简单的例子:
上面的命令将格式化的表格直接打印到主机显示器上(仅),因此不会被
$variable = …
赋值捕获,并且 * 无条件地 * 打印-仅捕获Read-Host
响应。如果你想 * 也 * 输出表 * 作为数据 *,以便它被捕获在
$variable
中,PowerShell (Core) 7+启用了一个方便的Tee-Object
解决方案,使用CON
(在Windows上)//dev/tty
(在Unix上)作为-FilePath
参数(代表控制台/终端设备):现在,该表将打印 * 和 *,并在
$variable
中捕获(沿着Read-Host
响应)。然而,该解决方案依赖于数据触发 implicit
Format-Table
。例如,如果你的数据默认以 list 格式显示,你需要一个 explicit
Format-Table
调用,这会使事情变得复杂:Format-Table
发出的 * 格式化指令 ,否则你必须 * 避免 * 将其用于输出 * 数据 * -Format-*
cmdlet应该只用于生成 * 显示 * 输出,而不是用于编程处理的 * 数据-有关背景信息,请参阅this answer。不幸的是,Windows PowerShell 不支持
-FilePath CON
,因此您需要首先在变量中收集输出,然后在两个单独的操作中输出并将其传递给Out-Host
,或者使用this answer中显示的Tee-Host
便利函数,该函数具有 * 流式传输 * 其输出的额外优势。Format-Table
解决方案(非流媒体):