none
PowerShell如何导出AD中所有用户对应的组 RRS feed

  • 问题

  • 因为目前由于人员变动一些组的对应关系已经改变,所以要导出一个完整的用户和它所在组的列表。用过网上提供的一些导出组的PowerShell,但就是格式太凌乱了,而且导出的都带有DN路径。如果能直接导出这个用户,后门在跟这个用户率属于的组就好了,但我不知道命令要怎么写,请各位帮忙!

    welcome to reply

    2014年12月21日 16:26

答案

  • 你好!

    请参考以下的Powershell脚本并运行在DC上来导出domain里的Groups和users:

    function Get-GroupHierarchy ($searchGroup)
    {
    $groupMember = get-adgroupmember $searchGroup | sort-object objectClass -descending
       foreach ($member in $groupMember)
        {
    	if ($member.objectclass -eq "user")
    	{
    	$userinfo = get-aduser $member.samaccountname -Properties *
    	}
    	if ($member.objectclass -eq "group")
    	{
    	$groupinfo = get-adgroup $member}
    		$array = @()
    		$Properties = @{"Group Name"=$groupinfo.name;Name=$member.Name;SamAccountName=$member.samaccountname;"Canonical Name"=$Userinfo.canonicalname}
    		$Newobject = New-Object  PSObject -Property  $Properties
    		$Array +=$Newobject
    		$Array | Select-Object "Group Name",Name,SamAccountName,"Canonical Name" 
    
        if ($member.ObjectClass -eq "group")
            {Get-GroupHierarchy $member.name}}
    } 
    
    
    
    Import-Module ActiveDirectory
    $ADGroups = Get-AdGroup -Filter * -Properties *
    foreach ($AdGroup in $AdGroups)
    {
    Get-GroupHierarchy $Adgroup.Name
    }

    Best Regards,

    Anna Wang


    Please remember to mark the replies as answers if they help and unmark them if they provide no help. If you have feedback for TechNet Support, contact tnmff@microsoft.com


    2014年12月22日 3:18
    版主

全部回复

  • 你好!

    请参考以下的Powershell脚本并运行在DC上来导出domain里的Groups和users:

    function Get-GroupHierarchy ($searchGroup)
    {
    $groupMember = get-adgroupmember $searchGroup | sort-object objectClass -descending
       foreach ($member in $groupMember)
        {
    	if ($member.objectclass -eq "user")
    	{
    	$userinfo = get-aduser $member.samaccountname -Properties *
    	}
    	if ($member.objectclass -eq "group")
    	{
    	$groupinfo = get-adgroup $member}
    		$array = @()
    		$Properties = @{"Group Name"=$groupinfo.name;Name=$member.Name;SamAccountName=$member.samaccountname;"Canonical Name"=$Userinfo.canonicalname}
    		$Newobject = New-Object  PSObject -Property  $Properties
    		$Array +=$Newobject
    		$Array | Select-Object "Group Name",Name,SamAccountName,"Canonical Name" 
    
        if ($member.ObjectClass -eq "group")
            {Get-GroupHierarchy $member.name}}
    } 
    
    
    
    Import-Module ActiveDirectory
    $ADGroups = Get-AdGroup -Filter * -Properties *
    foreach ($AdGroup in $AdGroups)
    {
    Get-GroupHierarchy $Adgroup.Name
    }

    Best Regards,

    Anna Wang


    Please remember to mark the replies as answers if they help and unmark them if they provide no help. If you have feedback for TechNet Support, contact tnmff@microsoft.com


    2014年12月22日 3:18
    版主
  • 谢谢,不好意思现在才回复您。

    脚本可以正常运行,PowerShell好厉害。然后我需要在这脚本上再加上Office属性,而“Canonical Name”不怎么需要,所以我把“Canonical Name”属性代替成了Office,做法是: “Canonical Name”=$UserInfo.canonicalname  替换成 Office=$UserInfo.Office;

    另外还想请教下, 在 “Canonical Name”=$Userinfo.canonicalname 中"Canonical Name"对应的Userinfo对象是如何知道的。

    ================================

    在生产环境下测试时,脚本会报错原因是类似Exchange Install Domain Servers这样的组是没有上面提供的这些属性的, 不过没关系不影响。




    报错信息截图:

    • 已编辑 TEERY GG 2014年12月23日 4:55
    2014年12月23日 3:40
  • 你好!

    你修改的语法应该没有问题,其实变量$Userinfo储存的是Get-ADUser的结果,你可以查看Aduser的所有的属性:

    “Get-ADUser aduser -Properties *” 里面有列出CanonicalName和Office属性。

    Best Regards,

    Anna Wang


    Please remember to mark the replies as answers if they help and unmark them if they provide no help. If you have feedback for TechNet Support, contact tnmff@microsoft.com

    2014年12月23日 5:00
    版主
  • 了解了,感谢!

    welcome to reply

    2014年12月23日 7:55
  • 這是兩個基於原生命令的批處理實現.

    ug.bat

    @echo off
    
    setlocal enabledelayedexpansion
    
    set KEYWORD=成员
    
    set usr=nul
    for /f "tokens=*" %%n in ('dsquery user -o samid -limit 0') do (
            for /f "tokens=*" %%u in ('echo %%n') do set usr=%%~u
            if /i !usr! neq nul (
                    echo username: !usr!
                    net user "!usr!" /domain | find /i "!KEYWORD!"
                    echo.
            )
            set usr=nul
    )
    
    endlocal
    

    ug1.bat

    @echo off
    
    setlocal enabledelayedexpansion
    
    set usr=nul
    for /f "tokens=*" %%n in ('dsquery user -o samid -limit 0') do (
            for /f "tokens=*" %%u in ('echo %%n') do set usr=%%~u
            if /i !usr! neq nul (
                    echo samaccountname: !usr!
                    dsquery user -samid "!usr!" | dsget user -memberof
                    echo.
            )
            set usr=nul
    )
    
    endlocal
    


    Folding@Home

    2014年12月24日 14:12