Archive for August 2007

Active Directory – Restore deleted user accounts


Nedenstående restore procedure antager at man kører med Windows 2003 + SP1 eller derover på sine domain controllere og forest level er sat til native Windows 2003.
Når man sletter et user object fra sit AD, bliver det ikke fysisk slettet.
Derimod bliver de fleste “User Attributes” fjernet (telephone, e-mail, link til security groups m.m.) og bliver herefter flyttet til “CN=Deleted Objects” containeren som en Tombstone.
For mere info, se nedenstående link.
http://www.microsoft.com/technet/technetmag/issues/2007/09/Tombstones/default.aspx

  • Start FSMO DC op i DSRM (antager at denne har den seneste system state backup).
  • Restore den seneste System State backup.
  • Sig nej til at genstarte
  • Start ADexplorer på den anden Domain Controller.
  • Lokaliser det ønskede restore object som vist på nedenstående billeder.

     

  • Kopier værdien af “LastkKnownParent” ud i tekstfil.

     

  • Åben en kommando prompt og skriv som følger. Se også nedenstående billeder:
    Ntdsutil – authoritative restore – restore object “cn=Carsten Hansen,OU=Users,OU=Salg,OU=Win,DC=win,DC=local” – Quit – Quit



  • Deaktiver netværk på recovery domain controller.
  • Genstart DC’en (recovery domain controller) i “Normal Mode”
  • Disable inbound replication to the recovery domain controller. Se nedenstående kommando.
    repadmin /options WIN-DC-001 +DISABLE_INBOUND_REPL

  • Aktiver netværk på recovery domain controller.
  • Repliker auth-restored objects (Carsten Hansen) ud til de andre domain controller. Se nedenstående kommando.
    repadmin /syncall /d /e /P WIN-DC-001 DC=win,DC=local

  • Gendan link til Windows security groups og Exchange distribution lists.
    Se nedenstående kommando (Søg her på C: efter seneste ldf-fil – *.ldf eller kopier fil-navnet fra command interfacet).
    ldifde -i -f ar_20070828-010042_links_win.local.ldf


For mere info omkring ldifde og group memberships se nedenstående link:
http://support.microsoft.com/kb/840001

  • Enable inbound replication to the recovery domain controller. Se nedenstående kommando.
    repadmin /options WIN-DC-001 -DISABLE_INBOUND_REPL

  • Tjek at group memberships bliver replikeret ud til de andre domain controllere.

Vi har nu gendannet brugeren “Carsten Hansen” + de grupper han var medlem af.

N.B: Hvis man skulle restore den OU, som ovenstående “User Object” var medlem af, ville kommandoen være som følger:
Ntdsutil – authoritative restore – restore subtree OU=Salg,OU=Win,DC=win,DC=local

Troubleshooting Active Directory


Jeg har flere gange oplevet at en kunde ringer og siger, at de har problemer med deres AD. Det kunne feks være et bruger-objekt eller en OU som er blevet slettet.
De forventer selvfølgelig at være i luften igen indenfor de næste 5 min. Jeg tænker så, hvordan er det nu lige med restore proceduren?.
Jeg har på baggrund af ovenstående prøvet at samle en række central punkter i forbindelse med at noget går galt i Active Directory.
Den er som udgangspunkt målrettet mod Windows 2003.

Active Directory:

Generelt om Windows 2003 Active Directory.
http://www.microsoft.com/windowsserver2003/technologies/directory/activedirectory/default.mspx

Hvad er indeholdt i System State.
http://support.microsoft.com/kb/240363

Administration Tools Pack.
http://www.microsoft.com/downloads/details.aspx?FamilyID=E487F885-F0C7-436A-A392-25793A25BAD7&displaylang=en

Windows Server 2003 Resource Kit Tools.
http://www.microsoft.com/downloads/details.aspx?familyid=9d467a69-57ff-4ae7-96ee-b18c4790cffd&displaylang=en

FSMO:

Forklaring på FSMO + Optimering.
http://support.microsoft.com/default.aspx/kb/197132
http://support.microsoft.com/kb/223346

Hvem har FSMO rollerne.
http://www.petri.co.il/determining_fsmo_role_holders.htm (netdom query fsmo)

Transfer or seize FSMO roles to a domain controller.
http://support.microsoft.com/default.aspx?scid=kb;en-us;Q255504
http://www.petri.co.il/transferring_fsmo_roles.htm
http://www.petri.co.il/seizing_fsmo_roles.htm

Efter en seize af FSMO rollerne, er det vigtigt at udføre “metadata cleanup”.
Endvidere må den DC man har seizet rollerne fra, aldrig komme tilbage online på domænet.
http://support.microsoft.com/kb/216498

Time server:

Efter en transfere eller seize af FSMO, skal man opsætte time severen igen på den nye PDC emulator.
Det sker nemlig ikke automatisk. Kør følgende kommando på den nye FMSO server.

w32tm /config /manualpeerlist:” ntp1.tele.dk ntp2.tele.dk”/syncfromflags:manual
w32tm /config /update
w32tm /resync /nowait /rediscover

Change the Windows Time service configuration on the previous PDC emulator:
http://technet2.microsoft.com/windowsserver/en/library/f1d8b85d-2b4f-4acd-8c2e-259167b95e481033.mspx?mfr=true

Time server og ISA Server:
http://support.microsoft.com/default.aspx?scid=kb;EN-US;305135

Backup and Restore of Active Directory:

Repair the Active Directory.
http://www.windowsnetworking.com/kbase/WindowsTips/Windows2000/AdminTips/ActiveDirectory/UseEsentutlwhenNtdsutiltoolfailstorepairtheActiveDirectorydatabase.html

Authoritative vs. Non-Authoritative Restoration of Active Directory.
http://www.windowsnetworking.com/kbase/WindowsTips/Windows2003/AdminTips/ActiveDirectory/Authoritativevs.Non-AuthoritativeRestorationofActiveDirectory.html

Backing Up Active Directory Components.
http://technet2.microsoft.com/windowsserver/en/library/27efdda8-2766-4d28-b1d0-daeef7ba5b3c1033.mspx?mfr=true

Performing a Nonauthoritative Restore of a Domain Controller.
http://technet2.microsoft.com/windowsserver/en/library/f3bfb611-dcbe-4365-8f1d-3321916aeb631033.mspx?mfr=true

Performing an Authoritative Restore of Active Directory Objects.
http://technet2.microsoft.com/windowsserver/en/library/690730c7-83ce-4475-b9b4-46f76c9c7c901033.mspx?mfr=true

How to restore deleted user accounts and their group memberships in Active Directory.
http://support.microsoft.com/kb/840001

How To Recover a Deleted Domain Controller Computer Account.
http://support.microsoft.com/kb/248132

If the domain controller cannot start in normal mode.
Hvis man har en DC der ikke kan starte i “normal mode” men kun I DSRM og man gerne vil redde data udefra denne, kan man følge nedenstående artikel.
http://support.microsoft.com/kb/332199

Generelt for restore af en Domain Controller:

  • Brug kun system state backup som er inden for tombstone levetiden (60 dage). Sikre dig at den fejlramte DC ikke er online.
  • Den maskine du restore på, skal have de samme partitioner, SP og hotfixes.
  • Efter restore tjek eventlog for fejl.

Afslut med at køre følgende kommandoer for at sikre dig at AD og SYSVOL er intakte.
DCDIAG /D /C /V – NETDIAG /DEBUG /V – GPOTOOL.EXE /CHECKACL /VERBOSE – REPADMIN.EXE /SHOWUTDVEC win-dc-001.win.local “DC=win,DC=local”

Hvis man ikke benytter en godkendt system state backup procedure, kan man risikere at få inkonsistente data i sit AD. Dette kan ske i form af “USN rollback”
http://support.microsoft.com/?id=875495

Ovenstående kan ske, hvis man feks. benytte image eller VMware teknologi til at lave en backup af sine domain controllere.
Herved er der stor risiko for at man overskrider tombstone levetiden.

File Replication Service:

Monitoring and Troubleshooting the File Replication Service.
http://www.microsoft.com/windowsserver2003/technologies/storage/dfs/tshootfrs.mspx

Ultrasound.
http://www.microsoft.com/downloads/details.aspx?FamilyID=61acb9b9-c354-4f98-a823-24cc0da73b50&displaylang=en

Reinitialize File Replication Service replica sets.
http://support.microsoft.com/?id=290762

Best Practices for Sysvol Maintenance.
http://support.microsoft.com/?kbid=324175

Outlook 2003 helligdage og VBScript

Kopiering af helligdage i Outlook 2003, sker normalt via følgende metoder:

  • Funktioner – Indstillinger – Kalenderindstillinger – Tilføj helligdage.
  • Download helligdage frem til 2015 fra nedenstående link (Outlook.hol).
    http://support.microsoft.com/kb/924423
    Isoler den nye Outlook.hol og deploy den ud via intranettet.

  • Deploy office2003-KB924423-FullFile-DAN.exe ud via en GPO, SMS eller lign.

For ovenstående gælder det at brugerne skal ind og gøre noget aktivt (tilføj helligdage). Det kan betyde at nogle brugere ikke får opdateret deres kalender.
Alternativt, kan man udføre ovenstående via et script som gør det hele automatisk. Fordelen ved script-metoden er også, at man kan ligge firma relateret fridage med ind.
Det kunne være fridage som 1. maj og grundlovsdag m.m. For mere info omkring Officielle danske helligdage se her.
Den centrale del af scriptet er taget herfra.

‘Outlook 2003 – Import af Helligdage/Fridage

Dim strAppointment,FixedAppointment
FixedAppointment =
“Juleaftensdag 2015″
Const olFolderCalendar = 9
Const olAppointmentItem = 1
Const olOutOfOffice = 3
Set objOutlook = CreateObject(“Outlook.Application”)
Set objNamespace = objOutlook.GetNamespace(“MAPI”)
Set objCalendar = objNamespace.GetDefaultFolder(olFolderCalendar)
Set objDictionary = CreateObject(“Scripting.Dictionary”)
For Each strAppointment In objCalendar.Items
If strAppointment = FixedAppointment Then
wscript.quit
Else
objDictionary.Add “Januar 1, 2007″, “Nytårsdag”
objDictionary.Add “April 1, 2007″, “Palmesøndag”
objDictionary.Add “April 5, 2007″, “Skærtorsdag”
objDictionary.Add “April 6, 2007″, “Langfredag”
objDictionary.Add “April 8, 2007″, “Påskedag”
objDictionary.Add “April 27, 2007″, “Pinsedag”
objDictionary.Add “April 28, 2007″, “2. Pinsedag”
objDictionary.Add “Juni 5, 2007″, “Grundlovsdag”
objDictionary.Add “December 24, 2007″, “Juleaftensdag”
objDictionary.Add “December 25, 2007″, “1. juledag”
objDictionary.Add “December 26, 2007″, “2. juledag”
objDictionary.Add “Januar 1, 2008″, “Nytårsdag”
objDictionary.Add “December 24, 2015″, “Juleaftensdag 2015″
colKeys = objDictionary.Keys
For
Each strKey in colKeys
dtmHolidayDate = strKey
strHolidayName = objDictionary.Item(strKey)
Set objHoliday = objOutlook.CreateItem(olAppointmentItem)
objHoliday.Subject = strHolidayName
objHoliday.Start = dtmHolidayDate &
” 9:00 AM”
objHoliday.End = dtmHolidayDate & ” 16:30 PM”
objHoliday.AllDayEvent = True
objHoliday.ReminderSet = False
objHoliday.BusyStatus = olOutOfOffice
objHoliday.Save
Next
wscript.quit
End if
Next

Outlook 2003 signatur og VBScript

Man kan via et script oprette en Outlook signatur for alle medarbejdere i en given virksomhed. Informationerne kan feks. hentes fra Active Directory.
Resultatet kan være som vist på nedenstående billede.

Dele af scriptet er taget herfra. Jeg har modificeret det, så det automatisk henter de ønskede informationer fra AD.
Det kan være en del af et eksisterende logon script.

‘Active Directory – bruger information

Dim wShell,objFSO,strProfile,strUser
Dim strTitle, strCompany, strPhone, strFax, strMail, strwWwHomePage
Set objSysInfo = CreateObject(“ADSystemInfo”)
strUser = objSysInfo.Username
Set objUser = GetObject(“LDAP://” & strUser)
strName = objUser.DisplayName
‘Create Outlook SignaturesSet wShell = Wscript.CreateObject(“WScript.Shell”)
Set objFSO = CreateObject(“Scripting.FileSystemObject”)
strProfile = wShell.ExpandEnvironmentStrings(
“%USERPROFILE%”)
If objFSO.FileExists(strProfile & “Application DataMicrosoftSignaturer” & strName & “.htm”) Then
Else
strTitle = objUser.Title
strCompany = objUser.Company
strPhone = objUser.telephoneNumber
strFax = objUser.Faxnumber
strMail = objUser.mail
strwWwHomePage = obJUser.wWWHomePage
Set objWord = CreateObject(“Word.Application”)
Set objDoc = objWord.Documents.Add()
Set objSelection = objWord.Selection
Set objEmailOptions = objWord.EmailOptions
Set objSignatureObject = objEmailOptions.EmailSignature
Set objSignatureEntries = objSignatureObject.EmailSignatureEntries
wdColorGrey =
8882055
wdColorBlack = 0
objSelection.Font.Color = wdColorBlack
objSelection.Font.Name =
“Verdana”
objSelection.Font.Bold = True
objSelection.Font.Size = “8″
objSelection.TypeText “Med venlig hilsen / Kind regards, “
objSelection.TypeParagraph()
objSelection.TypeParagraph()
objSelection.Font.Color = wdColorGrey
objSelection.Font.Name =
“Verdana”
objSelection.Font.Bold = False
objSelection.TypeText strName
objSelection.TypeParagraph()
objSelection.TypeText strTitle
objSelection.TypeParagraph()
objSelection.TypeText strCompany
objSelection.TypeParagraph()
objSelection.TypeText
“Phone: “ & strPhone
objSelection.TypeParagraph()
objSelection.TypeText
“Fax: “ & strFax
objSelection.TypeParagraph()
objSelection.TypeText
“Email: “ & strmail
objSelection.TypeParagraph()
objSelection.TypeText
“Web: “ & strwWwHomePage
Set objSelection = objDoc.Range()
objSignatureEntries.Add strName, objSelection
objSignatureObject.NewMessageSignature = strName
objSignatureObject.ReplyMessageSignature = strName
objDoc.Saved =
True
objWord.Quit
End if

Outlook 2003 profile og VBScript


Man kan oprette en PRF-fil til at konfigurere en default Outlook profil, første gang en bruger starter Outlook. Hele denne proces kan man automatisere som følger:

  • Download Office 2003 Resource Kit Tools (ORK).
  • Start Custom Installation Wizard (CIW).
  • Tryk next indtil menupunkt 17.
  • Vælg “New Profile”.
  • Angiv navn på exchange serveren og evt. tilret “cached exchange mode settings”.
  • Vælg til sidst “Export Profile Settings” (PRF-fil).
  • Eksporter filen ud til en hidden network share, hvor brugerne har read og execute adgang. I mit tilfælde hedder det \win-dc-001WinScript$.
  • Log på en workstation med en template bruger, som ikke har en Outlook profil endnu.
  • Dobbelt klik på den tidligere oprettede PRF-fil. Outlook importerer således de konfigurerede indstillinger.
  • Luk herefter Outlook og start regedit.exe.
  • Naviger til “HKEY_CURRENT_USERSoftwareMicrosoftOffice11.0OutlookSetup”.
  • Slet de registry værdier som hedder noget med FirstRun,First-Run.
  • Indsæt registry værdien “ImportPRF” (REG_SZ) og angiv string som vist på nedenstående billede.
  • Eksporter hele registry nøglen “HKEY_CURRENT_USERSoftwareMicrosoftOffice” ud til \win-dc-001WinScript$


Opret et VBScript som importerer registry filen ud til de enkelte workstation/terminal/citrix.
For mere info omkring CIW og PRF, se nedenstående link.
http://www.outlook-tips.net/howto/prf.htm

‘Import default Outlook profile

Dim wShell,objFSO,strProfile
Set wShell = Wscript.CreateObject(“WScript.Shell”)
Set objFSO = CreateObject(“Scripting.FileSystemObject”)
strProfile = wShell.ExpandEnvironmentStrings(
“%USERPROFILE%”)
If objFSO.FileExists(strProfile & “Application DataMicrosoftOfficeMSOut11.pip”) Then
Else
wShell.run “regedit /S \Win-dc-001WinScript$WinOffice.reg”,0,True
End if