方法调用失败,因为System.Object []]在PowerShell中不包含方法名称indexOf

时间:2014-11-27 03:47:44

标签: powershell

当我尝试运行以下powershell脚本时,我有错误IndexOf。任何建议

$unlicensedUsers = Get-MsolUser -UnlicensedUsersOnly
foreach ($aUser in $unlicensedUsers)
{
   if ($unlicensedUsers.IndexOf($aUser) % 10 -eq 0) {
            Write-Host -ForegroundColor yellow $unlicensedUsers.IndexOf($aUser)
   }
}

错误:

  

IndexOf:方法调用失败,因为System.Object []]不包含方法名indexOf

2 个答案:

答案 0 :(得分:3)

IndexOf()List<T>类型的方法,通常不在PowerShell中使用。大多数情况下,您在foreach中使用的变量将成为对象数组,如您的示例或其他类型的集合。对象数组没有等效的方法,因此您必须拥有自己的数组索引副本:

$unlicensedUsers = Get-MsolUser -UnlicensedUsersOnly
for ($i = 0; $i -lt $unlicensedUsers.count; $i++)
{
    if ($i % 10 -eq 0) {
        Write-Host -ForegroundColor yellow $i
    }
}

答案 1 :(得分:1)

Nacht's helpful answer包含正确的解决方案,但包含不正确的解释

System.Array 实例通过IList.IndexOf()接口方法的显式实现确实具有.IndexOf()方法。

直到PSv2 ,这些 explicit 接口实现根本无法访问

PSv3 + 中,可以直接在实现类型上直接使用显式接口实现,而无需引用该接口,因此您的代码可以使用,但是Nacht的答案仍然是更好的解决方案。


也就是说,即使在PSv2中,[System.Array] 类型也具有static .IndexOf() method,可以按以下方式调用它:

[array]::IndexOf($unlicensedUsers, $aUser) # return index of $aUser in array $unlicensedUsers