Powershell 无法在foreach循环中调用数组头
好吧,这是一个非常奇怪的问题,它可能有一个非常愚蠢的解决方案 但是我导入了一个csvPowershell 无法在foreach循环中调用数组头,powershell,Powershell,好吧,这是一个非常奇怪的问题,它可能有一个非常愚蠢的解决方案 但是我导入了一个csv $csv = import-csv c:\users\hello.csv 然后我有一个单词数组,我想用它在csv中搜索-如果csv中有匹配项-填充csv中的相邻列 以下是阵列: $newhandles hi hello 现在,如果我运行一个foreach循环,其中包含一个if语句,那么它不会识别其中一个头 foreach ($newhandle in $newhandles) {if ($csv.name
$csv = import-csv c:\users\hello.csv
然后我有一个单词数组,我想用它在csv中搜索-如果csv中有匹配项-填充csv中的相邻列
以下是阵列:
$newhandles
hi
hello
现在,如果我运行一个foreach循环,其中包含一个if语句,那么它不会识别其中一个头
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 :
有什么想法吗?尝试使用这个foreach循环:
foreach ($rec in $csv){
if($newhandles -contains $rec.name){
$rec.redundant = $rec.name
}
}
如果选中($csv.redundant).GetType(),您可以看到它返回的是一个数组,而不是您想要的属性,但是当您为$csv[0]赋值时。redundant您正在访问确切的属性,这就是为什么在手动测试时它可以工作的原因
import-csv "c:\users\hello.csv" | select * , @{N="redundant";E={if ($newhandles -contains $_.Name) {$_.Name} else {$null}}} -ExcludeProperty redundant
手动检查时,如果只引用整个$csv.Name,则添加[0],但在中。当您手动输入$csv.Name时会发生什么情况?啊-因此您需要对实际csv执行foreach操作,将其分解为每个记录,以便能够访问其每个属性。为什么$newhandles会出现在-contains$rec.name前面?如果($rec.name-包含$newhandles)不应该这样吗?)现在没那么重要了,非常感谢。