找不到方法“op_addition”

时间:2016-07-11 11:20:23

标签: powershell collections

我想在变量中添加特定的数据选择,如下所示:

$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”

如何将我的选择保存在单独的变量中?

1 个答案:

答案 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'}