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 无法在foreach循环中调用数组头_Powershell - Fatal编程技术网

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

Powershell 无法在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

$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)不应该这样吗?)现在没那么重要了,非常感谢。