好的 - 这是一个非常奇怪的问题 - 它可能有一个非常愚蠢的解决方案。
但是我导入了一个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 :
有什么想法吗?
答案 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