积极答复者
PowerShell如何导出AD中所有用户对应的组

问题
答案
-
你好!
请参考以下的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
- 已编辑 AnnaWYModerator 2014年12月22日 3:19
- 已标记为答案 TEERY GG 2014年12月23日 7:55
全部回复
-
你好!
请参考以下的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
- 已编辑 AnnaWYModerator 2014年12月22日 3:19
- 已标记为答案 TEERY GG 2014年12月23日 7:55
-
谢谢,不好意思现在才回复您。
脚本可以正常运行,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
-
你好!
你修改的语法应该没有问题,其实变量$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
-
這是兩個基於原生命令的批處理實現.
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