我想在变量中添加特定的数据选择,如下所示:
$a = Get-Service | select -First 10 | ? Name -Like "App*"
$collection = $null
foreach($item in $a){
if($item.Status -like "Running"){
$collection = $collection + $item
}
}
尝试运行时出现错误,如:
找不到方法“op_addition”
如何将我的选择保存在单独的变量中?
答案 0 :(得分:2)
首先,$collection
为$null
。
然后,在第一次循环迭代后,$collection
是一个ServiceController
个对象,因为$null + $object
只是$object
。
在第二次循环迭代中,它失败了,因为ServiceController
没有+
的任何重载,就像错误通知你一样。
您需要为$collection
声明@()
一个实际的集合(您可以使用+
数组子表达式运算符)来按照预期的方式工作:
$a = Get-Service | select -First 10 | ? Name -Like "App*"
$collection = @()
foreach($item in $a){
if($item.Status -like "Running"){
$collection = $collection + $item
}
}
或者,将循环中的所有输出直接分配给$collection
:
$a = Get-Service | select -First 10 | ? Name -Like "App*"
$collection = foreach($item in $a){
if($item.Status -like "Running"){
$item
}
}
当然可以通过管道中的单个Where-Object
语句简化:
$collection = Get-Service App* |Where-Object {$_.Status -eq 'Running'}