Import-Module ActiveDirectory -ErrorAction SilentlyContinue

$ServerName = $env:ComputerName

$DomainController = Get-ADDomainController -Identity $ServerName	
$Domain 		  = Get-ADDomain -Identity $DomainController.Domain
$Forest			  = Get-ADForest -Identity $DomainController.Forest
$ReplicationSite  = Get-ADReplicationSite -Identity $DomainController.Site
$Computer		  = Get-ADComputer -Identity $ServerName -Properties *
$RootDSE		  = Get-ADRootDSE -Server $ServerName
$RequiredServices = @( "ntfrs", "dfsr", "netlogon", "kdc", "w32time", "ismserv" )

$ISTG 		  = ($DomainController.NTDSSettingsObjectDN -eq $ReplicationSite.InterSiteTopologyGenerator)
$SYSVOL 	  = (Get-SMBShare SYSVOL -ErrorAction SilentlyContinue)
Try {
    $DnsRegister  = [System.Net.Dns]::GetHostByName($DomainController.HostName)
} Catch { 
    # The Catch will set $DnsRegister = $null if the GetHostByName fails for some reason
}
$SchemaVersion= Get-ADObject -Filter * -SearchScope Base -Properties objectVersion `
			-SearchBase $RootDSE.schemaNamingContext
$DCWeight	  = (Get-Item "HKLM:System\CurrentControlSet\Services\Netlogon\Parameters").GetValue("LdapSrvWeight", $null)
if (!$DCWeight -or $DCWeight -eq $null -or $DCWeight -eq "") {
	$DCWeight = 100
}
$FSMORoles 	= ($DomainController | Select -Expand OperationMasterRoles | %{ $_.ToString().Replace("Master","") } )

$SvcRunning	= @(Get-Service $RequiredServices | ? Status -eq "Running" | select -expand Name)
$SvcStopped	= @(Get-Service $RequiredServices | ? Status -ne "Running" | select -expand Name)
$ProcsOK	= (($SvcStopped.Count -eq 0) -or ($SvcStopped.Count -eq 1 -and ($SvcStopped[0] -eq "ntfrs" -or $SvcStopped[0] -eq "dfsr")))

New-Object PSObject -Property @{
	Server			= $DomainController.Name
	DomainDNSName	= $DomainController.Domain
	DomainNetBIOSName = $Domain.NetBIOSName
	DomainLevel		= $Domain.DomainMode
	Site			= $DomainController.Site
	ForestName		= $DomainController.Forest
	ForestLevel		= $Forest.ForestMode
	Created			= $Computer.whenCreated
	Changed			= $Computer.whenChanged
	GlobalCatalog	= $DomainController.IsGlobalCatalog
	RODC			= $DomainController.IsReadOnly
	Enabled			= $DomainController.Enabled
	HighestUSN		= $RootDSE.highestCommittedUSN
	SchemaVersion	= $SchemaVersion.objectVersion
	DCWeight		= $DCWeight
	IsIntersiteTopologyGenerator = $ISTG
	OperatingSystem	= $DomainController.OperatingSystem
	ServicePack		= $DomainController.OperatingSystemServicePack
	OSVersion		= $DomainController.OperatingSystemVersion
	FSMORoles		= $FSMORoles -join " "
	ServicesRunning	= $SvcRunning -join ","
	ServicesNotRunning = $SvcStopped -join ","
	ProcsOK			= $ProcsOK
	SYSVOLShare		= ($SYSVOL -ne $null)
	DNSRegister		= ($DnsRegister -ne $null)
}
