{"id":208,"date":"2018-06-21T11:55:40","date_gmt":"2018-06-21T10:55:40","guid":{"rendered":"http:\/\/brgeek.com.br\/wordpress\/?p=208"},"modified":"2018-06-21T11:55:40","modified_gmt":"2018-06-21T10:55:40","slug":"active-directory-health-check","status":"publish","type":"post","link":"http:\/\/brgeek.com.br\/wordpress\/2018\/06\/21\/active-directory-health-check\/","title":{"rendered":"Active Directory Health Check"},"content":{"rendered":"<p>Quick Active Directory Health Check sending to your email , you can setup this script via schedule task and have it daily in your mailbox ! <\/p>\n<pre><code class=\"language-powershell\" data-line=\"\">\n\nFunction Getservicestatus($service, $server)\n{\n\t$st = Get-service -computername $server | where-object { $_.name -eq $service }\n\tif($st)\n\t{$servicestatus= $st.status}\n\telse\n\t{$servicestatus = &quot;Not found&quot;}\n\t\n\tReturn $servicestatus\n}\n\n$Forest = [system.directoryservices.activedirectory.Forest]::GetCurrentForest()\n\n[string[]]$computername = $Forest.domains | ForEach-Object {$_.DomainControllers} | ForEach-Object {$_.Name} \n\n\n$report1= @()\nforeach ($server in $computername){\n$temp1 = &quot;&quot; | select server, pingstatus\nif ( Test-Connection -ComputerName $server -Count 1 -ErrorAction SilentlyContinue ) {\n$temp1.pingstatus = &quot;Pinging&quot;\n}\nelse {\n$temp1.pingstatus = &quot;Not pinging&quot;\n}\n$temp1.server = $server\n$report1+=$temp1\n}\n\n$b = $report1 | select server, pingstatus  | ConvertTo-HTML -Fragment -As Table -PreContent &quot;&lt;h2&gt;Server Availability&lt;\/h2&gt;&quot; | Out-String\n\n\n$report = @()\n\nforeach ($server in $computername){\n$temp = &quot;&quot; | select server, NTDS, DNS, DFSR, netlogon, w32Time\n$temp.server = $server\n\n$temp.NTDS = Getservicestatus -service &quot;NTDS&quot; -server $server\n$temp.DNS = Getservicestatus -service &quot;DNS&quot; -server $server\n$temp.DFSR = Getservicestatus -service &quot;DFSR&quot; -server $server\n$temp.netlogon = Getservicestatus -service &quot;netlogon&quot; -server $server\n$temp.w32Time = Getservicestatus -service &quot;w32Time&quot; -server $server\n$report+=$temp\n}\n\n$b+= $REPORT | select server, NTDS, DNS, DFSR, netlogon, w32Time | ConvertTo-HTML -Fragment -As Table -PreContent &quot;&lt;h2&gt;Service Status&lt;\/h2&gt;&quot; | Out-String\n\n\nadd-type -AssemblyName microsoft.visualbasic \n$strings = &quot;microsoft.visualbasic.strings&quot; -as [type] \n\n\n$report = @()\nforeach ($server in $computername){\n$temp = &quot;&quot; | select server, SysvolTest\n$temp.server = $server\n$svt = dcdiag \/test:netlogons \/s:$server\nif($strings::instr($svt, &quot;passed test NetLogons&quot;)){$temp.SysvolTest = &quot;Passed&quot;}\nelse\n{$temp.SysvolTest = &quot;Failed&quot;}\n$report+=$temp\n}\n$b+= $REPORT | select server, SysvolTest | ConvertTo-HTML -Fragment -As Table -PreContent &quot;&lt;h2&gt;NetLogon Test&lt;\/h2&gt;&quot; | Out-String\n\n\n\n$workfile = repadmin.exe \/showrepl * \/csv \n$results = ConvertFrom-Csv -InputObject $workfile | where {$_.&#039;Number of Failures&#039; -ge 1}\n \n \n$results = $results | where {$_.&#039;Number of Failures&#039; -gt 1 }\n \nif ($results -ne $null ) {\n    $results = $results | select &quot;Source DSA&quot;, &quot;Naming Context&quot;, &quot;Destination DSA&quot; ,&quot;Number of Failures&quot;, &quot;Last Failure Time&quot;, &quot;Last Success Time&quot;, &quot;Last Failure Status&quot;\n    $b+= $results | select &quot;Source DSA&quot;, &quot;Naming Context&quot;, &quot;Destination DSA&quot; ,&quot;Number of Failures&quot;, &quot;Last Failure Time&quot;, &quot;Last Success Time&quot;, &quot;Last Failure Status&quot; | ConvertTo-HTML -Fragment -As Table -PreContent &quot;&lt;h2&gt;Replication Status&lt;\/h2&gt;&quot; | Out-String    \n\n} else {\n    $results = &quot;There were no Replication Errors&quot;\n    $b+= $results | ConvertTo-HTML -Fragment  -PreContent &quot;&lt;h2&gt;Replication Status&lt;\/h2&gt;&quot; | Out-String\n     \n}\n\n\n\n\n$head = @&#039;\n&lt;style&gt;\nbody { background-color:#dddddd;\n       font-family:Tahoma;\n       font-size:12pt; }\ntd, th { border:1px solid black; \n         border-collapse:collapse; }\nth { color:white;\n     background-color:black; }\ntable, tr, td, th { padding: 2px; margin: 0px }\ntable { margin-left:50px; }\n&lt;\/style&gt;\n&#039;@\n \n$s = ConvertTo-HTML -head $head -PostContent $b -Body &quot;&lt;h1&gt;Active Directory Checklist&lt;\/h1&gt;&quot; | Out-string\n\n\n$emailFrom = &quot;email@email.com&quot; \n$emailTo = &quot;youremail@yourdomain.com&quot;\n\n$smtpserver= &quot;mailhost.smtpserver.com&quot; \n$smtp=new-object Net.Mail.SmtpClient($smtpServer)\n\n$msg = new-object Net.Mail.MailMessage\n$msg.From = $emailFrom\n$msg.To.Add($emailTo)\n$msg.IsBodyHTML = $true\n$msg.subject=&quot;Active Directory Health Check Report&quot; \n$msg.Body = $s\n$smtp.Send($msg)\n\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Quick Active Directory Health Check sending to your email , you can setup this script via schedule task and have it daily in your mailbox ! Function Getservicestatus($service, $server) { $st = Get-service -computername $server | where-object { $_.name -eq $service } if($st) {$servicestatus= $st.status} else {$servicestatus = &quot;Not found&quot;} [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":148,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[1],"tags":[24,25,22,8,12,23,6,11,21,10,20],"class_list":["post-208","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog","tag-active-directory","tag-ad","tag-info-gathering","tag-michael-goulart","tag-microsoft","tag-netherlands","tag-powershell","tag-script","tag-server","tag-vm-or-physical","tag-windows"],"jetpack_featured_media_url":"http:\/\/brgeek.com.br\/wordpress\/wp-content\/uploads\/2017\/09\/powershell-tips-and-tricks_w_640.png","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"http:\/\/brgeek.com.br\/wordpress\/wp-json\/wp\/v2\/posts\/208","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/brgeek.com.br\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/brgeek.com.br\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/brgeek.com.br\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/brgeek.com.br\/wordpress\/wp-json\/wp\/v2\/comments?post=208"}],"version-history":[{"count":1,"href":"http:\/\/brgeek.com.br\/wordpress\/wp-json\/wp\/v2\/posts\/208\/revisions"}],"predecessor-version":[{"id":209,"href":"http:\/\/brgeek.com.br\/wordpress\/wp-json\/wp\/v2\/posts\/208\/revisions\/209"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/brgeek.com.br\/wordpress\/wp-json\/wp\/v2\/media\/148"}],"wp:attachment":[{"href":"http:\/\/brgeek.com.br\/wordpress\/wp-json\/wp\/v2\/media?parent=208"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/brgeek.com.br\/wordpress\/wp-json\/wp\/v2\/categories?post=208"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/brgeek.com.br\/wordpress\/wp-json\/wp\/v2\/tags?post=208"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}