Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PowerShell中枚举格式表项?_Powershell - Fatal编程技术网

如何在PowerShell中枚举格式表项?

如何在PowerShell中枚举格式表项?,powershell,Powershell,我有一个散列数组,我希望该数组被格式化为一个表,每个条目都被枚举,而不实际添加散列项来包含此信息。例如 $id = 0 $items = @( @{ item='a' }, @{ item='b' }, @{ item='c' }) $items | %{ new-object PSObject -Property $_ } | Format-Table @{ n=""; e={ "{0}" -f ++$id }; a="left" },item 我期待着: 项目 - ---- 1A 2

我有一个散列数组,我希望该数组被格式化为一个表,每个条目都被枚举,而不实际添加散列项来包含此信息。例如

$id = 0
$items = @( @{ item='a' }, @{ item='b' }, @{ item='c' })
$items |
 %{ new-object PSObject -Property $_ } |
  Format-Table @{ n=""; e={ "{0}" -f ++$id }; a="left" },item
我期待着:

项目
- ----
1A
2 b
3 c
但是得到:

项目
- ----
1A
1b
1 c

似乎是通过值传递
$id
。需要使用
[ref]
强制将其作为引用,它就会工作。例如:

[ref]$id = 0
$items = @( @{ item='a' }, @{ item='b' }, @{ item='c' })
$items | %{ new-object PSObject -Property $_ } |
 Format-Table @{ n=""; e={ "{0}" -f ++$id.value }; a="left" },item

这基本上是一个行号吗?这个数字有什么关联?它根本不会与您的散列进行交互,而且由于您将其作为字符串输出,因此除了行号之外,它似乎不会用于任何其他用途。@BenjaminHubbard,您是对的,先生。这就是我试图实现的目标。@Adrian的回答没有错,但实际上只是一个范围问题。因此,如果您在格式代码中显式地将变量作用域设置为脚本作用域,那么它也会起作用。@EBGreen,这很有趣,我在函数中时曾尝试过
local
作用域,但它不起作用。看起来它在表达式中是本地的。使用
global
作用域确实有效,但将变量放入全局作用域,这是我不喜欢的。我想在围绕此代码片段的函数中对其进行作用域。@EBGreen实际上是指
script
而不是
global
作用域,而是相同的结果。然后将变量放置在一个范围内,在该范围内,变量没有任何业务。不太清楚为什么我不能使用编号范围。似乎有某种障碍阻止我访问调用函数的范围。也许是因为这是回电话?