Kategorie: Tutorials

Windows 7: Update dauert ewig oder findet nichts

Windows 7 Logo

Seit geraumer Zeit beschweren sich Benutzer von Windows 7 und teilweise auch Windows 8.1, dass die Windows Update-Suche nicht mehr richtig funktioniert. Die Suche dauert extrem lange oder findet überhaupt keine Updates. In diesem Artikel möchte ich euch das Problem und die Ursache genauer erklären und selbstverständlich auch eine Lösung aufzeigen.

Problembeschreibung

Bei der Suche nach Windows Updates werden keine Updates gefunden oder sie dauert unheimliche lange. Windows zeigt lediglich den Hinweis an: “Es wird nach Updates gesucht…”. Teilweise vergehen viele Stunden, bis irgendetwas gefunden wird. Während der Suche sind gleichzeitig eine hohe CPU-Last (100 % auf einem Kern) und ein angestiegener RAM-Verbrauch durch “svchost.exe” feststellbar.

Windows 7 Update Suche

Das Problem existiert seit Juli 2015 und tritt vor allem unter Windows 7 SP1 auf, wobei aber auch Nutzer von Windows 8.1 betroffen sind. Im Internet finden sich zahlreiche Foren-Threads mit entsprechenden Fragestellungen. Viele Nutzer sind verzweifelt und wissen nicht mehr weiter. Insbesondere nach einer Neuinstallation von Windows 7 tritt der Fehler häufiger auf.

Ursache

Oftmals liest man, dass eine langsame Internetverbindung oder die Microsoft-Server Ursache des Problems sein sollen. Dies ist definitiv nicht der Fall! Das Kernproblem der langsamen Windows Update-Suche ist vielmehr auf den komponentenbasierten Ansatz (CBS, Component-Based Servicing) mit .MSU-Paketen zurückzuführen. Kurz gesagt ist die Suche und Installation von Updates so komplex geworden, dass die Prüfung von bereits installierten Updates, von benötigten neuen Updates und von Abhängigkeiten einfach ewig dauert. Dadurch wird auch die oben beschriebene hohe CPU-Last erzeugt.

Eine ausführlichere Erklärung findet ihr bei Super User oder in der Microsoft Community (Beitrag von xp.client).

Lösung

Winfuture hat mittlerweile einen eigenen Fix veröffentlicht, welcher die benötigten Updates zur Behebung des Fehlers automatisch in der richtigen Reihenfolge installiert. Da diese Variante deutlich unkomplizierter und schneller ist, solltet ihr auf jeden Fall einen Blick darauf werfen: WinFuture UpdateFix für Windows 7

Microsoft hat das Problem erkannt und hat ein Update für Windows Update veröffentlicht, welches das Problem in fast allen Fällen behebt. Folgendermaßen müsst ihr vorgehen.

  1. Als Voraussetzung für die Installation des oben genannten Updates muss zuerst ein anderes Update (KB3020369) installiert werden.
  2. Vor der Installation muss der “Windows Update” Dienst beendet werden. Dies macht ihr am besten direkt über “Dienste” oder alternativ über die Eingabeaufforderung und den Befehl “net stop wuauserv”.
  3. Jetzt könnt ihr das “April 2015 servicing stack update” KB3020369 herunterladen. Hier die Links für Windows 7 x64 und Windows 7 x86.
  4. Update installieren und PC anschließend neu starten.
  5. Jetzt folgt das oben erwähnte “Update für Windows Update”, welches Teil des “July 2016 update rollup” KB3172605 ist. Hier ist der Link für Windows 7 x64 und hier für Windows 7 x86.
  6. Der “Windows Update” Dienst muss hierfür ein weiteres Mal beendet werden.
  7. Update installieren und PC anschließend neu starten.
  8. Jetzt könnt ihr manuell nach Updates suchen und nach spätestens einigen Minuten solltet ihr alle verfügbaren Updates für euer System sehen.

Ich hoffe euch hilft mein Artikel.

Bei Problemen unter Windows 8.1 hilft euch mein Artikel “Windows 8.1: Update dauert ewig oder findet nichts“.

Windows 10 Fehler: Netzwerkprotokoll fehlt

Windows 10 Logo

Mit dem Feature-Update auf Windows 10 Version 1511 hatten einige User das Problem, dass die Netzwerkverbindung und damit auch das Internet nicht mehr richtig funktionierte. Da das Problem offensichtlich vereinzelt immer noch existiert, nachfolgend ein kleiner Troubleshooting-Guide.

Problembeschreibung

Vor wenigen Tagen konnte ich dasselbe Problem auf einer Test-VM mit Windows 10 feststellen. Von heute auf morgen bekam ich beim Versuch eines Netzwerkzugriffs folgenden Fehler:

Fehlercode 0x80070035
Der Netzwerkpfad wurde nicht gefunden.

Windows Fehler 0x80070035

Also habe ich die Diagnose geöffnet, welche auch direkt ein Problem gefunden hat:

Auf diesem Computer fehlt mindestens ein Netzwerkprotokoll.

Windows 10 Fehler Netzwerkprotokoll fehlt

Automatische Reparatur hilft nur manchmal

Anschließend habe ich wie empfohlen die Reparatur ausgeführt. Damit ließ sich der Fehler beheben und das Netzwerk funktionierte wieder ohne Probleme. Am nächsten Tag tauchte der Fehler erneut auf und die Reparatur konnte dieses Mal keine Abhilfe schaffen. Eine kurze Internetrecherche zeigte schnell auf, dass viele User mit diesem Problem zu kämpfen hatten. Glücklicherweise existieren weitere Lösungsansätze.

Bug in Windows 10 Version 1511

Das Problem wurde durch einen Bug in Windows 10 Version 1511 verursacht, welcher laut Microsoft mit dem 2. kumulativen November-Update KB3120677 behoben worden sein sollte. Das scheint aber nicht für alle User zu gelten. In diesem Forenthread bei Microsoft wurde ein Workaround gepostet, der teilweise zu funktionieren scheint.

Netzwerk zurücksetzen

Dazu muss der Geräte-Manager geöffnet, dort im Menü auf “Ansicht” geklickt und die Option “Ausgeblendete Geräte anzeigen” aktiviert werden. Anschließend müsst ihr alle Netzwerkadapter löschen (Rechtsklick auf das Gerät und Option Deinstallieren auswählen) und dann das System neustarten.

Geräte-Manager Netzwerkadapter

Zusätzlich könnt ihr dann noch den TCP-IP-Stack des Netzwerkadapters zurücksetzen. Hierfür muss die Eingabeaufforderung mit Adminrechten gestartet werden. Dann den Befehl “netsh winsock reset” eingeben, mit der Eingabetaste bestätigen und den PC erneut durchstarten.

Sonstige Lösungsmöglichkeiten

Sollte das Netzwerk immer noch nicht funktionieren, solltet ihr weitere Dinge überprüfen.

Zuerst einmal sollten die Netzwerk- bzw. WLAN-Treiber auf die neueste Version aktualisiert werden. Ohne Internet ist das natürlich schwer, weshalb ihr die Treiber am besten mit einem anderen Gerät von der Herstellerseite herunterlädt und dann auf den problembehafteten PC überträgt.

Anschließend sollten die Firewall-Einstellungen von den diversen All-In-One-Security-Lösungen geprüft werden, sofern solche zum Einsatz kommen. Wer ganz sicher gehen möchte sollte diese komplett deinstallieren und anschließend auch das Lösch-Tool des Herstellers ausführen. Ebenso sollten Virenscanner entfernt werden, da diese oft eigene Filtertreiber mitbringen, welche das Problem verursachen könnten.

Wer die eingebaute Windows-10-Firewall einsetzt, sollte die Einstellungen zurücksetzen. Dazu einfach die Windows-Firewall öffnen und auf der linken Seite auf den Link “Standard wiederherstellen” klicken (siehe Screenshot). Die Änderungen werden nach einem Neustart wirksam.

Windows 10 Firewall

Ich hoffe, dass euch der ein oder andere Tipp helfen und euer Problem damit behoben werden konnte.

Active Directory-Based Activation (ADBA) vs. Key Management Services (KMS)

Microsoft Logo

Active Directory-Based Activation (ADBA) ist die neueste Möglichkeit aus dem Hause Microsoft zur Volumenaktivierung von Produktlizenzen. ADBA wurde zusammen  mit Windows 8 bzw. Windows Server 2012 eingeführt und stellt neben KMS (Key Management Service) und MAK (Multiple Activation Key) eine dritte Aktivierungsmöglichkeit dar. Nachdem ich KMS und MAK bereits in meinem Artikel “Microsoft Produktaktivierung – MAK vs. KMS” vorgestellt habe, folgt nun ein genauerer Blick auf das Active Directory-Based Activation.

Wie der Name schon vermuten lässt, kann ADBA nur Systeme aktivieren, die mit der Domäne verbunden sind. Die Aktivierung erfolgt vollautomatisch beim Domain-Join und ist wie bei der KMS-Aktivierung für 180 Tage gültig. Eine Reaktivierung erfolgt automatisch, sofern das System mit einem Domain Controller (DC) kommunizieren kann. Ein Aktivierungs-Threshold von mindestens 25 Computern wie bei KMS existiert bei ADBA nicht. Damit ist die neue Methode auch für kleinere Umgebungen mit einer geringen Anzahl an Systemen vorteilhaft.

ADBA funktioniert erst ab Windows 8 bzw. Windows Server 2012 bzw. Office 2013. Selbstverständlich werden auch neuere Betriebssysteme wie Windows 8.1, Windows 10, Windows Server 2012 R2 und Windows Server 2016 unterstützt. Auch Office 2016 funktioniert problemlos. Bei älteren Versionen wie Windows 7, Windows 2008 R2 oder Office 2010 muss die Aktivierung weiterhin via KMS oder MAK erfolgen.

Aus diesem Grund werden die meisten Unternehmen auf einen Parallelaufbau mit ADBA für die neuen und KMS für die alten Systeme setzen. Sobald keine alten Systeme mehr verwendet werden, kann der KMS-Host abgeschaltet werden.

Nachfolgend die wichtigsten Vorteile von ADBA gegenüber KMS:

  • Aktivierung erfolgt nahezu ohne Zeitverzögerung direkt beim Domänen-Join
  • Aktivierung erfolgt Forest-weit (bei KMS sind hierzu in jeder Domäne zusätzliche DNS-Einträge notwendig)
  • keine Mindestanzahl von 25 Computern wie bei KMS
  • ein Server weniger zum Administrieren und Updaten, sobald KMS-Host abgeschaltet werden kann

Einrichtung von Active Directory-Based Activation

Einzige Voraussetzung ist, dass Active Directory bereits auf das Schema-Level von Windows Server 2012 (Version 56) aktualisiert wurde. Anschließend kann die Aktivierung über Active Directory eingerichtet werden, was nur wenige Minuten dauern sollte. Bei Microsoft gibt es zwei ausführliche Anleitungen mit weiteren Informationen:

Kategorien: Tutorials Windows

Active Directory Schema Version herausfinden

Microsoft Logo

Das Active Directory Schema definiert die Datenbank des Verzeichnisdienstes. In der AD-Datenbank werden Datensätze als “Objekte” bezeichnet und deren Eigenschaften (Datenfelder) als “Attribute”. Das Schema legt also fest, welche Objektklassen und Attribute im AD existieren.

Mit jedem neuen Betriebssystem führt Microsoft neue Features ein, welche gleichzeitig oft auch neue Klassen und Attribute im Active Directory voraussetzen. Bei der Aufnahme eines Domänencontrollers (DC) mit einer neuen Betriebssystemversionen muss daher das AD-Schema aktualisiert werden. Aus diesem Grund ist die Active Directory Schema Version standardmäßig auch immer so aktuell, wie der neueste DC.

Windows Server Version Active Directory Schema Version
Windows 2000 13
Windows Server 2003 30
Windows Server 2003 R2 31
Windows Server 2008 44
Windows Server 2008 R2 47
Windows Server 2012 56
Windows Server 2012 R2 69
Windows Server 2016 87

Unabhängig davon existieren einige Möglichkeiten, um die aktuelle Active Directory Schema Version herauszufinden.

DSQuery

Via DSQuery kann die Schema Version über die Eingabeaufforderung angezeigt werden:

dsquery * CN=Schema,CN=Configuration,DC=EXAMPLE,DC=DOMAIN -Scope Base -attr objectVersion

PowerShell

Get-ADObject (Get-ADRootDSE).schemaNamingContext -properties objectVersion

Registry

Die AD Schema Version kann zudem auf jedem DC in der Registry eingesehen werden:

HKLM\SYSTEM\CurrentControlSet\Services\NTDS\Parameters\<Schema Version>

Repadmin

Mit dem Tool “repadmin” kann der Status des Attributes über alle DCs hinweg abgefragt werden. Damit kann beispielsweise die Replikation bei einer Schemaerweiterung überprüft werden.

repadmin /showattr * cn=schema,cn=configuration,dc=EXAMPLE,dc=DOMAIN /atts:ObjectVersion

ADSI Edit

  • “ADSI Edit” starten
  • Auf der linken Seite Rechtklick auf “ADSI Edit” ausführen und “Connect to” auswählen
  • Unter “Connection Point” “Well known naming context” auswählen und aus dem Drop-Down-Menü “Schema” wählen
  • Unter “Computer” ggf. noch den Namen der Domäne angeben und auf den Button “OK” klicken
  • Auf der linken Seite auf den neuen Punkt “Schema…” klicken und erweitern.
  • Rechtsklick auf den Schema Container “CN=Schema,CN=Configuration,DC=…” und “Properties” auswählen
  • Die Schema Version des Active Directory wird unter dem Attribut “objectVersion” aufgeführt

Kategorien: Tutorials Windows

WordPress von HTTP auf HTTPS umstellen

WordPress Logo

Immer mehr Webseiten und Blogs wechseln von HTTP auf HTTPS. Kein Wunder, denn das HTTPS-Protokoll ermöglicht eine verschlüsselte und sichere Kommunikation zwischen Webserver und Webbrowser. Die Verschlüsselung erfolgt mittels TLS, was oft noch unter der Vorgängerbezeichnung SSL bekannt ist. Viele Webseitenbetreiber werden sich jetzt sicherlich fragen, warum sie ihre Webseite auf HTTPS umstellen sollten. Auch ich habe mir für die Umstellung sehr lange Zeit gelassen, dies jetzt aber endlich nachgeholt. In Zeiten von Let’s Encrypt ist das meist schnell und einfach erledigt und obendrein noch kostenlos. Darüber hinaus seht ihr nachfolgend noch ein paar weitere Gründe, warum der Umstieg auf HTTPS zukünftig doch sehr sinnvoll sein kann:

  • Die Verschlüsslung einer Webseite ist mittlerweile ein Rankingfaktor bei Google.
  • Google Chrome soll ab Version 56 (geplant für Januar 2017) vor unverschlüsselten Webseiten warnen. In der Adressleiste soll zukünftig deutlich darauf hingewiesen werden, wenn eine Webseite via HTTP-Verbindung aufgerufen wird.
  • Daten von und zu der Webseite werden verschlüsselt übertragen, was vor allem beim Anmelden einen deutlichen Sicherheitsvorteil darstellt.
  • HTTPS ist einfach Stand der Technik.

Nachdem das geklärt ist, können wir mit der Umstellung starten.

1. Vorbereitungen, Backup erstellen

Bevor die Umstellung beginnt, solltet ihr unbedingt ein Backup eurer WordPress-Datenbank anfertigen. Später müssen ein paar Änderungen in der Datenbank durchgeführt werden, weshalb eine vorherige Sicherung unabdingbar ist. Es gibt einige WordPress-Plugins, welche die Aufgabe übernehmen. Ich verwende seit einigen Jahren BackWPub und bin nach wie vor hochzufrieden.

Außerdem sollte das Caching deaktiviert und der Cache gelöscht werden, sofern aktiv.

2. Zertifikat kaufen bzw. erstellen und installieren

Als nächstes müsst ihr euch das benötigte SSL-Zertifikat besorgen, auf dem Webserver einbinden und für eure Webseite HTTPS aktivieren. Das Einrichten des SSL-Zertifikats läuft bei jedem Hoster anders ab, weshalb ich nicht näher auf dieses Thema eingehe und nur ein paar Links in die Runde werfe:

Selbstverständlich könnt ihr euch auch an den Support wenden.

3. WordPress-URL anpassen

Im ersten Schritt muss die Adresse zur WordPress-Installation angepasst werden. Dazu meldet ihr euch im Backend an und wählt im Menü “Einstellungen” den Punkt “Allgemein” aus. Beide URLs müssen von “http://” auf “https://” geändert werden (siehe Screenshot):

WordPress HTTPS

Nach dem Speichern müsst ihr euch neu anmelden, was dann bereits per HTTPS geschieht (sofern bei Punkt 2 alles richtig gemacht wurde).

Anschließend solltet ihr noch eure “wp-config.php” Datei (befindet sich im Hauptverzeichnis eurer WordPress-Installation) öffnen und nachschauen, ob hier irgendwo eure alte URL eingetragen ist. Wenn sich dort beispielsweise der Eintrag

define( 'WP_CONTENT_URL', 'http://www.antary.de/wp-content' );

befindet, sollte dieser durch die neue URL ersetzt werden. Wenn in der “wp-config.php” nichts zu finden ist könnt ihr mit dem nächsten Schritt fortfahren.

4. Alle URLs in der Datenbank anpassen

In der Datenbank muss jetzt noch die alte URL durch die neue HTTPS-URL ersetzt werden. WordPress speichert nahezu jede URL mit absoluten Pfaden in der DB, was im Umkehrschluss bedeutet, dass die Anpassung an sehr vielen Stellen vorgenommen werden muss und daher nicht händisch erfolgen kann. In vielen Anleitungen wird beschrieben, wie die URL mittels phpMyAdmin angepasst werden kann. Von diesem Vorgehen solltet ihr tunlichst die Finger lassen, denn damit könnt ihr schnell die Einstellungen von Plugins zerstören oder im schlimmsten Fall eure gesamte Seite lahmlegen. Stattdessen solltet ihr zu bewährten Plugins greifen, die mit serialisierten Arrays und Objekten umgehen können.

Sehr empfehlenswert und zuverlässig ist das Plugin Better Search Replace. Alternativ könnt ihr aber auch zu Search & Replace greifen. Hier die einzelnen Schritte für Better Search Replace:

  1. Plugin installieren und aktivieren.
  2. Im Menü unter “Werkzeuge” den Punkt “Better Search Replace” aufrufen.
  3. Dort müsst ihr zuerst die alte HTTP- und anschließend die neue HTTPS-URL eintragen. Jetzt alle Tabellen markieren und die Option “Auch GUIDs ersetzen?” aktivieren. Zudem kann auf Wunsch auch ein Testlauf gemacht werden, was nie verkehrt ist.
    Better Search Replace
  4. Sofern alles passt, kann der Haken bei “Testlauf?” deaktiviert werden und die Änderungen werden durchgeführt.
  5. Damit sind alle URLs im Blog von HTTP auf HTTPS umgestellt und das Plugin kann wieder deaktiviert und deinstalliert werden.

5. Alte HTTP-URLs via .htaccess umleiten

Der nächste Schritt kann bei einigen Webhostern direkt in den Einstellungen des Webspaces bzw. des Webservers erledigt werden. Wer die Möglichkeit nicht besitzt, muss auf .htaccess ausweichen.

Eine sogenannte 301-Weiterleitung stellt sicher, dass alle Aufrufe der Webseite auf die neue HTTPS-URL umgeleitet werden. Alle alten HTTP-Links zu eurer Webseite werden damit automatisch auf die neue HTTPS-URL weitergeleitet. Wenn ihr diesen Schritt nicht umsetzt, ist eure Webseite weiterhin auch per HTTP erreichbar, was erstens nicht Sinn dieser Umstellung ist und zweitens zu Komplikationen mit Suchmaschinen führen kann, Stichwort “Duplicate Content”.

Bei einem Apache-Webserver sind für die Umleitung folgende Zeilen in der .htaccess-Datei notwendig.. Wenn möglich sollten diese ganz am Anfang stehen.

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

6. Mixed Content beseitigen

Es kann durchaus noch vorkommen, dass nicht alle Inhalte per HTTPS ausgeliefert werden. In diesem Fall erscheint in der Adresszeile links neben eurer Webseite kein grünes Schloss, sondern je nach Browser ein unterschiedlicher Warnhinweis (siehe Screenshot):

HTTPS Mixed Content Warnung

HTTPS Mixed Content Warnung (links Firefox, rechts Google Chrome)

Sollte das der Fall sein, muss geprüft werden, welche Inhalte noch per HTTP geladen werden. In Firefox und Google Chrome kann dies sehr schnell und einfach erledigt werden. Einfach die Seite mit dem “Mixed Content” aufrufen, auf der Tastatur F12 drücken und dort den Tab “Console” (Chrome) bzw. “Konsole” (Firefox) auswählen. Dort werden dann alle Inhalte aufgelistet, die noch per HTTP und damit unverschlüsselt eingebunden sind:

Mixed Content in Google Chrome Console

Diese Inhalte werden sehr oft von Widgets, Plugins oder Themes ausgeliefert, was sich jedoch in den meisten Fällen leicht anpassen lässt. Eine weitere häufige Fehlerquelle sind ältere Embeds (z.B. YouTube-Videos), die noch als HTTP-Link eingebunden wurden. Hier müsst ihr von Hand die HTTPS-URL hinterlegen

Ebenso muss die Einbindung von VG-Wort-Zählpixel geändert werden. Standardmäßig sehen die Zählpixel folgendermaßen aus:

<img src="http://vg05.met.vgwort.de/na/52c49b1dfb18f7858" alt="" width="1" height="1" />

Unabhängig von der alten Zählpixel-URL muss bei Verwendung von HTTPS folgende VG-Wort-Domain verwendet werden: “https://ssl-vg03.met.vgwort.de”. Hier ein Beispiel der neuen URL:

<img src="https://ssl-vg03.met.vgwort.de/na/52c49b1dfb18f7858" alt="" width="1" height="1" />

Genauere Infos zu diesem Thema liefern die letzten beiden Links aus meinen Quellen unten.

Wenn alle Inhalte per HTTPS eingebunden sind, wird die Webseite als sicher dargestellt. Das grüne Schloss in der Adresszeile sticht sofort ins Auge:

sichere HTTPS-Webseite

sichere HTTPS-Webseite (links Firefox, rechts Google Chrome)

7. Weitere Tätigkeiten

Abschließend solltet ihr noch die Suchmaschinen über die Umstellung auf HTTPS informieren. Wenn ihr alles wie oben beschrieben erledigt habt, sollten die Suchmaschinen die Änderung normalerweise selbstständig erkennen. Es kann aber nicht schaden die Änderung selbstständig mitzuteilen. Dies könnt ihr zum einen über die Google Search Console (ehemals Google Webmaster Tools) erledigen und zum anderen über eure “sitemap.xml”. Falls die Sitemap in eurer “robots.txt” referenziert wird, müsst ihr dort ggf. auch noch den Pfad anpassen.

Wenn ihr Google Analytics einsetzt müsst ihr des Weiteren die neue URL hinzufügen. In Google Analytics muss für die HTTPS-Variante eurer Seite eine eigene “Property” angelegt werden. Alternativ könnt ihr auch die URL der bestehenden Property anpassen. Wie das genau funktioniert müsst ihr selber herausfinden, ich wollte das nur erwähnt haben ;-)

Wer bis hier noch nicht genug hat der kann sich noch mit den “HTTP Security Headern” auseinandersetzen. Damit lässt sich die Sicherheit von Webseiten, die ausschließlich über HTTPS erreichbar sind, zusätzlich steigern. Die Webseite securityheaders.io hilft euch bei der Überprüfung dieser Security Header. Ich habe einen schönen Blogartikel zu diesem Thema gefunden, den ich euch nicht vorenthalten möchte: https://scotthelme.co.uk/hardening-your-http-response-headers/

Fazit

Alles in allem war die Umstellung aufwändiger als gedacht. Dennoch solltet ihr bei einer Umstellung alle Punkte beachten und gewissenhaft arbeiten, denn sonst kann die HTTPS-Umstellung schnell nach hinten losgehen. Wer sich die Umstellung zutraut sollte diese meiner Meinung nach auf jeden Fall angehen. Mittel- bis langfristig wird sich dies auf alle Fälle positiv bemerkbar machen.

Gerne könnt ihr mir Anmerkungen oder weitere Tipps in den Kommentaren hinterlassen.

Quellen

Kategorien: Tutorials Wordpress

Einfaches Logging für PowerShell-Skripte

PowerShell 5 Icon

Lange und komplexe PowerShell-Skripte werden schnell unübersichtlich und man verliert den Überblick, wo das Skript gerade steht und was aktuell abgearbeitet wird. Aus diesem Grund solltet ihr in jedem Skript bereits von Anfang an eine einfache Log-Funktionalität einbauen. Dies ist in vielen Fällen schneller und einfacher zu realisieren, als das Logging später aufwändig nachzurüsten. Vor allem bei Skripten, welche kritische Daten schreiben, ist das Logging im Nachhinein oftmals ein Segen. Beispielsweise wenn euer PowerShell-Skript Daten im AD ändert und im Nachgang einige Änderungen rückgängig gemacht werden müssen.

Daher habe ich eine kleine Funktion geschrieben, welche ich nahezu am Anfang jedes PowerShell-Skripts einbinde. Die Ausgabe erfolgt sowohl in der Konsole als auch in einer Log-Datei. Neben dem aktuellen Datum und der Uhrzeit ermöglicht die Log-Funktion zudem die Definition von verschiedenen Log-Leveln.

Das Skript steht auch als Download zur Verfügung.

$path = "C:\Temp"
$date = get-date -format "yyyy-MM-dd-HH-mm"
$file = ("Log_" + $date + ".log")
$logfile = $path + "\" + $file

function Write-Log([string]$logtext, [int]$level=0)
{
	$logdate = get-date -format "yyyy-MM-dd HH:mm:ss"
	if($level -eq 0)
	{
		$logtext = "[INFO] " + $logtext
		$text = "["+$logdate+"] - " + $logtext
		Write-Host $text
	}
	if($level -eq 1)
	{
		$logtext = "[WARNING] " + $logtext
		$text = "["+$logdate+"] - " + $logtext
		Write-Host $text -ForegroundColor Yellow
	}
	if($level -eq 2)
	{
		$logtext = "[ERROR] " + $logtext
		$text = "["+$logdate+"] - " + $logtext
		Write-Host $text -ForegroundColor Red
	}
	$text >> $logfile
}

# log something
Write-Log "this is a simple log test"

# create warning log entry
Write-Log "this is a simple log test" 2

# use more than simple variables in a string
$cmds = get-command
Write-Log "there are $($cmds.count) commands available"

Kategorien: Tutorials Windows

Lösung: Windows ignoriert Gruppenrichtlinieneinstellung Point-and-Print-Einschränkungen

In größeren Firmennetzwerken mit vielen Clients wird oftmals von der Gruppenrichtlinieneinstellung Point-and-Print-Einschränkungen (Point and Print Restrictions) Gebrauch gemacht, um den Administrationsaufwand gering zu halten. Mit dieser Einstellung lässt sich steuern, wie Benutzer Druckertreiber von Druckerservern installieren können.

Seit einigen Wochen kommt es allerdings teilweise zu Problemen. Einige User berichten von einer Sicherheitsmeldung, wenn sie bestimmte Drucker verknüpfen bzw. installieren wollen. Die Meldung lautet “Vertrauen Sie diesem Drucker?”.

Vertrauen Sie diesem Drucker?

Ursache des Problems ist das Security-Bulletin MS16-087 aus dem Juli-Patchday. Genauer gesagt KB3170455 unter Windows 7 bzw. 8.1 und KB3163912 unter Windows 10 bzw. KB3172985 bei Windows 10 v1511. Nach der Deinstallation des entsprechenden Updates ist das Problem verschwunden und die Benutzer können ohne Warnmeldung Drucker installieren. Allerdings ist dieser Workaround nicht empfehlenswert und in vielen Netzwerken auch gar nicht möglich.

Auf der Suche nach einer sinnvollen Lösung bin ich auf den Thread “KB3163912 breaks Point and Print Restrictions GPO settings” im TechNet gestoßen. Hier berichten viele User von ähnlichen Problemen. Nach weiterer Fehlersuche war schnell klar, dass dieses Problem lediglich bei Druckern auftritt, die keine “packaged”-Treiber verwenden.

Einige haben sogar einen Case via Microsoft-Premiumsupport eröffnet. Die offizielle Antwort von Microsoft lautet, den Druckerhersteller zu kontaktieren und “packaged” Treiber zu verwenden. Leider existiert in einigen Fällen aber kein “packaged”-Treiber, was vor allem (aber nicht ausschließlich) ältere Drucker betrifft.

Lösung

Schlussendlich hat ein findiger User doch noch eine brauchbare Lösungsmöglichkeit vorgeschlagen. Mit Hilfe der Registry lässt sich ein “un-packaged”-Treiber in einen “packaged”-Treiber verwandeln. Dazu öffnet man den Registrierungseditor und navigiert zu folgendem Pfad:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Enviroments\Windowsx64\Drivers\...\

Dort angekommen wählt man links den betroffenen Druckertreiber aus, in meinem Beispiel den “Brother PCL5e Driver”.

Rechts muss der Wert “PrinterDriverAttributes” angepasst werden. Das niedrigste Bit des Wertes ist für die Eigenschaft “Package Aware” zuständig und muss entsprechend auf “1” gesetzt werden. Der vorhandene Wert muss dabei ungerade gemacht werden, d.h. ein Wert von “0” wird auf “1” gesetzt, ein Wert von “2” auf “3” usw. Wenn der Wert beispielsweise “5” ist dann passt er bereits und es muss nichts geändert werden. Danach muss noch der Druckdienst (Spooler, deutsch: Druckerwarteschlange) neugestartet werden. Ab diesem Zeitpunkt meldet sich der Treiber als “packaged” und kann ohne weiteren Benutzereingriff installiert werden.

Alternativ kann der betroffene Druckertreiber auch von Hand in einen “packaged”-Treiber umgewandelt werden. Hierzu reicht eine kleine Anpassung der INF-Datei aus. Bei Microsoft existieren weitere Informationen dazu. Vielleicht bekommen es damit auch einige Druckerhersteller gebacken, endlich “packaged”-Treber anzubieten.

Schwarzer Sperrbildschirm in Windows 10 Anniversary Update beheben

Windows 10 Logo

Mit Windows 10 hat Microsoft die neue Funktion Windows-Blickpunkt (englisch Windows spotlight) eingeführt, die zufällig neue Hintergrundbilder für den Sperrbildschirm anzeigt. Außerdem bietet Windows 10 die Möglichkeit, dass der Anmeldebildschirm dasselbe Hintergrundbild verwendet.

Seit dem Anniversary Update existiert aber ein Fehler, wodurch kein Hintergrundbild angezeigt wird und der Sperrbildschirm schwarz bleibt (siehe Screenshot). Wenn man die Maus bewegt oder eine Taste auf der Tastatur drückt, erscheint der Anmeldebildschirm und auch das Hintergrundbild. Der Sperrbildschirm selbst bleibt aber schwarz.

Schwarzer Sperrbildschirm

Dieser Fehler lässt sich jedoch relativ leicht beheben. Zuerst muss in die erweiterten Systemeinstellungen gewechselt werden. Es existieren mehrere Möglichkeiten um dorthin zu kommen:

  • über die Suchfunktion in der Taskleiste, “Erweiterten Systemeinstellung” suchen
  • Rechtsklick auf das “Dieser PC”-Icon auf dem Desktop, “Eigenschaften” wählen und links auf “Erweiterte Systemeinstellungen” klicken
  • in der Systemsteuerung auf “System” klicken und links auf “Erweiterte Systemeinstellungen” klicken

Erweiterte Systemeinstellungen

Dort müsst ihr im oberen Drittel unter “Leistung” auf “Einstellungen…” klicken.

Im neuen Fenster “Leistungsoptionen” muss dann die Einstellung “Animation beim Minimieren und Maximieren von Fenstern” aktiviert werden.

Wenn ihr das Fenster mit “OK” schließt wird auf dem Sperrbildschirm fortan wieder ein Hintergrundbild angezeigt. Zur Überprüfung ob es funktioniert einfach kurz den PC mit der Windows-Taste + L sperren.

Windows 10: Microsoft-Konto in lokales Konto umwandeln

Windows 10 Logo

Nur ein Klick zu viel und schon wird das lokale Windows-Konto unter Windows 10 automatisch zu einem Microsoft-Konto umgewandelt. Auch bei einer frischen Installation von Windows 10 macht es Microsoft schwerer als nötig, um ein lokales Benutzerkonto einzurichten und zu verwenden. Immerhin ist es nachträglich noch möglich, ein Microsoft-Konto in ein lokales Konto umzuwandeln. Nachfolgend eine kleine Anleitung, wie ihr vorgehen müsst.

Zuerst müsst ihr die Einstellungen öffnen und links den Menüpunkt “Konten” auswählen.

Jetzt auf den Link “Stattdessen mit einem lokalen Konto anmelden” klicken.

Vor es weiter geht müsst ihr das Passwort eures aktuell benutzten Microsoft-Kontos angeben.

Anschließend könnt ihr den Benutzernamen und optional das Passwort des lokalen Kontos festlegen.

Mit dem Klick auf den Button “Abmelden und fertig stellen” beendet ihr den Prozess. Nach einem Neustart steht euer lokales Konto zur Verfügung.

Windows 10: Standarddrucker ändert sich automatisch

Windows 10 Logo

Unter Windows 10 kämpfen viele Leute mit dem anscheinend willkürlichen Wechsel des Standarddruckers. Tatsächlich ist dies aber kein Fehler, sondern ein Feature! Die neue Funktion wurde mit dem Windows 10 November Update (Version 1511) eingeführt und sorgt dafür, dass der zuletzt verwendete Drucker automatisch als Standarddrucker gesetzt wird. Viele Leute kommen mit dieser Neuerung nicht klar und bevorzugen das altbekannte Verhalten aus den vorherigen Windows Varianten. Glücklicherweise lässt sich dies relativ einfach wiederherstellen.

In den Einstellungen unter Geräte / Drucker & Scanner findet sich die entsprechende Option.
Wenn man den Schalter bei “Standarddrucker von Windows verwalten lassen” auf “Aus” ändert, dann hat der “Spuk” ein Ende.

Möglichkeit 1: Einstellungen

Zunächst müsst ihr die Einstellungen öffnen und den Punkt “Geräte” wählen. Anschließend links im Menü zu “Drucker & Scanner” wechseln.

Hier muss die Einstellung “Standarddrucker von Windows verwalten lassen” auf “Aus” gestellt werden (siehe Screenshot).

Windows10_Standarddrucker

Diese Lösung ist nutzerspezifisch und muss für jeden Windows Benutzer separat eingestellt werden.

Für die Zentrale Einstellung kommt eher Lösung 2 in Betracht.

Möglichkeit 2: Registrierungs-Editor

Die automatische Änderung des Standarddruckers lässt sich leider nicht per Gruppenrichtlinien steuern. Wer das Feature gerne im ganzen Unternehmen deaktivieren möchte, kann dies über einen Registry-Tweak bewerkstelligen.

  1. Den Ausführen-Dialog (Windows-Taste + R) öffnen und “regedit” eingeben, damit der Registrierungs-Editor geöffnet wird.
  2. Anschließend zu folgendem Pfad navigieren:
    HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows
  3. Hier muss der Wert “LegacyDefaultPrinterMode” auf “1” gesetzt werden.
  4. Der Standarddrucker wird jetzt nicht mehr automatisch verstellt.

Zur einfacheren Umsetzung biete ich eine Registrierungsdatei an, die alle Änderungen in der Registry automatisch durchführt.

Windows 10 Standarddrucker automatisch setzen - Registry

Verwaiste Gruppenrichtlinienobjekte via PowerShell finden

Gruppenrichtlinienobjekte (GPOs) bestehen aus zwei Komponenten. Der Gruppenrichtliniencontainer (auf Englisch: Group Policy Container, kurz GPC) beinhaltet AD-bezogene Konfigurationsdaten und wird auch direkt im Active Directory gespeichert. Die Gruppenrichtlinienvorlage (auf Englisch: Group Policy Template, kurz GPT) hingegen wird im Dateisystem unter SYSVOL gespeichert und beinhaltet die Einstellungen eines Gruppenrichtlinienobjekts.

In einigen Fällen kann es vorkommen, dass entweder GPC oder GPT fehlen, wobei dann von verwaisten GPOs gesprochen wird. Jeremy Saunders hat ein Skript veröffentlicht, womit solche GPOs schnell gefunden werden können:

Verwaiste GPOs finden

Im Beispiel sind zwei GPTs zu sehen, die keine korrespondierende GPC mehr besitzen. Verwaiste GPTs stellen kein Problem dar, werden aber auf andere DCs repliziert, benötigen Speicherplatz und stören die Übersicht. Deshalb ist es sinnvoll, die übriggebliebenen SYSVOL-Bestandteile zu löschen. Davor solltet ihr natürlich sicherstellen, dass diese auch wirklich nicht mehr benötigt werden ;-)

Download PowerShell Skript “Verwaiste Gruppenrichtlinienobjekte finden”

In meinem Artikel “Unbenutzte Gruppenrichtlinien herausfinden via PowerShell” habe ich beschrieben, wie ihr nicht verknüpfte Gruppenrichtlinien identifizieren könnt.

Kategorien: Tutorials Windows

Windows 10: Alte Lautstärkeregelung reaktivieren

Windows 10 Logo

Mit Windows 10 hat Microsoft die Lautstärkeregelung im Systemtray optisch überarbeitet. Wer aber lieber die Variante von Windows 7 nutzen möchte, kann die alte Lautstärkeregelung ganz einfach wieder aktivieren.

Windows 10 Lautstärkeregelung

Windows 10 Lautstärkeregelung: Links Standard, rechts alte Variante

Die alte Lautstärkeregelung kann mit Hilfe des Registrierungs-Editors wieder aktiviert werden. Folgendermaßen müsst ihr vorgehen:

  1. Den Ausführen-Dialog (Windows-Taste + R) öffnen und “regedit” eingeben, damit der Registrierungs-Editor geöffnet wird.
  2. Anschließend zu folgendem Pfad navigieren:
    HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion
  3. Wenn der Schlüssel “MTCUVC” im linken Verzeichnisbaum nicht vorhanden ist, muss dieser von Hand erstellt werden.
  4. Darunter muss dann ein neuer “DWORD-Wert (32-Bit)” mit dem Namen “EnableMtcUvc” und dem Wert “0” erstellt werden.
  5. Die alte Lautstärkeregelung ist wieder aktiviert. Zum Deaktivieren einfach den Wert auf  “1” setzen oder den Schlüssel “MTCUVC” wieder löschen.

Zur einfacheren Umsetzung biete ich eine Registrierungsdatei an, die alle Änderungen in der Registry automatisch durchführt.

Geschützte Vimeo-Videos downloaden

Vimeo Logo

Webseiten, die Videos zu Schulungs- oder Trainingszwecken anbieten, setzen oftmals auf eingebettete Vimeo-Videos. Diese Videos werden in den Privatsphäre-Einstellungen auf Domainebene berechtigt. Dies bedeutet, dass die betroffenen Videos nur auf der dafür berechtigten Webseite eingebettet werden können. Versucht man die Videos auf anderen Webseiten einzubinden, erscheint eine Fehlermeldung.

Die URL des Videos lässt sich ohne Probleme über den Quelltext der Webseite herausfinden, aber das hilft auch nicht weiter. Beim direkten Abspielen des Videos erscheint dieselbe Fehlermeldung.

Sorry

Because of its privacy settings, this video cannot be played here.

Darüber hinaus ist auch der Download solcher Videos gesperrt. Viele Download-Tools versprechen zwar einen schnellen und einfachen Download, aber dies funktioniert in der Praxis nicht.

Download Vimeo-Videos

Wirft man einen genaueren Blick auf die Privatsphäre-Einstellungen bei Vimeo, ist schnell klar, wie die Privatsphäre auf Domainebene funktioniert. Grundsätzlich handelt es sich um gar kein wirkliches “Sicherheitsfeature”, denn die entsprechende Funktion basiert lediglich auf dem HTTP-Referrer. Damit ist es kein großes Problem an das gewünschte Video zu gelangen.

Zuerst wird der kostenlose Web-Debbuging-Proxy Fiddler benötigt. Mit Hilfe des Tools kann HTTP- und HTTPS-Traffic aufgezeichnet, analysiert und modifiziert werden. Fiddler kann hier heruntergeladen werden. Ich empfehle die Verwendung von Fiddler 4, welches allerdings ein installiertes .NET Framework 4 voraussetzt.

Nach erfolgreicher Installation kann Fiddler gestartet werden. Anschließend wählt ihr im Menü “Rules” und dann “Customize Rules… aus”. Alternativ könnt ihr auch das Tastenkürzel STRG + R nutzen.

Ein Pop-Up-Fenster erscheint und fragt, ob ihr den Fiddler2 ScriptEditor downloaden und installieren wollt. Da die notwendigen Änderungen mit diesem Editor deutlich einfacher als mit Notepad sind, empfehle ich den Editor zu verwenden.

Im ScriptEditor müsst ihr nun nach “OnBeforeRequest” suchen. An dieser Stelle kann Code zum Ergänzen oder Ändern des HTTP-Headers eingefügt werden. In unserem Fall möchten wir beim Aufruf von Vimeo-Videos einen speziellen HTTP-Referrer übergeben. Dazu müsst ihr folgende zwei Regel ergänzen. Vergesst nicht den Referrer anzupassen.

if (oSession.uriContains("vimeocdn.com")) {
	oSession.oRequest.headers.Add("Referer", "http://www.myreferer.com");           
}
if (oSession.uriContains("player.vimeo.com")) {
    oSession.oRequest.headers.Add("Referer", "http://www.myreferer.com");
}

Jetzt könnt ihr die Datei speichern und den ScriptEditor beenden. Fiddler muss aber geöffnet bleiben!

Zum Schluss müsst ihr lediglich noch dafür sorgen, dass euer Download-Tool über Fiddler läuft. Dies geschieht über die Konfiguration eines Proxy-Servers. Da dies in jedem Tool unterschiedlich aussieht, gehe ich nicht weiter darauf ein. Als Proxy-Server-IP muss “localhost” und als Port “8888” verwendet werden.

Jetzt solltet ihr geschützte Vimeo-Videos ohne Probleme downloaden können.

Kategorien: Internet Tutorials

Download privacy protected Vimeo videos

Vimeo Logo

There are a lot of websites with embedded Vimeo videos for training or education purposes. Most likely these videos are domain-level privacy protected. That means only the specific website is permitted to embed the videos. If you try to embed the video on another website you will receive an error message.

Of course it’s very easy to identify the URL of the Vimeo video via the source code of the website but this doesn’t help you. The same error will be displayed if you attempt to access the video directly.

Sorry

Because of its privacy settings, this video cannot be played here.

Furthermore it’s not possible to download the video. There are numerous video download tools which promise a fast and easy download but they will all fail.

Download Vimeo videos

If you dig deeper into the privacy settings of Vimeo you will notice how domain-level privacy is working. Generally it’s no real security feature because it’s only based on the HTTP referer. So it’s no problem to handle this.

First of all we need free web debugging proxy Fiddler. This tool allows us to capture, analyze and modify HTTP and HTTPS traffic. You can download Fiddler here. Please use Fiddler 4 if possible which requires .NET Framework 4.

When the installation is finished please launch Fiddler. Now select “Rules” from the menu and then “Customize Rules…” (or CTRL + R).

A pop-up appears and wants to know if you want to download and install Fiddler2 ScriptEditor. I recommend that because it’s much easier to do the necessary changes with this editor than in Notepad.

In ScriptEditor search for “OnBeforeRequest”. This is where you can put the code to add or modify HTTP headers. We want to add a specific HTTP referer to all requests for Vimeo videos. Enter the following rules and don’t forget to adapt the referer.

if (oSession.uriContains("vimeocdn.com")) {
	oSession.oRequest.headers.Add("Referer", "http://www.myreferer.com");           
}
if (oSession.uriContains("player.vimeo.com")) {
    oSession.oRequest.headers.Add("Referer", "http://www.myreferer.com");
}

Save the File and close ScriptEditor, but leave Fiddler running. The Fiddler part is finished.

The only thing left to do is pointing your download tool to use Fiddler. You can achieve this with configuring a proxy server. I will not discuss it in detail because every software handles this differently. Just add a HTTP proxy with host “localhost” and port “8888”.

Finally you should be able to download privacy protected Vimeo videos.

Kategorien: Internet Tutorials

PowerShell: Gruppenrichtlinien via ID finden

In der Ereignisanzeige tauchen manchmal Fehlermeldungen auf, die auf eine fehlerhafte Gruppenrichtlinie (GPO) hindeuten. Leider wird dort jedoch nur die GPO-ID aufgeführt, ohne weitere Hinweise darauf, um welche GPO es sich handelt.

Normalerweise stünde jetzt eine Suche auf dem Domänencontroller (DC) an. Doch es geht auch einfacher. Mit Hilfe der PowerShell lassen sich weitere Informationen zur betreffenden GPO herausfinden, beispielsweise Name, Version und letztes Änderungsdatum.

get-gpo -all | where {$_.id -match "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"}

Kategorien: Tutorials Windows