将Header添加到变量中



这可能是个愚蠢的问题,但我似乎搞不明白。如何将标头添加到已存在的变量中?我有一个变量,里面有一堆字符串,我正在努力使它有一个标题,这将在以后简化脚本

$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

最新更新