Addressviews auf Exchange 2007 anpassen (Powershell)

Da ich bei einem Kunden mehr als 300 Adressviews anpassen sollte, habe ich mir dazu ein Powershell Script gebastelt. Damit geht’s schneller und einfacher.

Wer es verwenden möchte, muss seinen LDAP Pfad anpassen. Bitte vorher lesen, was das Script macht, dann ausprobieren!

$Searcher=New-Object System.DirectoryServices.DirectorySearcher
$Searcher.SearchRoot=“
LDAP://CN=All Address Lists,CN=Address Lists Container,CN=[Exchangeorg],CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=[YourDomain],DC=com“
$Searcher.SearchScope=1
$Searcher.Filter=“(&(objectClass=addressBookContainer)(!msExchQueryFilter=*))“
$Searcher.PageSize=1000
$Searcher.SizeLimit=1000

#
#   Suche alle betroffenen
#

$Result = $Searcher.FindAll()

#
# in schleife durchgehen, und alle Adressviews abarbeiten
#
foreach ($member in $Result) {

 #
 # views aus ADS referenzieren/holen
 # 
   $objADR = $Member.GetDirectoryEntry()
 
 #
 # Hilfsvariable
 #
   $Ident   = $objADR.cn

   Set-AddressList „$Ident“ -RecipientFilter „CustomAttribute15 -eq ‚DL-$Ident'“ -ForceUpgrade:$TRUE
   update-AddressList -Identity „$Ident“

}

 

 

 

Matthias

 

Upgrade auf Exchange 2007 ToDos

Adresslisten upgraden auf OPATH Syntax:

Set-AddressList „All Users“ -IncludedRecipients MailboxUsers
Set-AddressList „All Groups“ -IncludedRecipients MailGroups
Set-AddressList „All Contacts“ -IncludedRecipients MailContacts  

Set-GlobalAddressList „Default Global Address List“ -RecipientFilter {(Alias -ne $null -and (ObjectClass -eq ‚user‘ -or ObjectClass -eq ‚contact‘ -or ObjectClass -eq ‚msExchSystemMailbox‘ -or ObjectClass -eq ‚msExchDynamicDistributionList‘ -or ObjectClass -eq ‚group‘ -or ObjectClass -eq ‚publicFolder‘))}  

oder

oder

msExchQueryFilterMetadata: „Microsoft.Exchange12.8f91d340bc0c47e4b4058a479602f94c:RecipientFilterType=1“ (String)
msExchMinAdminVersion: „-2147453113“ (String)
msExchQueryFilter: „CustomAttribute15 -eq ‚[Your value]'“ (String)
purportedSearch: „(extensionAttribute15=[Your value])“ (String)
msExchRecipientFilterFlags: „1“ (String)
msExchLastAppliedRecipientFilter: „CustomAttribute15 -eq ‚[Your value]'“ (String)
msExchVersion: „4535486012416“ (String)

 

E-Mail Recipient Policy upgraden:

Set-EmailAddressPolicy PolicyName -RecipientFilter { ( DisplayName -like „IT*“ ) }

Full Mailbox Access auf Mailboxen setzen: Entweder über die Konsole, rechte Maustaste auf das Postfach, Manage Full Mailbox Access, oder über die Shell:

Add-MailboxPermission -Identity ‚CN=TeamMailbox1,CN=Users,DC=contoso,DC=com‘ -User ‚CONTOSO\donald.duck‘ -AccessRights ‚FullAccess‘ 

Matthias

 

 

Group Policy Management Console unter Windows Vista SP1

Mit SP1 wird die GPMC die im RC0 enthalten ist automatisch entfernt. Aus Sicherheitsgründen, damit nicht jeder „User“ die Konsole starten kann, und dann Settings ansehen kann. (lt. Microsoft).

Damit es unter Vista SP1 wieder funktioniert, muss man die Microsoft Remote Server Administration Tools for Windows Vista (KB 941314) herunterladen.

Anschließen nicht vergessen, unter Systemsteuerung/Programme und Funktionen die Tools auch zu aktivieren. Dazu in den Konfigurationsteil gehen: „Windows Funktionen ein- und ausschalten“. Dort die/das Häckchen für die Tools setzen, je nach dem welche man verwenden möchte!

Dann unter „Alle Programme/Verwaltung“ das Tool starten.

Matze

 

Outlook 2007 Autodiscover / Exchange 2007

Für OOF (Abwesenheitsassistent) benötigt Outlook 2007 einen Konfigurationsserver. Der wird anhand der Autodiscovery Funktion ermittelt.

Damit das funktioniert, muss im DNS ein SRV Record hinzugefügt werden:

Service: _autodiscover
Protocol: _tcp
Port Number: 443
Host: ClientAccessServer.YourDomain.com

Der Zugriff erfolgt via https:// und sollte ein geeignetes Zertifikat voraussetzen.

Da der host-name (NetBios-Name) des Servers häufig vom DNS Namen des Servers abweicht (und somit auch das Zertifikat), kann man bei Exchange 2007 mit dem cmdLet Set-ClientAccessServer die AutodiscoverServiceInternalURI angeben. Das ist der CertificatePrincipalName wie im Zertifikat angegeben. (Siehe auch Set-OutlookProvider)

Hier noch ein Link zur MS KB: http://support.microsoft.com/kb/940726/en-us

 

Exchange 2007 und das liebe Schaltjahr…

Hint: System Attendant neu starten, dann kann man auch wieder Mailboxen anlegen.

O.k. dass es Schaltjahre gibt konnte man ja nicht ahnen…. die gib es ja ERST seit ca. 500 Jahren… 🙂

 

Und das ist kein Aprilscherz!

OT:
Julius Caesar is credited with inventing leap year in 45 B.C., with improvements added by Pope Gregory XIII in A.D. 1582. By my count, that means that humans have had more than 2000 years to get used to the idea, and more than 30 years to figure out how to account for leap years in computer code. That raises a reasonable question: Why on earth did Exchange Server 2007 administrators have a leap year problem on February 29 of this year?

2008 Worldwide Partner Conference Awards

Microsoft veranstaltet jedes Jahr einen Wettbewerb unter den Partnerunternehmen für die innovativste Softwarelösung basierend auf Microsoft Technologien.

Dieses Jahr nehmen wir mit dem LAM v4.0 an diesem Wettbewerb teil. Mal sehen, was dabei rauskommt….

Für weitere Infos: https://partner.microsoft.com/40051582

Matthias

[EDIT]: Nix! 🙁 Na ja, dann wissen die halt nicht was ihnen entgeht 🙂 🙂 🙂

Winter Scripting Games 2008 – I’m a winner!

Das hat mich heute per Mail erreicht:

Hey, Matthias. I’m pleased to inform you that you’ve won one of the highly-coveted Dr. Scripto bobblehead dolls as part of the recently-completed 2008 Winter Scripting Games. …

In addition, our records indicate that you earned at least one Scripting Games certificate of Excellence. If you could let us know the name you’d like printed on the certificate we’ll get that out to you as well.   Incidentally, we’d like to also take this opportunity to thank you for participating in the Games; we really appreciate it. We hope you had a good time playing along, and we hope to see you back next year as well.    

Thanks!    

 

Microsoft Scripting Guy   

 

Von dem Dr. Script bobblehead BobbleHead gab’s dieses Jahr 250 Stück zu gewinnen. Und einer geht an mich! Cool. Nächstes Jahr bin ich wieder dabei. 

 

Exchange Mailrouting, Distribution List als alternativer Empfänger

Etwas verwirrende Überschrift, aber es geht um folgendes (Herausforderung eines Kunden):

Ausgangssituation: zwei Domänen, A und B. Zwei Exchangestandorte, in jeder Domäne einer. (Exchange A und Exchange B).
Ein Benutzer aus der Subdomäne B sendet eine Mail an einen Empfänger in der Root-Domain A. Mailbox in Domäne A hat einen alternativen Empfänger eingetragen (Mailverteilerliste, Global Group). Die Mails kommen bei den alternativen Empfängern nicht an! Eine Mail aus dem Internet bzw. Mails von Benutzern in der Domäne A kommen an.

Situation: Ein Postfach hat als alternativen Empfänger eine Mailverteilerliste (kein Benutzer, sondern einen Mailverteiler!). Dieser Benutzer ist in Domäne A angesiedelt. Ein Sender aus Domäne B (hier ist auch ein Exchangeserver) mit seinem Postfach auf dem Exchangeserver B sendet eine Mail an Empfänger in Domäne A (mit dem alt. Empfänger).

Damit die Mail auch an die Gruppe der alternativen Empfänger geroutet wird, muss die alternative Empfängergruppe eine Universal Group sein, da der Quell-Exchangeserver (Domäne B) bereits den alternativen Empfänger auflöst. Das kann er bei einer Global Group aber nicht. Deshalb wird der alt. Empfänger auch nicht ausgewertet.

Jedoch: Wenn eine Mail von einem vorgeschalteten SMTP-Relay Server an den Empfänger in Domäne A gesendet wird, erfolgt die Auflösung der alternativen Empfänger vom Exchangeserver A, in dessen Domäne auch die alternative Empfängergruppe ist. Dann gibt/gab es nie Probleme, die alternativen Empfänger auch zu erreichen.

Wenn die alternativen Empfänger nur Benutzerkonten sind, ist das kein Thema!

Ergebnis: Der Mailverteiler muss Universal sein, dann die Replikation zwischen den Domänen/Sites noch abwarten, schon geht’s auch aus der Domäne B.

 

Winter Scripting Games 2008

Scripting Games 2008 

 

In den letzten Wochen habe ich bei den Microsoft Scripting Games 2008 spaßeshalber mal mitgemacht. Es waren ein paar knifflige Aufgaben dabei, aber alles machbar. Wen es interessiert, hier der Link zu den 2008 Scripting Games.

Update am 06.03.2008: 100 Points! bei den Advanced Scriptern, (nur 80? bei den Beginners? Ouups!) Egal, Spaß hat’s trotzdem gemacht!

Bis nächstes Jahr!

Exchange 2007 User Mailbox zur Resource Mailbox konvertieren / AutoAccept

 

Set-Mailbox „MailboxName“ -Type Room

Und damit Besprechungsräume automatisch Besprechungsanfragen annehmen:

Set-MailboxCalendarSettings „MailboxName“ -AutomateProcessing AutoAccept

 

Eine Liste aller Resource Mailboxen:

Get-Mailbox | where {$_.IsResource -eq „true“}

 

Einige Parameter, die bei CalendarSettings angegeben werden können:

 

AddAdditionalResponse False  

LAM v4.0 Windows Plattform-Test und Managed Code-Test bestanden!

Wir haben unsere Entwicklung LAM v4.0 (local admin manager) bei lionbridge auf Windows Verträglichkeit testen lassen. Der Windows Plattform Test klärt ab, ob die Applikation unter Windows stabil läuft, sich ohne zu booten installieren/deinstallieren läßt und keinen Datenverlust erleidet oder generiert.

Der Managed Code Test prüft ab, ob auch wirklich alles in .Net Framework 2.0 entwickelt wurde.

Auf Anhieb den Test bestanden !! Da bin ich ja mal richtig Stolz auf mich 🙂

Damit haben wir den Status des ISV bei Microsoft erworben!

 

AdditionalAccountInfo unter Windows 2003 x64

Alle behaupten, die ACCTINFO.DLL funktioniert nicht unter Windows Server 2003 x64 bit!

Ich glaube, das geht schon. Zumindest habe ich den Tab in der DSA.MSC und ich sehe auch alle Infos.

So gehts:

regsvr32.exe accntinfo.dll (erst aus dem Resource Kit holen und z.B. unter %WINDIR%\system32 speichern.
Shortcut auf dem Desktop anlegen mit folgendem Link: (Beispiel)

C:\Windows\SysWOW64\mmc.exe C:\Windows\System32\dsa.msc -32

Den Shortcut ausführen, schon taucht der Tab auf. Witzigerweise taucht er ab dann immer auf, auch ohne -32.

Probierts aus.

Default Computercontainer für neue Computer umbenennen

Neue Computer werden per Default in den Container CN=Computers aufgenommen. Dumm nur, dass hier keine Policy gesetzt werden kann, das geht nämlich nur auf Organisationseinheiten. Der Admin hat dann zus. noch den Computer in die gewünschte Ziel OU zu verschieben.

Oder:

Redircmp.exe „DN-Pfad der OU“

Leitet den Ordner quasi um. Damit kann man eine Organisationseinheit festlegen, wo die neuen Computer immer landen.

Beispiel:

Redircmp.exe OU=Clients,OU=Computer,DC=Meine-Domain,DC=int

Für User gibt’s das auch, was dafür der Grund ist weiß ich aber nicht. Ich lege Benutzer sowieso immer manuell an, dann muss ich auch die OU auswählen. Für User heißt der Befehl übrigens RedirUsr.exe.

Hier der Link zum MS-Artikel: http://support.microsoft.com/kb/324949/en-us

Das ganze funktioniert erst in Windows 2003 Domänen.

 

 

Group Policy anhand lokaler Admingruppenmitgliedschaft zuweisen

Diese kleine Herausforderung kommt von einem Kunden, der den Local Admin Manager einsetzt. LAM v3.2 steuert zentral die Mitgliedschaft in der lokalen Admingruppe am Client. D.h. ein Benutzer kann gezielt an nur einem PC als lokaler Administrator eingetragen werden. So weit recht praktisch. Der Kunde setzt zwei Policies ein, eine für lokale Administratoren, eine für normale Benutzer (ohne Adminrechte). Dementsprechend soll der Desktop angepasst sein. Folglich kommt der Benutzer in die Sicherheitsgruppe für die Admin-Policy. Die „normale“ Policy wird im verweigert, ebenfalls über eine Sicherheitsgruppe.

Nun kann der Benutzer, der z.B. am PC100 lokaler Admin ist, sich aber auch an PCs anmelden, an denen er nicht lokaler Administrator ist und erhält trotzdem seine Group Policy als Administrator. Er hat zwar keine Rechte an dem PC, dennoch sind die ein oder anderen Optionen für Admins freigeschalten, so dass er diese auswählen könnte.

Die Herausforderung ist, dass der Benutzer NUR an dem PC die Group Policy als lokaler Admin bekommt, wo er auch in der lokalen Gruppe „Administratoren“ eingetragen ist. An allen anderen PCs soll die normale Group Policy ziehen.

Zur Info: Group Policies werden auf OU Ebene gesetzt und ziehen für den Benutzer/Computer innerhalb dieser OU-Struktur. Als weitere Einschränkung ist es noch möglich, die Zuweisung der Policy durch Gruppenmitgliedschaften zu „filtern“. D.h. nur Mitglieder in einer bestimmten Sicherheitsgruppe können die Policy anwenden.

Über WMI Filter können noch weitere Zuweisungsoptionen gesetzt werden. Dazu muss man sich in WMI jedoch ein bischen auskennen 🙂

In mehreren verschiedenen Versuchen habe ich feststellen dürfen, dass es mit lokalen Gruppen nicht funktioniert. WMI Filter waren kaum zu erstellen, da ja das Ergebnis eines Filters nur TRUE oder FALSE zurückliefern darf. Der WMI Abfragestring darf auch nicht sehr umfassend sein, sonst kann WMI damit nicht umgehen. UND (die größte Hürde!): Ich kann auch lokaler Admin sein, ohne direkt in der Admingruppe Mitglied zu sein…..

Eine Lösung muss es aber geben!

Nachdem ich mich nach langer Pause mit diesem Thema wiedermal beschäftigt habe, bin ich auf folgende Lösung gestoßen:

  1. es kann nur mit dem WMI Filter gehen, lokale Sicherheitsgruppen ziehen nicht. (können nicht mal eingegeben werden), etwas anderes „lokales“ kann ich nicht auswerten
  2. Welcher WMI Filter macht Sinn? Am Besten eine einfache Abfrage, die TRUE oder FALSE zurückliefert.
  3. Ich habe ein Logonscript, welches einen Wert in die Registry schreibt. Das geht aber nur, wenn ich lokaler Admin bin!
  4. Die Reihenfolge der Policies muss berücksichtigt werden.

Daraus ist erst mal dieses Script entstanden: „Group Policy anhand lokaler Admingruppenmitgliedschaft zuweisen“ weiterlesen

User Printer Manager UPM

User Printer Manager mappt beim Anmelden an den PC die zugewiesenen/definierten Drucker. Die Drucker können an folgende Objekte zugewiesen werden:

  1. Benutzer
  2. Computer
  3. Organisationseinheit

Wer also an einen Computer einen Drucker binden möchte, weil dort z.B. die Ausgangslieferscheine gedruckt werden, der definiert den Drucker an das Computerobjekt. Egal wer sich dann dort anmeldet, er bekommt immer den Drucker zugewiesen.

Am Benutzer Drucker zu definieren erklärt sich ja von selbst. Das bedeutet, der Benutzer bekommt immer die definierten Drucker gemappt, egal wo er sich anmeldet.

Das Zuweisen auf OU Ebene ist eine Besonderheit und kann für „allgemeine“ Druckermappings verwendet werden. Wer z.B. eine geografische OU Struktur einsetzt, kann für Räume, Etagen oder Gebäude spezielle Drucker definieren, die immer gemappt werden sollen. Dto. auch für organistorische OU Strukturen (Abteilungen, Bereiche usw.)

Jeder Benutzer kann sich natürlich auch noch selbst Drucker hinzufügen (Es soll ja Benutzer geben, die das können 😉 !) Der Administrator hat jedoch die Möglichkeit, dass bereits gemappte Drucker vor dem Zuweisen der definierten Drucker entfernt werden. So kann der Admin sicherstellen, dass keine „verwaisten“ Drucker am Benutzer zurückbleiben und dadurch Performanceprobleme bei Applikationen (Word) hervorrufen. (Wysiwyg benötigt ja vorher die Druckerdefinition, wie es ausgedruckt werden könnte. Wenn der Drucker aber gar nicht mehr existiert, dann versucht Word so lange auf den Drucker zuzugreifen, bis ein Time Out eintritt.)

Wenn die auf OU Ebene zugewiesenen Drucker nicht verwendet werden sollen/können, dann gibt es noch die Möglichkeit, die Vererbung der zugewiesenen Drucker zu unterbrechen und für das Objekt neue Drucker festzulegen.

Bis hierher nix neues.

Ab sofort sind folgende Features zus. verfügbar:

  1. Individuelle Default Drucker Einstellungen für den jeweiligen Benutzer vorgeben (damit sind nicht die Default Printing Preferences durch den Druckertreiber gemeint!)
  2. Eigenschaften des Druckers können direkt aufgerufen werden (Kein Wechsel der Adminkonsolen nötig)
  3. Druckerwarteschlange öffnen
  4. Druckserver Eigenschaften direkt aus der Konsole anzeigen

Damit soll die Druckeradministration noch mehr in den UPM integriert werden, ohne jedesmal die Konsolen zu wechseln.

upm-contextmenu.JPG

 

 

Wo stehen die Benutzerdefinierten Druckeinstellungen?

HKCU\Printers\Connections\Druckername oder HKCU\Printers\DevModes2

 

Mapping der Drucker am PC und welche Auswirkungen hat das Ganze

Beispiel: Der Benutzer Hans, Matthias meldet sich am PC an.

Ein Logonscript, welches über eine Group Policy auf die OU (oder Domäne) gemappt wurde, läuft ab und ermittelt erst mal, welcher User sich an welchem Computer anmeldet. Dann wird noch geprüft, welcher Default Drucker eingestellt ist.

Wenn das Flag „vor Zuweisung löschen“ gesetzt ist, dann werden jetzt alle Netzwerkdrucker gelöscht. Lokale Drucker bleiben erhalten!

Anschließend werden die definierten Drucker vom Computer, OU und dann noch vom User ausgelesen und zugewiesen.

Wenn der Benutzer an diesem Computer noch nie angemeldet war, dann hatte er an diesem PC auch noch nie einen Default Drucker. Durch das Häckchen am entsprechenden Drucker (in der UPM Managementkonsole) wird ihm der Defaultdrucker vorgegeben.

Sollte der User schon einen Defaultdrucker (oder sagen wir „Lieblingsdrucker“) ausgewählt haben, wird am Ende des Logonscriptes ihm dieser wieder als Defaultdrucker eingestellt. Die Häckchen in der Managementkonsole haben dann keine Bedeutung mehr.

Sollte durch den Administrator noch die Druckereinstellung vorgegeben worden sein, dann wird diese jetzt auch noch eingetragen.

(Druckereinstellungen für den Benutzer sind z.B. Zuführungsschacht, Ausgabeschacht Papierart/typ die von den Standards abweichen sollen.)

MH

 

Active Directory Benutzer in einen Exchange öffentlichen Ordner importieren

Eigentlich ist das Globale Adressbuch von Outlook genau der Inhalt aller Mailbenutzer aus dem Active Directory. Ich hatte allerdings einen Kunden, der VoIP verwendet, und die Rufnummern aus dem globalen Adressbuch verwenden wollte. Da die TAPI Schnittstelle das aber nicht unterstützt (im globalen Adressbuch sind es keine IPM.Contact Elemente), sollten die ADS User in einen öffentlichen Ordner importiert werden. Dort sind die Kontakte dann IPM.Contact Elemente, mit denen konnte VoIP wieder was anfangen.

Über den Sinn/Unsinn läßt sich natürlich wieder diskutieren (haben wir auch 🙂 ). Der Sinn solcher Kundenwünsche muss sich mir ja nicht immer erschließen, es reicht ja, wenn der Kunde weiß was er damit machen will. Außerdem war es mal eine neue Herausforderung, das ganze via Script zu machen. „Active Directory Benutzer in einen Exchange öffentlichen Ordner importieren“ weiterlesen

Zugriff auf Active Directory Daten

Welche Möglichkeiten gibt es, auf die ADS Informationen zuzugreifen?

  • ds-Programme von Microsoft (sind bei Windows dabei, wie z.B. dsadd.exe usw.)
  • ADS Management Tools (Users and Computers, usw.)
  • adsiedit.msc, Attribut Editor von Microsoft
  • ADODB, Active Data Objects for Data Bases, also via Microsoft Provider wie z.B. „ADsDSOObject“
  • ADSI-SDK Schnittstelle (ADSI 2.5)

Ich bevorzuge die beiden Varianten ADODB und ADSI-Schnittstelle. Diese Varianten kann ich Scriptieren oder in Programme einbauen. „Zugriff auf Active Directory Daten“ weiterlesen