为什么我不能在管道中的$ matches上使用[PSCustomObject]?

时间:2014-06-30 10:03:57

标签: powershell

如果我执行以下操作

@("a", "b") |
  % { if ($_ -match "(?<x>a)") { $matches; } } | 
  % { [PSCustomObject]$_; }

我得到了

Name                           Value
----                           -----
x                              a
0                              a

但是,如果我明确定义属性:

@("a", "b") |
  % { if ($_ -match "(?<x>a)") { $matches; } } |
  % { [PSCustomObject]@{x = $_.x} }

我得到了

x
-
a

这里有什么区别,为什么第一次尝试不返回x作为属性的自定义对象?

1 个答案:

答案 0 :(得分:0)

我认为这里发生的事情就是当你这样做时:

@("a", "b") |
  % { if ($_ -match "(?<x>a)") { $matches; } } | 
  % { [PSCustomObject]$_; }

它是否在脚本块中的getenumerator()上调用$matches,并将结果发送到管道,而不是将ref发送到哈希表。

[PSCustomObject]$Matches将实际引用传递给哈希表,它按预期工作。