Netz-Weise Logo

Weisheiten - der Netz-Weise Blog

Hier finden Sie Tipps und Tricks für vor, während und nach der Schulung.

Office 365, Azure AD, ADSync und ADFS - eine Einführung und Begriffsklärung

Mit diesem Artikel beginne ich eine kleine Serie zum Thema Office 365 Benutzerverwaltung. Im ersten Teil möchte ich erst einmal klären, wie Office 365 und Azure AD zusammen hängen und wofür man den Azure AD Sync Dienst und Active Directory Federation Services (ADFS) benötigt. 

Wofür brauche ich Azure AD, wenn ich doch Office 365 einsetze?

Azure AD (Actice Directory) ist ein Benutzerverzeichnis, das von Microsoft ohne Installation eines eigenen Servers auf den Microsoft-Servern bereitgestellt wird. Office 365 verwendet Azure AD zur Speicherung Ihrer Office 365 Benutzerkonten. Dafür wird beim Anlegen eines Office 365-Accounts automatisch ein Azure-AD Verzeichnis angelegt.
Azure AD speicher Ihre Benutzerinformationen. Immer, wenn Sie im Office 365 einen neuen Benutzeraccount anlegen oder Benutzerinformationen ändern, werden tatsächlich Änderungen im Azure AD durchgeführt.

Benutzer mit einem lokalen AD zusammenführen

Um zu verhindern, dass Ihre Benutzer sich mehrere Kennwörter merken müssen – eins für Ihr Outlook und Sharepoint, und eins für Ihre lokale Anmeldung am PC – hat Microsoft die Möglichkeit zur Verfügung gestellt, Ihre Benutzerkonten ins Azure AD zu synchronisieren. Dafür benötigen Sie ein Tool namens Azure AD Sync (ehemals Dirsync), das Sie auf einem Server in Ihrem Netzwerk installieren („On Premise“). AAD Sync prüft in regelmäßigen Abständen Ihre Verzeichnisse (lokales AD oder, wenn eine Rücksynchronisation gewünscht wird, auch Ihr Azure AD) und synchronisiert Daten wie Kennwörter zwischen den Verzeichnissen. Die synchronisierten Verzeichnisse bleiben nach wir vor getrennt, aber die Daten können auf dem gleichen Stand gehalten werden. Die Synchronisation kann jederzeit abgebrochen werden.
Durch AAD Sync brauchen Ihre Benutzer sich nur noch ein Kennwort zu merken, da die Kennwörter im lokalen AD und im Internet immer gleich sind. Was Azure AD jedoch nicht leisten kann ist ein Single Sign on, wie er normalerweise auf einem Domänen-PC ausgeführt wird. Das bedeutet, daß z.B. der Zugriff auf Ihren Office 365 Sharepoint eine zusätzliche Anmeldung auf der Sharepoint Website erfordert, auch wenn das Kennwort lokal wie auf dem Sharepoint dank Azure AD das gleich ist. Um einen Single Sign on zu ermöglichen, benötigen Sie ADFS (Active Diretory Federation Services).

Single Sign on mit Office 365

Damit Ihre Benutzer nicht für jede Office 365 Ressource eine Anmeldung durchführen müssen, sondern wie in einem lokalen Netzwerk üblich nur eine Anmeldung am PC durchführen und dann Zugriff auf alle Ressourcen haben, benötigen Sie Active Directory Federation Services (ADFS).
ADFS ist ein Dienst, der dazu dienst, die Anmeldungen von Websites „befreundeter“ Unternehmen in Ihr AD umzuleiten. Ein Beispiel für ähnliche Dienste, die Sie vermutlich zumindest schon oft gesehen haben, sind die Anmeldungen auf Websites via Google oder Facebook.

Anstatt auf einer Website ein neues Benutzerkonto anzulegen, verwenden Sie einfach Ihren Google-Account. Das Prinzip dahinter funktioniert so, dass die Website, an der Sie sich anmelden, Ihren Client im Hintergrund an den Anmeldeserver von Google weiterleitet. Ihre Google-Anmeldeinformationen werden von Google überprüft, und wenn Sie sich korrekt angemeldet haben, wird Ihrem Client ein Anmeldetoken ausgestellt und digital signiert (vor Änderungen geschützt und mit einem Stempel versehen, der sicher stellt, dass das Anmeldetoken wirklich von Google erzeugt wurde). Dieses Anmeldetoken gibt Ihre Clientsoftware an die Website zurück. Da die Website google vertraut, kann Sie nun die Anmeldeinformationen von Google verwenden, um für Sie ein Konto zu erstellen, dass mit dem Google-Konto verknüpft ist.

  6438 Aufrufe

Die Startzeit / Reboot des Servers herausfinden

Update, 29.09.2020: Ein fleißiger Kommentator hat mir folgendes Code hinterlassen, der ab Powershell 5 besser funktioniert:

Get-Computerinfo | select OsLastBootUpTime

----

Jefrey Snover hat gerade ein Modul in der Powershell Gallery gepostet, das die letzte Reboot-Zeit aus dem Eventlog ausliest: https://www.powershellgallery.com/packages/get-lastreboot/0.1.1/DisplayScript. Dabei fiel mir ein, dass es doch auch noch dieses tolle Tool Systeminfo gibt, dass an der Kommandozeile alle möglichen Systeminformationen ausgibt - auch die Systemstartzeit. Das großartige an diesem Tool ist aber, dass es die Ausgabe auch ins csv-Format umwandeln kann, indem man den Parameter -FO aufruft. Die gesamten Informationen werden dann ins csv-Format umgewandelt, mit dem Powershell wiederum ganz hervorragend umgehen kann. Und so kann man dann ganz hervorragend die Daten von systeminfo direkt in Powershell weiterverarbeiten: 

systeminfo /FO csv | convertfrom-csv

Weiterlesen
  15087 Aufrufe

Datenbanken migrieren von mySQL zu SQL-Server

SQL-Server und mySql sind leider SQL-seitig nicht wirklich kompatibel. So gibt es zwar die Möglichkeit, eine Datenbank in mySQL als Script zu exportieren, aber leider kann man das Script auf dem SQL-Server nicht mehr für den Import benutzen. Der beste Weg für den Import führt daher über den SQL Server Migration Wizard. Der Migration Wizard steht für verschiedene Datenbanken zur Verfügung und hilft z.B. auch bei der Migration von Access-Datenbanken zu SQL-Server. Da das Tool recht komplex ist, möchte ich hier nur kurz zeigen, wie man eine einfach Migration durchführt, ohne auf die schmutzigen kleinen Details des Tools eingehen zu wollen. Ich verwende hierzu die derzeit aktuelle Version 6.0.1, 6.1 (für SQL-Server 2016) ist derzeit in der Beta-Phase.

Sie benötigen auf dem Rechner, auf dem Sie den SSMA einrichten wollen, zuerst einmal einen mySQL-ODBC-Treiber. Haben Sie die mySQL-Datenbank unter Windows auf dem gleichen Rechner installiert, dann müssen Sie nichts weiter machen, denn mySQL installiert den passenden ODBC-Treiber gleich mit. Ansonsten laden Sie den Treiber einfach bei mysql.com herunter. Nutzen Sie den 64-Bit Treiber, der SSMA wird nämlich auch in einer 64-Bit-Version installiert. Eine Konto für die Authentifizierung ist übrigens nicht notwendig, klicken Sie einfach auf den Link "No thanks, just start my download", wenn Sie nach Ihrem Login gefragt werden. Anschliessend installieren Sie den SSMA.

Wenn Sie den Migration Assistenten zum ersten Mal starten, müssen Sie ein Migrationsprojekt erstellen. Wählen Sie hierfür im Menü File "New Project" aus. Wichtig ist, dass Sie im folgenden Fenster das Migrationsziel auswählen. Standardmässig ist hier Azure angegeben. Leider können Sie das Ziel im Projekt selber dann nicht mehr ändern. Das kann ziemlich verwirrend sein!

Nun müssen Sie eine Verbindung zum Quell- und zum Zielsystem herstellen. Wählen Sie hierfür in der Toolbar zuerst "Connect to MySql". Wählen Sie im Verbindungsfenster den Provider aus - dies ist der ODBC-Treiber, den Sie installiert haben. Ist hier kein Treiber sichtbar, obwohl Sie einen Treiber installiert haben, dann prüfen Sie, ob Sie den Treiber und SSMA beide in der gleichen Version (32-Bit / 64-Bit) installiert bzw. gestartet haben. Außerdem benötigen Sie den Namen des Quellservers, den mySQL-Port (standardmässig 3306), sowie ein Konto mit Leserechten auf dem mySQL-System. 

Nun verbinden Sie sich mit dem SQL-Server. 

Weiterlesen
Markiert in:
  6849 Aufrufe

Reporting-Generierung per SQL-Agent-Job starten

Von Haus aus können SQL-Reports nur zeitgesteuert oder manuell generiert werden. Aber mit Powershell geht es auch als SQL-Job. SQL-Server Reporting-Services bietet die Möglichkeit, einen Report automatisch zu generieren und zu verschicken. Dies geschieht allerdings zeitgesteuert - eine jobgesteuerte Generierung ist von Haus aus nicht möglich. Zum Glück werden die Reporting-Services aber über einen Webdienst angesteuert, und dies kann man sich über ein Script nutzbar machen. In diesem Beispiel verwenden wir Powershell in einem SQL-Server Agent-Job. Es handelt sich hierbei nur um ein Funktionsbeispiel und muß natürlich noch angepasst werden. Außerdem ist zu beachten, dass das ausführende Konto über "Generate Events"-Rechte auf dem Report-Server verfügen muß, über die auch der Admin standardmässig nicht verfügt!

# Der URI zum Report-Server Webdienst für SQL 2008 R2
$RSService = "http://localhost/ReportServer/ReportService2010.asmx?wsdl"
# Aufruf mit Default-Credentials
$RSServiceProxy = New-WebServiceProxy -uri $RSService -class RS2 -Namespace ReportingWebservice -UseDefaultCredential
# Alterantiv aufruf mit einem anderen Benutzernamen - die Credentials werden im Beispiel per Eingabefenster abgefragt. 
$RSServiceProxy = New-WebServiceProxy -uri $RSService -class RS2 -Namespace ReportingWebservice -Credential Get-Credential
# Anzeigen der verfügbaren Subscriptions
$RSServiceProxy.ListSubscriptions("")
# Speichern der ID des Jobs "Sales_Order_Details_2008R2
$id = $RSServiceProxy.ListSubscriptions("") | where Report -eq "Sales_Order_Detail_2008R2" | select subscriptionID -ExpandProperty
# Starten des Jobs
$RSServiceProxy.FireEvent("TimedSubscription",$id,"") # Achtung! Bei älteren Versionen gibt es den 3. Parameter (site, für Sharepoint-Integrated), nicht!

Für ältere Reporting-Services müssen die ersten beiden Zeilten lauten:

# Der URI zum Report-Server Webdienst für SQL 2005
$RSService = "http://localhost/ReportServer/ReportExecution2005.asmx?wsdl"
$RSService = New-WebServiceProxy -uri $ReportExec -class RS -Namespace ReportingExecWebservice -UseDefaultCredentials

  3266 Aufrufe

Windows Browserwahl nach Windows-Installation deaktivieren

Sie rollen automatisch ein Betriebssystem mit einem alternativen Browser aus, aber Windows will trotzdem vom User jedes mal einen Standardbrowser erfragen. Noch so ein einem EU-Kartellverfahren geschuldetes Feature. Mit diesem Registry-Key schalten Sie die Abfrage aus:

Schlüssel: "HKLM\SOFTWARE\BrowserChoice"
Wert: "Enable",Reg_Dword,0

  2481 Aufrufe

PDF-Dateien zusammenführen und trennen

Um ein PDF-Dokument zu bearbeiten, gibt es eine Reihe von kostenpflichtigen Tools. Um aber einfach nur Dokumente zusammenzufügen, oder Seiten aus einem Dokument zu extrahieren, gibt es kostenlose tools. Sehr empfehlenswert ist hier PDFtk, das PDF-Toolkit. Das Tool besteht aus einer Sammlung von Kommandozeilentools sowie einer kostenlosen GUI. In die GUI kann man die Dokumente, die man bearbeiten möchte, laden, in der rechten Spalte die Seiten angeben, die man aus einem Dokument extrahieren oder zusammenfügen möchte, und mit einem Klick erhält man ein neues Dokument. Sehr praktisch, klein und einfach."

  2976 Aufrufe

Batteriestatus mit Powershell abfragen

Den Batteriestatus finden Sie in der CIM-Klasse Win32_Battery. Die Abfrage erfolgt über die Commandlets GET-WMIOBJECT bzw. GET-CimInstance (ab Windows 8):

Get-WmiObject Win32_Battery | Select-Object batterystatus

bzw.

Get-CimInstance Win32_Battery | Select-Object batterystatus

Möglicher Status:
1: Die Batterie entlädt sich
2: Das Gerät hat Netzstrom - nicht erforderlicherweise ladend!
3: Batterie ist voll geladen
4: Batteriestand niedrig
5: Batteriezustand kritisch
6: Batterie lädt
7: Batterie lädt, Ladezustand hoch
8: Batterie lädt, Ladezustand niedrig
9: Batterie lädt, Ladezustand kritisch
10: nicht definiert
11: Teilweise geladen

  7696 Aufrufe

Konverter-Script von .reg zu Powershell

Dieses kleine Script nimmt eine .reg-Datei (Export aus der Registry) und erzeugt daraus ein Reihe von Powershell-Kommandos, die die Einträge in der Registry vornehmen. Der Vorteil ist, dass man z.B. eine komplette Installation in einer Powershell-Datei verpacken kann, ohne explizit noch einmal reg.exe aufrufen zu müssen. So ist z.B. der Export der Dateien einfacher, da das Script "all in one" ist. Funktionsweise/Aufruf: Das Script implementiert eine Funktion convertfrom-reg. Wenn das Script aufgerufen wird, wird nur eine Funktion angelegt. Diese kann dann in der Powershell mit convertfrom-reg -regfile "Pfad zur Registrierungsdatei" aufgerufen werden. 

  3100 Aufrufe

Mit Powershell Reg_Binary Werte in die Registry schreiben

Wie Sie mit der Powershell Reg-Binary Werte in die Registry schreiben Powershell bietet ein mächtiges Kommando zum setzen von Registry-Werten: SET-ITEMPROPERTY bzw. NEW-ITEMPROPERTY. Mit Set können Sie einen bestehenden Wert überschreiben, mit New erzeugen Sie einen neuen Wert. Die Syntax ist grundstätzlich sehr simpel:

New-Itemproperty -Path "Registrierungsschlüssel" -name "Name des Werts"  -Value "Zu setzender Wert" -PropertyType "Typ des Eintrags"

Als Propertytype kommen dabei in Frage:

  • BINARY
  • DWORD
  • STIRNG
  • EXPANDSTRING
  • MULTISTRING
  • QWORD

Die meisten der Werte sind einfach zu setzen, allerdings erweist sich Binary  mitunter als widerspenstig. Wird als PropertyType "BINARY" angegeben, so muß der angegebene Wert sich auch im Binärdatentyp befinden. Eine Umwandlung kann dabei über die Konvertierungsfunktion [BINARY] erfolgen. Ein wenig trickreich wird es, wenn man Daten z.B. aus einem Regfile ausliest, weil beim Registrierungsepxort die Daten nicht als Binärdaten ausgegeben werden, sondern als HEX-Zahlen. Diese müssen vorher erst wieder ins Dezimalformat umgewandelt werden, bevor man sie ins Binärformat konvertieren kann. Eine mögliche Lösung sieht so aus:

New-ItemProperty -Path 'HKCU:\Software\' -name "EinWert"  -Value (&{'c7,02,00,00'.split(",") | %{"0x"+$_}}) -PropertyType BINARY}

Kurze Erklärung: Die Hex-Werte werden in einem Script-Block aufgesplittet und per String-Addition für Powershell in einen Hex-Wert gewandelt. Diesen kann Powershell dann implizit konvertieren. Weitere Informationen zur Konvertierung finden Sie in unserem vorigen Tipp.

  8186 Aufrufe

Hex, Binary und Char mit Powershell

Powershell bietet eine Reihe von mächtigen Konvertierungsoptionen, um Datentypen ineinander umzuwandeln. Normalerweise reicht es, die Konvertierungsfunktion [Datentyp[]] vor den umzuwandelnden Wert zu schreiben. Um Beispielsweise einen String in ein Array zu konvertieren, reicht folgende Befehlszeile:

[BYTE[]]"Netz-Weise"

Als Ergebnis erhalten Sie die einzelnen Buchstaben. Auf die gleich Weise können Buchstaben in seinen ASCII-Code umwandeln:

[BYTE[]][CHAR[]]"Netz-Weise

Diese Kommandozeile gibt als Ergebnis die ASCII-Represäntation zurück. Dabei wird erst per [CHAR[]] der String in seine Einzelbuchstaben konvertiert, und danach konvertiert [BYTE[]] die Einzelbuchstaben in Ihre ASCII-Codes (Byte-Reräsentation). Powershell kann intern bereits mit Hexadezimalzahlen arbeiten. Das ist z.B. deshalb spannend, weil die Registry beispielsweise Byte-Werte als Hex-Codes speichert (Reg-Binary-Werte). Um eine Hex-Zahl in eine Dezimalzahl umzuwandeln, muß man vor die Zahl nur eine 0x schreiben, schon konvertiert Powershell automatisch. Alternativ klappt das auch mit einer .net-Methode:

[Int]::Parse($Hexzahl, [System.Globalization.NumberStyles]::HexNumber)

$Hexzahl ist hier eine Variable, die den Hexwert beinhaltet. Um eine Reihe von Hexzahlen in Binärwerte umzuwandeln, bietet sich daher folgende kurze Kommandozeile an:

"68,02,00,00,21".split(",") | foreach-object {`"0x`"+`$_}

"68,02,00,00,21" ist ein String, der Inhalt sind 5 Hexcodes. Wir splitten den String mit der Split-Funktion in Einzelwert, und stellen mit der Pipeline vor jede Einzelzahl per Stringverkettung ein "0x". Die Ausgabewerte werden von Powershell automatisch als Hex-Werte erkannt und umgewandelt.

Weiterlesen
  8218 Aufrufe