我有一个小脚本可以读出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
}
}
}
}
}
}
答案 0 :(得分:0)
您没有范围问题。问题是您有一个域中不存在的组。那么你就到了这一行:
$members = $group | Get-ADGroupMember
您要将$null
分配给$members
。
将它连接到Out-String的原因是因为为成员分配了一个空字符串。你的逻辑恰好不会扼杀它。
即使你的理智检查对你说谎。
$members #this little print shows me everything is alright
它会在最后一个循环上打印成员就好了。在当前传递中,null不显示任何内容。然后你会在脚本的$members.Contains($m)
深处出错。您会看到之前的输出,但会给人留下它失去范围的印象。