当我尝试运行以下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
答案 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