Blog

Active Directory – per PowerShell “Objekt vor zufälligem Löschen schützen”

Seit Windows Server 2008 lassen sich AD-Objekte vor versehentlichem Löschen schützen. Hierzu muss in den Objekteigenschaften > Reiter Objekt der Haken “Objekt vor zufälligem Löschen schützen” gesetzt werden (zuvor >Ansicht >Erweiterte Features aktivieren).

Zum Aktivieren des Features für mehrere Objekte sollte (seit 2008 R2) die PowerShell genutzt werden.

1) Das AD-Modul aktiveren:
Import-Module ActiveDirectory

2) Einzelnes Objekt auswählen und Löschschutz aktivieren (Beispiel: der Container “Computers”)

Get-ADobject -Identity “CN=Computers,DC=DOMAIN,DC=TLD” | Set-ADobject -ProtectedFromAccidentalDeletion $true

3) OU samt beinhaltender Objekte auswählen und Löschschutz aktiveren (Beispiel: OU “SCCM-Users”)

Get-ADobject -Filter * -SearchBase “OU=SCCM-Users,DC=DOMAIN,DC=TLD” | Set-adobject -ProtectedFromAccidentalDeletion $true

4) Objekte der gesamten Domäne auswählen und Löschschutz aktivieren

Get-ADobject -Filter * -SearchBase “DC=DOMAIN,DC=TLD” | Set-adobject -ProtectedFromAccidentalDeletion $true

Read More

MS SQL Express – verbinden ohne Angabe des Instanznamens

Während der Installation einer MS SQL Express 2008 Instanz wird standardmäßig der Instanzname SQLExpress vergeben. Zur Verbindung mit der Instanz muss daher “localhost\SQLExpress” bzw. “Hostname\SQLExpress” angegeben werden.

Soll während der Anmeldung auf die Angabe des Instanznamens verzichtet werden, muss diese während der Installation umbenannt werden in MSSQLServer. Anschließend ist die Instanz über “localhost” bzw. “Hostname” erreichbar.

Read More

Exchange 2010 #554 5.2.0 STOREDRV.Deliver.Exception

Beim Versenden von Emails an einen Emailaktivierten Öffentlichen Ordner kommt u.U. postwendend eine Unzustellbarkeitsbenachrichtigung (NDR) an den Absender mit folgender Meldung zurück:

554 5.2.0 STOREDRV.Deliver.Exception:ObjectNotFoundException; Failed to process message due to a permanent exception with message The Active Directory user wasn’t found. ObjectNotFoundException: The Active Directory user wasn’t found.

Das Problem tritt in Umgebungen auf in denen von Exchange 2003 auf Exchange 2010 migriert, und alle alten Exchange Server bereits aus der Infrastruktur entfernt wurden. Nach Abschluss der Migration bleiben Elemente der “Ersten Administrativen Gruppe” im Active Directory bestehen. So auch der Container “CN=Servers”, welcher allerdings keine Objekte mehr enthält.

Zur Behebung des Problems, muss der Servers-Container aus dem Active Directory entfernt werden:

- ADSI-Editor öffnen
- Verbindung herstellen > Bekannten Namenskontext auswählen: “Konfiguration”
- Konfiguration > CN=Configuration,DC=domain,DC=TLD > CN=Services > CN=Microsoft Exchange > CN=Organisationsname > CN=Administrative Groups > CN=Erste Administrative Gruppe
- Der Container CN=Servers sollte leer sein
- Den leeren Container CN=Servers per Rechtsklick auswählen > Löschen

Quelle:
Technet – Exchange Server Blog

Read More

Exchange 2010 Ereignis-ID 9320, 9325 und 9327

Während der Erzeugung des Offlineadressbuchs kommt es u.U. zu folgenden Warnungen:

Protokollname: Anwendung
Quelle: MSExchangeSA
Ereignis-ID: 9327
Ebene: Warnung
Beschreibung: Es wurden einige Einträge in der Offlineadressliste „\Globale Adressliste“ von OALGen ausgelassen. Um festzustellen, welche Einträge betroffen sind, muss die Ereignisprotokollierung für den Offlineadress-Generator mindestens auf „Mittel“ festgelegt sein.
   – \Standard-Offlineadressbuch

Protokollname: Anwendung
Quelle: MSExchangeSA
Ereignis-ID: 9320
Ebene: Warnung
Beschreibung: OABGen konnte keine vollständige Detailinformationen für einige Einträge in der Offlineadressliste der Adressliste „\Globale Adressliste“ generieren. Die Ereignisprotokollierung für den Offlineadresslisten-Generator muss mindestens auf „Mittel“ festgelegt werden, damit die betroffenen Einträge angezeigt werden.

Nichts leichter als das. In der Exchange-Verwaltungskonsole (EMC):

- Serverkonfiguration
- Server auswählen
- Kontextmenü des Servers > Diagnoseprotokolleigenschaften verwalten…

- Dienst „MSExchangeSA“ > OAL Generator auswählen
- Protokollierung auf Medium setzen

- Konfigurieren

Anschließend in die Exchange Verwaltungsshell (EMS) wechseln und über folgenden Powershell-Befehl eine erneute Generierung des Offlineadressbuchs anstoßen:

Get-OfflineAddressBook | Update-OfflineAddressBook

Im Eventlog findet sich nun Ereignis 9325 wieder:

Protokollname: Anwendung
Quelle: MSExchangeSA
Ereignis-ID: 9325
Ebene: Fehler
Beschreibung: OABGen hat den Benutzereintrag „<Benutzername>“ in Adressliste „\Globale Adressliste“ ausgelassen, weil die SMTP-Adresse ” ungültig ist.
   – \Standard-Offlineadressbuch

Per „Active Directory-Benutzer und –Computer“ oder ADSI-Editor die folgenden Attribute des genannten Benutzers auf Richtigkeit prüfen:

 -          proxyAddress  (Antwortadresse muss mit „SMTP:“ beginnen – alle anderen Adressen mit „smtp:“)

-          mail   (Antwortadresse)

-          showInAddressBook

-          msExchHomeServerName
Handelt es um einen Postfach-aktivierten Benutzer müssen alle 4 Attribute gefüllt sein. Sollte der Benutzer über kein Postfach verfügen, sind u.U. die Attribute „showInAddressBook“ und „msExchHomeServerName“ gefüllt und müssen geleert werden.

Quellen:
Technet Event 9325
Technet Event 9327

Read More

Benutzer per Email über Ablauf des Windows-Kennworts benachrichtigen

In Windows 7 werden Benutzer nach der Anmeldung nur noch durch eine Sprechblase der Taskleiste darüber informiert, dass deren Windows-Kennwort in naher Zukunft abläuft. Da diese Sprechblase gerne von Usern übersehen wird, kann zusätzlich mithilfe eine PowerShell-Skripts eine Emailbenachrichtigung eingerichtet werden.

Damit das Skript ausgeführt werden kann, muss es entweder auf einem Domain Controller (Win 2008 R2 aufwärts) oder einem Member-Server mit installierter “Active Directory-Domänendiensten”-Rolle aufgerufen werden. Außerdem muss ggf. noch PowerShell’s Execution Policy auf “RemoteSigned” angepasst werden:

Set-ExecutionPolicy RemoteSigned

Hiermit kann geprüft werden wie die Execution Policy konfiguriert ist (Standardwert: Restricted):

Get-ExecutionPolicy

 

1.) PowerShell-Skript erstellen
Diesen Code in einen Texteditor kopieren, die hervorgehobenen Stellen anpassen und als PowerShell-Skript speichern (z.B. C:\Temp\password.ps1):

———————————————

Import-Module ActiveDirectory

Get-ADUser -filter * -properties PasswordLastSet,EmailAddress,GivenName,Surname -SearchBase “OU=Benutzer,DC=domain,DC=de” -SearchScope Subtree |foreach
{
$PasswordSetDate=$_.PasswordLastSet
$maxPasswordAgeTimeSpan = $null
$maxPasswordAgeTimeSpan = (Get-ADDefaultDomainPasswordPolicy).MaxPasswordAge

$today=get-date
$ExpiryDate=$passwordSetDate + $maxPasswordAgeTimeSpan

$daysleft=$ExpiryDate-$today

$display=$daysleft.days
$UserName=$_.GivenName
$SurName=$_.Surname

if ($display -lt 14 -and $display -gt 0)
{
$MyVariable = @”
Sehr geehrte/r $UserName $Surname,

Ihr Kennwort wird in $display Tagen ablaufen. Sollten Sie es nicht rechtzeitig aendern, wird das Internet abgeschaltet :)

Mit freundlichem Gruss,
EDV-Abteilung

*** Diese Nachricht wurde automatisch generiert – bitte nicht darauf antworten. ***

“@
send-mailmessage -to $_.EmailAddress -from kennwortwarnung@domain.de -Subject “IT Information: Ihr Kennwort wird in $display Tagen ablaufen” -body $MyVariable  -smtpserver smtp.domain.de
}
}

———————————————

Erläuterung:

OU=Benutzer,DC=domain,DC=de  > durch entsprechende OU-Struktur ersetzen (durch den Schalter “-SearchScope Subtree” werden Unter-OUs inkludiert)
$display -lt 14  > 14 = Zeitraum in Tagen bevor das Kennwort abläuft. Während des definierten Zeitraums wird der Benutzer bei Ausführung des Skripts gewarnt.
Sehr geehrte/r…  > Benachrichtigungsinhalt nach eigenem Geschmack gestalten.
kennwortwarnung@domain.de  > Austauschen gegen gewünschte Absenderadresse.
smtp.domain.de  > Email-Server

 

2.) Benachrichtigungsskript in die Windows-Aufgabenplanung einbinden
- In Aufgabenplanung “Neue einfache Aufgabe” erstellen
- Name & Zeitplan festlegen
- Aktion: Programm starten
- Programm starten:
> Programm / Skript: %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe
> Argumente hinzufügen (optional): -command C:\Temp\password.ps1
- Anschließend die Aufgabe bearbeiten und unter “Allgemein” die Haken “Unabhängig von der Benuzteranmeldung ausführen” und “Mit höchsten Privilegien ausführen” setzen

 

Quellen:
Technet-Forum
Technet
Mike Pfeiffer

Read More

WDS | Windows Updates & Treiber zu WIM Abbild hinzufügen

Nach dem Erstellen eines Installationsabbilds werden regelmäßig Updates und Treiber veröffentlicht die dem Image hinzugefügt werden müssen. Anstelle ein neues Master-Image zu erzeugen, per Sysprep zu verallgemeinern und anschließend aufzuzeichnen, lassen sich bestehenden, in WDS eingebundenen Installationsabbildern u.a. sowohl Windows Updates als auch Treiberpakete hinzufügen.

Für die folgenden Beispiele wird angenommen ein Abbild namens “Win7 x86 ENT” und die Abbildgruppe “Win7″ ist vorhanden.

1) Das Installationsabbild, welchem weitere Pakete hinzugefügt werden sollen, muss zu allererst exportiert werden:

CMD (als Administrator ausführen!): wdsutil -Export-Image -Image:”Win7 x86 ENT” -ImageType:Install -ImageGroup:Win7 -DestinationImage -FilePath:D:\Win7x86ENT.wim -Overwrite:Yes

2) Als nächstes muss die WIM-Datei gemountet werden:

dism -Mount-Wim -WimFile:D:\Win7x86ENT.wim -Index:1 -MountDir:D:\Mount

3) Nun können die Update- (CAB oder MSU) bzw. Treiber-Pakete dem gemounteten Image hinzugefügt werden:

Windows Updates: dism -Image:D:\Mount -Add-Package -PackagePath:<Pfad_und_Dateiname>

Treiber: dism -Image:D:\Mount -Add-Driver -Driver:<inf-Pfad_OHNE_Dateiname>

4) Die vorgenommenen Änderungen am Image müssen gespeichert werden:

dism -Commit-Wim -MountDir:D:\Mount

5) Bevor das neue Image im WDS eingebunden werden kann, muss es zunächst unmountet werden:

dism -Unmount-Wim -Commit -MountDir:D:\Mount

6) Jetzt noch das ursprüngliche Installationsabbild durch das angepasste ersetzen und wir sind fertig:

wdsutil -Replace-Image -Image:”Win7 x86 ENT” -ImageType:Install -ImageGroup:Win7 -ReplacementImage -ImageFile:D:\Win7x86ENT.wim

Alternativ kann das geänderte Image als neues Abbild im WDS eingebunden werden:

wdsutil -Add-Image -ImageType:Install -ImageGroup:Win7 -ImageFile:D:\Win7x86ENT.wim -SingleImage:”Win7 x86 Enterprise” -Name:”Win7 x86 ENT” -Description:”Win7 x86 ENT Image – neu”

Quellen:
Rob’s Blog
Technet 

Read More

netstat

netstat > Protokoll, Lokale Adresse, Remoteadresse (NetBIOS), Status

netstat -f > Protokoll, Lokale Adresse, Remoteadresse (FQDN), Status

netstat -n > Protokoll, Lokale Adresse, Remoteadresse (IP), Status

netstat -e > Ethernet-Schnittstellenstatistik incl. Pakete mit Status “Verworfen” und “Fehler

netstat | find “443″ > Protokoll, Lokale Adresse, Remoteadresse, Status > ausschließlich Einträge die 443 enthalten

Read More

WDS | Ereignis ID 519

Werden Clients während der Installation per WDS zur Domäne hinzugefügt, protokolliert der WDS-Server folgende Fehlermeldung:

Ereignistyp: Fehler
Ereignisquelle: BINLSVC
Ereignis-ID: 519 Benutzer: n/A
Computer: “Computername”
Beschreibung:
mehrere Computerkonten mit derselben GUID oder MAC-Adresse in Active
Directory-Domänendiensten gefunden wurden. Der
Windows-Bereitstellungsdienste-Server wird das erste aufgeführte
Computerkonto verwenden.

MAC-Adresse: “Adresse”
GUID: “GUID”

Liste der übereinstimmenden Computern:
“Name”
“Name”

Diese Meldung erscheint, obwohl weder GUID noch MAC doppelt vergeben wurden. Microsoft hat hierfür ein Hotfix bereitgestellt, welches auf dem WDS-Server zu installieren ist: KB2028840

Read More

PowerShell | Attribute eines AD-Objekts abfragen

Abfrage von AD-Attributen anhand eines Benutzer-Objekts (Max Muster):

1) Get-ADUser -Identity Max

2) Wem das zu wenig ist, erhält hiermit sämtliche Attribute des AD-Benutzers: Get-ADUser -Identity Max -Properties *


3) Folgender Befehl zeigt den Common Name [CN] und den SID (cn,objectsid) sämtlicher AD-Benutzer (-Filter *) in Form einer Liste (| fl) an: Get-ADUser -Filter * -Properties * | fl cn,objectsid

4) Soll die Suche auf Besucher einer bestimmten OU eingeschränkt werden, ist der Filter wie folgt zu setzen: Get-ADUser -Filter * -SearchScope OneLevel -SearchBase “DN der OU” -Properties * | fl cn,objectsid


Soll sowohl die genannte OU als auch deren Unter-OUs durchsucht werden, ist der Befehl anzupassen: “-SearchScope SubTree“.

 

Read More

SID eines Benutzers ermitteln

Viele Wege führen nach Rom; so auch bei der Ermittlung des eindeutigen SID (Security Identifier) eines AD-Benutzers.

1) PowerShell (2008 R2)
Im geladenen ActiveDirectory-Modul der Powershell auf dem DC einzugeben:

Get-ADUser -Identity <AD-Benutzer>
(AD-Benutzer kann sein: DN, GUID, SID oder sAMAccountName. Per SID Rückwärtsabfrage möglich!)

2) DSGET / DSQUERY
In CMD auf DC einzugeben:

dsget user “DN des Benutzers” -sid

Sollte der DN nicht bekannt sein:

dsquery user domainroot -name “NameDesBenutzers” | dsget user -sid
(bei NameDesBenutzers kann auch mit Wildcard gearbeitet werden)

3) Active Directory-Benutzer und -Computer
Unter “Ansicht” den Punkt “Erweiterte Features” aktivieren.

- Eigenschaften des Benutzers öffnen
- Reiter “Attribut-Editor”
- Attribut: objectSid

4) WHOAMI
CMD als entsprechender Benutzer öffnen (z.B. an Win7-Arbeitsstation)

whoami -user

Read More