net stop NTDS /Y $compactinput = "compactinput.txt" $compactresult = "compactresult.txt" $integrityinput = "integrityinput.txt" $integrityresult = "integrityresult.txt" $Event = "" new-item $compactinput -type file add-content $compactinput 'activate instance ntds' add-content $compactinput 'files' $compact = 'compact to '+ (get-location).path add-content $compactinput $compact add-content $compactinput 'quit' add-content $compactinput 'quit' get-content $compactinput | ntdsutil.exe > $compactresult if((get-content $compactresult) -match "Compaction is successful. You need to:") {write-host "Compaction is successful" $dboldfile = (Get-ItemProperty HKLM:\SYSTEM\CurrentControlSet\services\NTDS\Parameters "DSA Database file")."DSA Database file" $dbnewfile = (get-location).path +'\ntds.dit' $dblogfile = (Get-ItemProperty HKLM:\SYSTEM\CurrentControlSet\services\NTDS\Parameters "Database log files path")."Database log files path" + '\*.log' Rename-Item $dboldfile ntds.dit.old $dbbkpfile = $dboldfile + '.old' copy-item $dbnewfile $dboldfile remove-item $dblogfile -Force new-item $integrityinput -type file add-content $integrityinput 'activate instance ntds' add-content $integrityinput 'files' add-content $integrityinput 'integrity' add-content $integrityinput 'quit' add-content $integrityinput 'quit' get-content $integrityinput | ntdsutil.exe > $integrityresult if((get-content $integrityresult) -match "Integrity check successful") {write-host "Integrity check is successful, starting NTDS" $rawfile = (get-location).path+ '\*.raw' remove-item $rawfile -force net start NTDS $QueryString = "SELECT * FROM __InstanceCreationEvent WHERE TargetInstance ISA 'Win32_NTLogEvent' AND TargetInstance.Logfile = 'Directory Service' AND TargetInstance.EventCode = '1394'" Register-WMIEvent -query $QueryString -sourceIdentifier "AppLogEntry" $Event = Wait-Event -sourceIdentifier "AppLogEntry" -timeout 90 if ($Event.TimeGenerated){ Remove-item $dbbkpfile -Force remove-item $dbnewfile -Force write-host "ADDS started successfully" } else{ write-host "problem when starting ADDS, check eventviewer, old ntds is renamed ntds.dit.old"} Unregister-Event "AppLogEntry"} else {write-host "Check intergrity is not successful, Copy the original version of the Ntds.dit file (ntds.dit.old), and repeat the offline defragmentation procedure manually." get-content $integrityresult} } else{ write-host "Compaction is not successful see logfile below:" get-content $compactresult net start NTDS } Remove-item $compactresult Remove-item $compactinput Remove-item $integrityinput Remove-item $integrityresult