2017-06-22 43 views
2

所以我有我的foreach循环的问题,我不知道我做错了什么。Powershell:Foreach无法正常工作?

以下是我的代码示例:

$objectarray ##(So this variable contains a list of lists ie name + address) ## 

Foreach ($object in $objectarray.name){ 


$objectid = $objectarray.Where({$_.name -eq "$object"}).id 
$objectaddress = $objectarray.Where({$_.name -eq "$object"}).address 

$objectprint = "$objectid" + ": " + "$objectaddress" 

$objectprint 
return 0 

} 

现在的问题是$ objectarray其内部具有每个多个列表,其姓名,身份证,住址等

但它只能打印第一个,我只获得第一个0作为回报...尽管事实上有很多人

回答

1

我认为它是因为你在for循环中返回0。应该放在循环之外。

Foreach ($object in $objectarray.name){ 

    $objectid = $objectarray.Where({$_.name -eq "$object"}).id 
    $objectaddress = $objectarray.Where({$_.name -eq "$object"}).address 

    $objectprint = "$objectid" + ": " + "$objectaddress" 

    $objectprint 
} 
return 0 
+0

不,不工作,一般情况下它不有所作为要么。同样每个对象的值都填充了数据,没有任何数据是空的或空的,这就是为什么这么令人费解的原因 – AdilZ

+0

你正在返回0 –

+0

@ A.Zia对不起,我更新了答案(我相信这是解决方案) –

4

你正在用奇怪的方式解析你的对象。你为什么不用管道让自己更容易一点?

$ObjectArray | % { "$($_.id): $($_.address)"; 0 } 

一切都将被投入到成功/输出管道这样的,可以被捕获(例如,如果你把$var =表达之前)

+0

,因为解析的ACTUAL $ objectarray是MASSIVE,有很多许多事情需要解析。 ...和管道有内存优化问题...非常感谢您的建议,虽然 – AdilZ

+1

而不是'$ ObjectArray | %'你可以使用'ForEach($ ObjectArray中的$ o)'。 – TheIncorrigible1