windows:ad:getadinfo

Differences

This shows you the differences between two versions of the page.


windows:ad:getadinfo [2019/10/31 09:06] (current) – created - external edit 127.0.0.1
Line 1: Line 1:
 +====== Powershell get AD info ======
 +The system requirements for Exchange Server 2013 include the following for Active Directory:
  
 +  * Forest and domain functional level of Windows Server 2003 or higher (up to Windows Server 2012 R2 is supported with Exchange Server 2013 SP1 or later)
 +  * Schema Master running Windows Server 2003 SP2 or later
 +  * At least one global catalog server in each Active Directory site where Exchange 2013 will be installed that runs Windows Server 2003 SP2 or higher
 +Using PowerShell we can retrieve all of this information quickly.
 +
 +Here is a script that breaks a whole lot of PowerShell “rules” but gets the job done. 
 +
 +The script requires the ActiveDirectory PowerShell module, and in a multi-domain forest should be run in the forest root domain with an admin account that can access each domain.
 +<code powershell Get-ADInfo.ps1>
 +<#
 +.SYNOPSIS
 +Get-ADInfo.ps1 - PowerShell script to collect Active Directory information
 +.DESCRIPTION 
 +This PowerShell Script collects some basic information about an Active Directory
 +environment that is useful for verifying the pre-requisites for an Exchange
 +Server deployment or upgrade.
 +.OUTPUTS
 +Results are output to the console and to a HTML file.
 +.EXAMPLE
 +.\Get-ADInfo.ps1
 +Runs the script and generates the output.
 +.NOTES
 +Written by: Paul Cunningham
 +Find me on:
 +* My Blog: http://paulcunningham.me
 +* Twitter: https://twitter.com/paulcunningham
 +* LinkedIn: http://au.linkedin.com/in/cunninghamp/
 +* Github: https://github.com/cunninghamp
 +For more Exchange Server tips, tricks and news
 +check out Exchange Server Pro.
 +* Website: http://exchangeserverpro.com
 +* Twitter: http://twitter.com/exchservpro
 +Change Log
 +V1.00, 26/06/2015 - Initial version
 +#>
 +
 +#requires -version 2
 +
 +$htmlreport = $null
 +$htmlbody = $null
 +$htmlfile = "ADInfo.html"
 +$spacer = "<br />"
 +
 +Import-Module ActiveDirectory
 +
 +#---------------------------------------------------------------------
 +# Collect AD Forest information and convert to HTML fragment
 +#---------------------------------------------------------------------
 +
 +$forest = Get-ADForest
 +
 +$htmlbody += "<h3>Forest Details</h3>"
 +
 +$forestinfo = New-Object PSObject
 +
 +Write-Host -ForeGroundColor Yellow "*** Forest: $($forest.RootDomain) ***"
 +Write-Host ""
 +$forestinfo  | Add-Member NoteProperty -Name "Forest" -Value $($forest.RootDomain)
 +
 +Write-Host "Forest Mode: $($forest.ForestMode)"
 +$forestinfo  | Add-Member NoteProperty -Name "Forest Mode" -Value $($forest.ForestMode)
 +
 +Write-Host "Schema Master: $($forest.SchemaMaster)"
 +$forestinfo  | Add-Member NoteProperty -Name "Schema Master" -Value $($forest.SchemaMaster)
 +
 +Write-Host "Domain Naming Master: $($forest.DomainNamingMaster)"
 +$forestinfo  | Add-Member NoteProperty -Name "Domain Naming Master" -Value $($forest.DomainNamingMaster)
 +
 +Write-Host "Additional UPN Suffixes: $($forest.UPNSuffixes)"
 +$forestinfo  | Add-Member NoteProperty -Name "Additional UPN Suffixes" -Value $($forest.UPNSuffixes)
 +
 +$htmlbody += $forestinfo | ConvertTo-Html -Fragment
 +$htmlbody += $spacer
 +
 +#---------------------------------------------------------------------
 +# Collect AD Domain information and convert to HTML fragment
 +#---------------------------------------------------------------------
 +
 +$htmlbody += "<h3>Domain Details</h3>"
 +
 +$domains = @($forest | Select -ExpandProperty:Domains)
 +
 +Foreach ($domain in $domains)
 +{
 +    Write-Host ""
 +    Write-Host -ForeGroundColor Yellow "*** Domain: $domain ***"
 +    Write-Host ""
 +
 +    $domaindetails = Get-ADDomain $domain
 +
 +    $domaininfo = New-Object PSObject
 +    
 +    $domaininfo | Add-Member NoteProperty -Name "Name" -Value $domaindetails.Name
 +    
 +    Write-Host "NetBIOS Name: $($domaindetails.NetBIOSName)"
 +    $domaininfo | Add-Member NoteProperty -Name "NetBIOS Name" -Value $domaindetails.NetBIOSName
 +
 +    Write-Host "Domain Mode: $($domaindetails.DomainMode)"
 +    $domaininfo | Add-Member NoteProperty -Name "Mode" -Value $($domaindetails.DomainMode)
 +    
 +    Write-Host "PDC Emulator: $($domaindetails.PDCEmulator)"
 +    $domaininfo | Add-Member NoteProperty -Name "PDC Emulator" -Value $($domaindetails.PDCEmulator)
 +    
 +    Write-Host "Infrastructure Master: $($domaindetails.InfrastructureMaster)"
 +    $domaininfo | Add-Member NoteProperty -Name "Infrastructure Master" -Value $($domaindetails.InfrastructureMaster)   
 +    
 +    Write-Host "RID Master: $($domaindetails.RIDMaster)"
 +    $domaininfo | Add-Member NoteProperty -Name "RID Master" -Value $($domaindetails.RIDMaster)
 +
 +    $htmlbody += $domaininfo | ConvertTo-Html -Fragment
 +    $htmlbody += $spacer
 +
 +}
 +
 +$htmlbody += "<h3>Global Catalog Servers by Site/OS</h3>"
 +
 +$domaincontrollers = @(Get-ADDomainController -Filter {IsGlobalCatalog -eq $true})
 +
 +$gcs = @($domaincontrollers | Group-Object -Property:Site,OperatingSystem | Select @{Expression="Name";Label="Site, OS"},Count)
 +
 +Write-Host ""
 +Write-Host -ForeGroundColor Yellow "*** Global Catalogs by Site/OS ***"
 +
 +$gcs = $gcs | Sort "Site, OS"
 +$gcs | ft -auto
 +
 +$htmlbody += $gcs | ConvertTo-Html -Fragment
 +
 +
 +Write-Verbose "Producing HTML report"
 +    
 +$reportime = Get-Date
 +
 +#Common HTML head and styles
 +$htmlhead="<html>
 + <style>
 + BODY{font-family: Arial; font-size: 8pt;}
 + H1{font-size: 20px;}
 + H2{font-size: 18px;}
 + H3{font-size: 16px;}
 + TABLE{border: 1px solid black; border-collapse: collapse; font-size: 8pt;}
 + TH{border: 1px solid black; background: #dddddd; padding: 5px; color: #000000;}
 + TD{border: 1px solid black; padding: 5px; }
 + td.pass{background: #7FFF00;}
 + td.warn{background: #FFE600;}
 + td.fail{background: #FF0000; color: #ffffff;}
 + td.info{background: #85D4FF;}
 + </style>
 + <body>
 + <h1 align=""center"">Active Directory Information</h1>
 + <h3 align=""center"">Generated: $reportime</h3>"
 +
 +$htmltail = "</body>
 + </html>"
 +
 +$htmlreport = $htmlhead + $htmlbody + $htmltail
 +
 +$htmlreport | Out-File $htmlfile -Encoding Utf8
 +</code>