如何从AD帐户列表中隔离用户和组?

时间:2016-06-08 08:50:19

标签: powershell active-directory powershell-v2.0

我在文本文件中有以下帐户列表 -

AccountName
Mahin\user1
Mahin\user2
Mahin\group5
user12
usert1
groupt3

这样,我有大约400个帐户(各种用户和一些群组的混合), 正如您从上面所看到的,某些帐户的格式为<Domain>\<AccountName> 还有一些只有<AccountName>

我试图找到一种方法将用户和群组与此列表分开, 如何使用PowerShell实现这一目标?

寻找类似

的内容
AccountName, IsUser, IsGroup, IsExists
Mahin\user1,1,0,1
Mahin\user2,1,0,1
Mahin\group5,0,1,1
user12,1,0,1
usert1,,,0     //-> This Account DOES NOT EXIST, so, IsUser, IsGroup and IsExists (0) can be empty or some distiguishable number
groupt3,,,0    //-> This Account DOES NOT EXIST, so, IsUser, IsGroup and IsExists (0) can be empty or some distiguishable number 

到目前为止,我知道如何使用以下脚本获取各个组的成员,但不确定上述部分。

$groups = Get-Content "C:\AD\groups.txt"
$resultsarray =@()
foreach ($group in $groups) {
    $resultsarray += Get-ADGroupMember -Id $group | select     
    samaccountname,name,@{Expression={$group};Label="Group Name"}
}
$resultsarray| Export-csv -path "C:\AD\output\GroupMembers.csv" -notypeinformation

1 个答案:

答案 0 :(得分:2)

注意:我对Active Directory Cmdlets不太熟悉,可能有更好的解决方案。

但是,我会首先检索所有用户和组,然后遍历您的文本文件并尝试查找任何用户或组:

$users = Get-ADUser -filter *
$groups = Get-ADGroup -filter *

Get-Content 'YOUR_FILE_PATH'| ForEach-Object {
    $adObject = $_ -replace '(.*)\\(.*)', '$2@$1' # fix search string

    if ($users | Where { $_.SamAccountName -eq $adObject -or 
        $_.UserPrincipalName -like "$adObject*"} )
    {
        [PSCustomObject]@{
            AccountName = $_
            IsUser = $true
            IsGroup = $false
            Exist = $true
        }
    }
    elseif ($groups | Where Name -eq $adObject)
    {
        [PSCustomObject]@{
            AccountName = $_
            IsUser = $false
            IsGroup = $true
            Exist = $true
        }
    }
    else
    {
        [PSCustomObject]@{
            AccountName = $_
            IsUser = $false
            IsGroup = $false
            Exist = $false
        }
    }   
} | Export-csv -path "C:\output\GroupMembers.csv" -notypeinformation

在我的AD上,我必须将Mahin\group5转换为group5@Mahin并搜索group5@Mahin*,这就是为什么我会替换脚本中的字符串。