Share via


Property validatie via Powershell

Voor diegene die een migratie hebben meegemaakt van Exchange 2003 naar Exchange 2007 is de volgende foutmelding geen onbekende:

WARNING: Object domain/Users/user has been corrupted and it is in an inconsistent state. The following validation errors have been encountered:
More...
De reden voor deze foutmeldingen is dat Exchange 2007 properties op mail(box)enabled objecten als contacts, mailboxusers en distributiegroepen. Hierbij moet je bijvoorbeeld denken aan objecten waarbij de IssueWarningQuota hoger ligt dan de prohibitSendQuota; maar ook aan foutive displaynames en aliases. Voornamelijk deze laatste twee komen vaak voor. Zo mogen er geen spaties in de Alias staan en ook niet in het begin of eind van de displayName. Nu laat de console of de shell dit zien als je een get-recipient of get-mailbox doet. Het is echter lastig een overzicht te maken omdat deze warning messages niet meegenomen worden als je de output naar bestand laat wegschrijven met Export-* of Out-*. Wanneer je echter output object van get-recipient (of get-mailbox of enig ander cmdlet wat een mailenabled object teruggeeft), zal je zien dat er een computed waarde bestaat wat heet IsValid. Deze is $true of $false en wordt bepaald door de methode Validate() welke eveneens een member van het object is. Door leuk te spelen met de methode en de computed waarde, kun je gemakkelijk een csv output genereren van alle objecten die foutief zijn en de reden waarom....

Gebruik het volgende scriptje:

$lcd = split-path $MyInvocation.MyCommand.Definition -parent$recipients = get-recipient -resultsize:5000 | ?{$_.IsValid -eq $false}if($recipients -ne $null){$count=0foreach($recipient in $recipients){$validation = $recipient.Validate() | Select-Object Description$dn = $recipient.DistinguishedName$row = """$dn"",""$validation"""Add-content "$lcd\errors.csv" $row$count+=1}Write-host "Total Found: " $count}

Op basis van deze output, kan je plannen maken om de fouten te verhelpen...