= PowerShell AD Management = **Summary**: How to manage ActiveDirectory with powershell. \\ **Date**: Around 2011 \\ **Refactor**: 22 March 2025: Checked links and formatting. \\ {{tag>powershell ad}} = Import ActiveDirectory Module = To import the AD module for powershell issue this command: import-module activedirectory > Note: [[http://technet.microsoft.com/en-us/library/dd378937%28WS.10%29.aspx|You need to be on Windows Server 2008 R2 for this]] == Get User Data == To see the full info for an AD account issue this command: Get-ADUser -properties * = Quest AD Management CMDLETs = Quest (part of Dell by the way) also provides some seriously well created commandlets, which can be downloaded [[http://www.quest.com/powershell/activeroles-server.aspx|here]]. Just download the "Quest One ActiveRoles Management Shell for Active Directory 32-bit - Zip" file (version 1.6.0) and install (as an administrator). After installation you can start the shell and use the commandlets. == Connect to Different Domain == By default the domain you authenticate or are installed on will be used. If you want another domain use the service parameter: get-qadgroup groupname -service dc.domain.local:389 == Examples == These are some examples I used in an AD migration project: Script example: # Author: Sjoerd Hooft # Purpose script: This script collects all groups in the new domain that have a groupmember in the old domain $timestamp = Get-Date -format "yyyyMMdd-HH.mm" $csvfile = "F:\qadgroups-$timestamp.csv" $myCol = @() ForEach ($adgroup in (Get-QADgroup -SizeLimit 0)){ $name = $adgroup.Name Write-Host "Now processing $name" ForEach ($member in (Get-QADGroupMember $adgroup -SizeLimit 0 | where {$_.Type -eq "group"} | where {$_.DN -match "olddomain"})){ $groupinfo = "" | Select ParentName,ParentDN,MemberName,MemberDN $groupinfo.ParentName = $adgroup.Name $groupinfo.ParentDN = $adgroup.DN $groupinfo.MemberName = $member.Name $groupinfo.MemberDN =$member.DN $myCol += $groupinfo }} $mycol | export-csv -notypeinformation $csvfile These onliners collect all groups based on grouptype: get-qadgroup -SizeLimit 0 -Service 'dc.olddomain:389' | where {$_.ParentcontainerDN -ne "CN=Builtin,DC=olddomain"} | where {$_.ParentcontainerDN -ne "CN=Users,DC=olddomain"}| where {$_.ParentcontainerDN -ne "OU=SMS,DC=olddomain"}| where {$_.groupscope -eq "DomainLocal"} | select Name | sort Name | Export-Csv -notypeinformation "F:\ad-groups-olddomain-domainlocal.csv" get-qadgroup -SizeLimit 0 -Service 'dc.olddomain:389' | where {$_.ParentcontainerDN -ne "CN=Builtin,DC=olddomain"} | where {$_.ParentcontainerDN -ne "CN=Users,DC=olddomain"}| where {$_.ParentcontainerDN -ne "OU=SMS,DC=olddomain"}| where {$_.groupscope -eq "global"} | select Name | sort Name | Export-Csv -notypeinformation "F:\ad-groups-olddomain-global.csv" get-qadgroup -SizeLimit 0 -Service 'dc.olddomain:389' | where {$_.ParentcontainerDN -ne "CN=Builtin,DC=olddomain"} | where {$_.ParentcontainerDN -ne "CN=Users,DC=olddomain"}| where {$_.ParentcontainerDN -ne "OU=SMS,DC=olddomain"}| where {$_.groupscope -eq "universal"} | select Name | sort Name | Export-Csv -notypeinformation "F:\ad-groups-olddomain-universal.csv" get-qadgroup -SizeLimit 0 | where {$_.ParentcontainerDN -ne "CN=Builtin,DC=newdomain"} | where {$_.ParentcontainerDN -ne "CN=Users,DC=newdomain"}| where {$_.ParentcontainerDN -ne "OU=SMS,DC=newdomain"}| where {$_.groupscope -eq "universal"} | select Name | sort Name | Export-Csv -notypeinformation "F:\ad-groups-newdomain-universal.csv"