powershell - Powershell 垂直输出
解决方案
您通常不会使用@
符号来引用变量,您几乎总是使用$
来通过变量名来引用变量的值。您也可以使用Variable:
提供程序 或Get-Variable
,但我不会在这里讨论。
如果您省略echo
,您实际上会收到以下错误消息:
The splatting operator '@' cannot be used to reference variables in an expression.
'@var' can be used only as an argument to a command. To reference variables
in an expression use '$var'.
这是因为 using@var
是一种称为Splatting的技术,它是使用数组或哈希表为命令、函数或 cmdlet 提供参数的做法。请注意,您目前不能将参数传递给方法。查看我上面链接的答案,以获取有关如何在多个用例中实际表达参数的更多信息。
至于为什么要获得垂直输出,请注意它echo
实际上是Write-Output
. Write-Output
接受位置参数,为此它将在自己的行中输出传入的每个对象。当您将字符串作为参数数组传递给函数时,它会将字符串转换为字符数组,因此有效地将@profile
to的每个字符Write-Output
作为其自己的参数传递,然后将数组的每个元素吐出。当 PowerShell 直接向控制台显示一个数组时,它会在自己的行上显示每个元素。
注意:在不同的
Write-
cmdlet 中,Write-Output
它的独特之处在于它会在自己的行上输出每个位置参数,因为它会为您传入的每个参数返回一个数组。其他Write-
cmdlet 会将数组的每个元素连接成一个以空格分隔的细绳。在 PowerShell 中使用不同的输出流时,Write-
cmdlet 会发挥作用。这是我的另一个答案,它解释了不同输出流的含义以及如何写入它们。此外,要向最终用户显示不需要在脚本或会话中进行额外编程处理的纯信息文本,请使用
Write-Host
.
这就是为什么你得到垂直输出的原因,因为@profile
它被转换为一个数组,然后作为一个字符数组转换成Write-Output
一个字符数组,并将一个数组的Write-Output
所有参数写回一个新数组的单个元素。然后 PowerShell 将显示新数组,其中每个元素在其自己的行上。
我怀疑你真正想做的是输出$profile
。您可以使用以下技术之一(请注意,echo/Write-Output
这些技术通常是多余的):
# Use the alias
echo $profile
# Use Write-Output
Write-Output $profile
# Omit Write-Output entirely
$profile
# View one of the alternative profiles by name
# CurrentUserCurrentHost is the default
# and is most often the one you are looking for
$profile.CurrentUserCurrentHost
$profile.CurrentUserAllHosts
$profile.AllUsersCurrentHost
$profile.AllUsersAllHosts
推荐阅读
- java - 从 TableView 中的按钮列中删除行 [Java]
- angularjs - 为表格列的所有值着色文本
- javascript - 所有代码路径都不返回值?
- javascript - .append 在 Jquery 中显示未定义
- liquibase - 如何防止 Liquibase 执行更改日志的修改版本?
- java - 通过属性在@size 验证注解中配置 max 和 min 参数
- c# - 使用来自数据库的真实数据创建编码数据对象以进行单元测试
- node.js - 使用 Node.js 从 MongoDB 二进制文件提供 xlsx 文件
- c++ - 为什么#include 只包含完整的声明和定义?
- excel - 如何从表格上方的单元格中创建一个范围?