PowerShell:找不到IndexOf的重载和参数count:2

时间:2015-02-02 18:51:26

标签: powershell-remoting

我正在尝试使用我编写的脚本的一部分来返回本地组列表,指定用户可能是远程服务器的一部分,因此可以从所述本地组中快速删除它们。一切似乎工作正常,直到一个人可能成为一部分的团体低于两个。当只有一个组时,我收到以下错误:

Cannot find an overload for "IndexOf" and the argument count: "2".
At line:177 char:30
+                 [string]([array]::IndexOf <<<< ($localGroups, $_)+1) + ". " + $_
    + CategoryInfo          : NotSpecified: (:) [], MethodException
    + FullyQualifiedErrorId : MethodCountCouldNotFindBest

以下是我为这个特定脚本编写的函数......

此函数将返回给定用户所属的组列表:

function Get-LocalGroupAccess
{
    [CmdletBinding()]
    Param(
        [Parameter(Mandatory=$true)]
        [string]$fqdn,

        [Parameter(Mandatory=$true)]
        [string]$userName

    )
    Process
    {
        $serverPath = [ADSI]"WinNT://$fqdn,computer"
        $serverPath.PSBase.Children | where {$_.PSBase.SchemaClassName -eq 'group'} | foreach {
            $lGroup = [ADSI]$_.PSBase.Path
            $lGroup.PSBase.Invoke("Members") | foreach {
                $lMember = $_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null).Replace("WinNT://","")
                if ($lMember -like "$userName")
                {
                    $localAccess += @($lGroup.Name)
                }
            }
        }  
        return($localAccess)
    }
}

此功能设置用户对象(我不确定这是技术术语):

function Set-UserObj($userDomain, $userName)
{
    $userObj = [ADSI]"WinNT://$userDomain/$userName"

    return ($userObj)
}

此函数设置FQDN(检查它是否可ping):

function Set-FQDN($fqdn)
{
    do{
        $fqdn = Read-Host "Enter the FQDN"
    } while (-not(Test-Connection $fqdn -quiet))

    return($fqdn)
}

此函数将选择要删除给定用户的组,将其更改为数组中的适当位置,然后返回组:

function Set-LocalGroup($localGroups, $selectGroup)
{
    $selectGroup = Read-Host "What group would you like to add $userDomain/$userName to?"

    $selectGroup = [int]$selectGroup -= 1
    $setGroup = $localGroups[$selectGroup]

    return($setGroup)
}

此函数设置Group对象(不确定这是否为技术术语):

function Set-GroupObj($fqdn, $group)
{
    $groupObj = [ADSI]"WinNT://$fqdn/$group"

    return($groupObj)
}

此功能从选定的组中删除给定用户:

function Remove-UserAccess ($gObj, $uObj)
{
    $gObj.PSBase.Invoke("Remove",$uObj.PSBase.Path)
}

在脚本中请求用户名,域和FQDN。提供这些后,脚本将返回给定用户所属的组列表。一切正常,直到用户成为一个组的一部分。一旦发生这种情况,就会抛出我上面粘贴的错误。

请注意,这是我第一次发帖,我不确定这里需要哪些信息。我希望我提供了正确和正确的信息。如果没有,请告诉我你是否还需要其他东西。

谢谢!

1 个答案:

答案 0 :(得分:1)

我回去看着我正在创建的变量$ localGroups中的区别(如果有的话)(我使用了Get-Member -InputObject $ localGroups)。我注意到,当$ localGroups只有一个项目时,它是一个System.String类型,但当它有多个项目时,它是一个System.Object []类型。我决定做以下事情,它解决了我遇到的问题:

$localGroups = @(Get-LocalGroupAccess $fqdn $userName)

上一个代码:

$localGroups = Get-LocalGroupAccess $fqdn $userName

一切正常,因为我强制变量为静态类型,而不是允许它创建它想要的任何类型。