Powershell - 可变范围表现奇怪

时间:2014-08-01 07:14:41

标签: powershell scope powershell-v3.0

我有一个小脚本可以读出AD组的成员,然后将它们与我拥有的一组用户进行比较。

为了做到这一点,我使用了几个嵌套循环,如果条件和我遇到的大问题是,我的$members变量突然失去范围和值null
我尝试将范围设置为$Global:members$Script:members,但这无效。

以下是我的源代码。任何建议,向正确的方向推进如何解决和帮助都受到高度赞赏 提前谢谢!

编辑:我将$members变量传输到Out-String这让我继续工作,但我对发生的事情非常好奇,所以如果有人知道发生了什么事,请赐教。

foreach($group in $groups)
{
    #pull the members here
    $members = $group | Get-ADGroupMember | Out-String # Out-String fixed the issue

    $members #this little print shows me everything is alright 

    #pull a needed portion of every group for further matching
    if($group.Name -match "Group-AX_User_(.*)_Productive")
    {
        $man = $Matches[1]
    }

    foreach($entry in $result)
    {
        #each entry is a csv string, pull the first value
        if($entry -match ".*,`"(.*)`"")
        {
            $tblMan = $Matches[1]
            if($tblMan -eq $man)
            {
                #alrigth our group matches with the one in the csv
                #everything is fine, members is not null
                if($entry -match "`"(.*)`",`"")
                {
                    #!!! All of the sudden, $members is null
                    #what the hell happened?

                    $m = $Matches[1]
                    if($members.Contains($m))
                    {
                        #well the current entry member is
                        #already in the group
                        $entry
                    }
                }

            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

您没有范围问题。问题是您有一个域中不存在的组。那么你就到了这一行:

$members = $group | Get-ADGroupMember

您要将$null分配给$members

将它连接到Out-String的原因是因为为成员分配了一个空字符串。你的逻辑恰好不会扼杀它。

即使你的理智检查对你说谎。

$members #this little print shows me everything is alright

它会在最后一个循环上打印成员就好了。在当前传递中,null不显示任何内容。然后你会在脚本的$members.Contains($m)深处出错。您会看到之前的输出,但会给人留下它失去范围的印象。