这可能是个愚蠢的问题,但我似乎搞不明白。如何将标头添加到已存在的变量中?我有一个变量,里面有一堆字符串,我正在努力使它有一个标题,这将在以后简化脚本
$test = 1,2,3,4,5,6
结果是:
PS C:windowssystem32> $test
1
2
3
4
5
6
我想让它做的是:
PS C:windowssystem32> $test
Numbers
--------
1
2
3
4
5
6
此外,在实现每个循环时,是否可以向现有变量(运行foreach循环的变量(添加一个类似于空白的头并自动填充它?例如从原始变量:
Letters Value
------- -----
a 10
b 15
c 23
d 25
每个循环的结束:
Letters Value Numbers
------- ----- ------
a 10 1
b 15 2
c 23 3
d 25 4
这是一个超级通用的例子,但基本上我有一个带头的对象,当使用某人制作的函数时,我试图用该函数的输出填充表,问题是它返回的东西没有头,只返回输出,所以我甚至不能制作哈希表。
提前谢谢。
在您的示例中,您的变量是一个整数列表。
这就是为什么没有标题的原因。
如果您的变量是其他的东西,比如自定义对象,那么它将显示为带有标题。
要使您的示例成为自定义对象的列表:
$test = 1..6
$test | Foreach-Object { [PSCustomObject]@{Number=$_} }
您可以将其保存回一个变量:
$test = 1..6
$testObjects = $test | Foreach-Object { [PSCustomObject]@{Number=$_} }
如果一个对象具有四个或更少的特性,则它将显示为表格。
因此,您也可以,比如说,创建一个具有两个属性的对象,但仍然可以获得标头。
$test = 1..6
$test | Foreach-Object { [PSCustomObject]@{Number=$_;NumberTimesTwo = $_ * 2} }
如果你想控制任何对象在PowerShell中的显示方式,你需要了解如何编写格式化程序。我制作了一个名为EZOut的模块,它使这些模块更容易使用。
提供一个替代Start Automating的有用答案:
您可以使用具有计算属性的Select-Object
:
要将数字列表转换为具有.Number
属性的对象([pscustomobject]
实例(,其显示格式默认为您要查找的表格显示:
$objects =
1,2,3,4,5,6 | Select-Object @{ Name='Number'; Expression={ $_ } }
输出$objects
产量:
Number
------
1
2
3
4
5
6
您可以使用相同的技术向现有对象(的副本(添加附加属性,同时填充它们(构建在上面填充的$objects
变量上(:
# Values for the new property.
$nums = 6..1 # same as: 6, 5, 4, 3, 2, 1
$i = @{ val = 0 } # Helper hashtable for indexing into $nums
$objects | Select-Object *, @{ Name='NewProperty'; Expression={ $nums[$i.val++] } }
输出:
Numbers NewProperty
------- -----------
1 6
2 5
3 4
4 3
5 2
6 1
如果要先添加具有$null
值的属性,然后再填充,请使用:
$objects | Select-Object *, NewProperty