Windows Server 2016 WSUS

Heute habe ich zum ersten Mal WSUS (Windows Server Update Services) unter Windows Server 2016 installiert. Ich betreibe WSUS seit mehreren Windows-Generationen und habe damit eigentlich gute Erfahrungen gemacht, doch unter Windows Server 2016 wollte es von Anfang an nicht so richtig funktionieren. Die Installation ist genauso einfach wie früher auch: WSUS Rolle installieren, Post Installation Wizard ausführen, Initial Syncronization laufen lassen und Updates approven.

Nun sollten die WSUS-Clients verbinden und Updates installieren können. Dachte ich, doch es trat bei jedem Sync folgender Fehler auf:

Windows Update Error 0x8024401c

Im Prinzip ist das ein genersicher Timeout. Die Clients waren in der WSUS Console sichtbar, aber hatten alle den Status "Not reported yet". Also prinzipiell konnten sie zum WSUS Service verbinden, aber dann sind sie in ein Timeout gelaufen.

Wie üblich begann ich das Problem einzugrenzen, was ja seit Windows 10 / Windows Server 2016 ganz schön schwierig geworden ist, da man nicht mehr live die Logfiles des Windows Update Clients mitlesen kann (ETL sei dank). Powershell und Get-WindowsUpdateLogs sind nun zu verwenden. Wie komfortabel, wenn man das alle 2 Minuten neu ausführen muss wenn man die aktuellen Log-Einträge lesen will. Das Zeug das die in Redmond gesoffen haben, als sie sich das ausgedacht haben, würde ich gerne mal probieren... ;-)

Dank Google und diversen Foren kam ich nach Stunden des Stöberns und Tüftelns auf die Lösung des Problems:

In der IIS Console muss am WSUS Application Pool (Advanced Settings) folgendes geändert werden:

  • General\Queue Length: 2500
  • CPU\Limit interval (minutes): 15
  • Rapid-Fail Protection\"Service Unavailable" Response: TcpLevel
  • Recycling\Private Memory Limit (KB): 0

Danach konnten die Clients die Updates herunterladen und installieren.

Windows Server 2016 via Telefon aktivieren

Unlängst wollte ich Windows Server 2016 telefonisch aktivieren, da ich auf dem betroffenen Server weder Verbindung zu einem KMS Server, noch Internetzugang hatte. Wie ich feststellen musste, gibt es in den modernen Settings keine Möglichkeit mehr, die Art der Aktivierung zu wählen (oder ich bin blind). Auch der Troubleshooter half nicht weiter, teilte er mir nach langem Warten ("Detecting activation problems...") doch blos mit, dass ich einen funktionierenden Internetzugang sicherstellen solle ("We can't activate your copy of Windows. Make sure you're connected to the Internet and try again. If you're connected to the Internet and continue seeing this problem, contact your system administrator for more information.").

Daher habe ich Google befragt und bin auf KB921471 gestoßen.

Unter "Method 1: Activate Windows by telephone" ist da zu lesen:

  1. Click Start, and then click Run.
  2. Type SLUI 04, and then click OK to open the wizard.

Gleich mal ausprobiert und aufeinmal springt mir folgendes GUI entgegen:

Telefonaktivierung

Es geht also doch. Wieder etwas gelernt.

Blogengine.net, Standard-Theme und Kommentare

Blogengine.net hat seit dem letzten Release ein wirklich tolles Standard-Theme (dieses hier nämlich). Leider musste ich feststellen, dass man damit keine Kommentare zu den geposteten Beiträgen abgegeben kann. Da mich das irrsinnig genervt hat, bin ein wenig stöbern gegangen und wurde tatsächlich fündig. Mit nur minimalem Aufwand kann man im Standard-Theme die Kommentarfunktion aktivieren.

Dazu muss die Datei "\Custom\Themes\Standard\PostView.ascx" geändert werden.

Auszug Original-Datei:

<%@ Control Language="C#" AutoEventWireup="true" EnableViewState="false" Inherits="BlogEngine.Core.Web.Controls.PostViewBase" %>
<%@ Import Namespace="BlogEngine.Core" %>

<article class="post" id="post<%=Index %>">
    <header class="post-header">
        <h2 class="post-title">
            <a href="<%=Post.RelativeOrAbsoluteLink %>"><%=Server.HtmlEncode(Post.Title) %></a>
        </h2>
        <div class="post-info clearfix">
            <span class="post-date"><%=Post.DateCreated.ToString("dd MMMM yyyy") %></span>
            <span class="post-author"><a href="<%=Utils.AbsoluteWebRoot + "author/" + Utils.RemoveIllegalCharacters(Post.Author + BlogConfig.FileExtension) %>"><%=Post.AuthorProfile != null ? Utils.RemoveIllegalCharacters(Post.AuthorProfile.DisplayName) : Utils.RemoveIllegalCharacters(Post.Author) %></a></span>
            <span class="post-category"><%=CategoryLinks(", ") %></span>
        </div>
    </header>

Vor "</div>" müssen 2 Zeilen hinzugefügt werden:

<a class="post-comment" rel="nofollow" href="<%=Post.RelativeOrAbsoluteLink %>#comment"><%=Resources.labels.comments %> (<%=Post.ApprovedComments.Count %>)</a>
<script type="text/javascript">$('#post<%=Index %> .post-category:has(a)').append('<span class="separator"></span>');</script>

Das geänderte PostView.ascx sollte nun so aussehen:

<%@ Control Language="C#" AutoEventWireup="true" EnableViewState="false" Inherits="BlogEngine.Core.Web.Controls.PostViewBase" %>
<%@ Import Namespace="BlogEngine.Core" %>

<article class="post" id="post<%=Index %>">
    <header class="post-header">
        <h2 class="post-title">
            <a href="<%=Post.RelativeOrAbsoluteLink %>"><%=Server.HtmlEncode(Post.Title) %></a>
        </h2>
        <div class="post-info clearfix">
            <span class="post-date"><%=Post.DateCreated.ToString("dd MMMM yyyy") %></span>
            <span class="post-author"><a href="<%=Utils.AbsoluteWebRoot + "author/" + Utils.RemoveIllegalCharacters(Post.Author + BlogConfig.FileExtension) %>"><%=Post.AuthorProfile != null ? Utils.RemoveIllegalCharacters(Post.AuthorProfile.DisplayName) : Utils.RemoveIllegalCharacters(Post.Author) %></a></span>
            <span class="post-category"><%=CategoryLinks(", ") %></span>
            <a class="post-comment" rel="nofollow" href="<%=Post.RelativeOrAbsoluteLink %>#comment"><%=Resources.labels.comments %> (<%=Post.ApprovedComments.Count %>)</a>
            <script type="text/javascript">$('#post<%=Index %> .post-category:has(a)').append('<span class="separator"></span>');</script>
        </div>
    </header>

Speichern, im Browser F5 drücken und freuen. ;-)

 

Outlook Drag and Drop

Ich war schon öfter in der Situation, dass im Outlook Drag and Drop plötzlich nicht mehr funktioniert hat. Ohne jeden ersichtlichen Grund. Bis dato war der Leidensdruck nicht groß genug und ich habe es ignoriert, wenig später hat es genauso plötzlich wieder getan. Heute hats mir gereicht und ich hab mich auf die Suche gemacht. Mit einer einfachen Lösung habe ich eigentlich nicht gerechnet, im Gegenteil, ich bin davon ausgegangen dass das Problem nur schwer einzugrenzen sein wird.

Ich habe einen Artikel gefunden wo es um dieses Thema geht (hier). Ich habe ihn gelesen, und dachte mir: "Nein, einfach ESC drücken kann nicht die Lösung sein". Da man aber nichts unversucht lassen soll hab ich es dann doch probiert und siehe da, Drag and Drop funktioniert auf einmal wieder. Ich hab mir kräftig die Augen gerieben und selbst in den Arm gezwickt, um sicher zu gehen, dass ich eh munter bin. ;-)

Bitlocker AD Backup

Das ist eine Notiz für mich selbst, damit ich nicht später danach suchen muss, falls ich es wieder benötigen sollte. Bitlocker kann seine Recovery Information im Active Directory speichern. Wenn die Infos jedoch aus irgendeinem Grund fehlen, heisst das nicht, dass man das bzw. die verschlüsselten Laufwerke wieder entschlüsseln muss. Mit 2 kurzen Befehlen können die Recovery Informationen im AD aktualisiert werden.

manage-bde -protectors -get c:

20160818-Bitlocker-01.png

manage-bde -protectors -adbackup c: -id  '{<numerical password ID>}'

20160818-Bitlocker-02.png