无法在foreach循环中调用数组头

时间:2016-11-30 03:34:52

标签: powershell

好的 - 这是一个非常奇怪的问题 - 它可能有一个非常愚蠢的解决方案。

但是我导入了一个csv

$csv = import-csv c:\users\hello.csv

然后我有一个单词数组,我想用它来搜索csv - 如果在csv中有匹配 - 填充csv中的相邻列。

这是阵列:

$newhandles
hi
hello

现在 - 如果我在其中运行带有if语句的foreach循环 - 它无法识别其中一个标题。

foreach ($newhandle in $newhandles) 
{if ($csv.name -eq $newhandle) {$csv.redundant = $newhandle}}

然而它给了我这个错误:

The property 'redundant' cannot be found on this object. Verify that the property exists 
and can be set.
At line:1 char:69
+ ... andles) {if ($csv.name -eq $newhandle) {$csv.redundant = $newhandle}}
+                                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : PropertyAssignmentException

我知道该属性存在 - 因为如果我直接调用它 - 它会显示三个空插槽 - 如果我直接调用它 - 该元素将填充。比如

> $csv[0].redundant = 'hi'

> $csv[0]


name        : hi
description : don't settle
system      : sight
redundant   : hi
tags        : 

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

尝试使用此foreach循环:

foreach ($rec in $csv){
if($newhandles -contains $rec.name){
$rec.redundant = $rec.name

}

}

如果你检查($ csv.redundant).GetType(),你可以看到它返回一个数组而不是你想要的属性,但当你为$ csv [0] .redundant赋值时,你正在访问确切的属性以及它在您手动测试时的工作原理

答案 1 :(得分:0)

试试这个

import-csv "c:\users\hello.csv" | select * , @{N="redundant";E={if ($newhandles -contains $_.Name) {$_.Name} else {$null}}} -ExcludeProperty redundant