Windows Server 2016 RDS-SH Effekte

Problem:

Ein Terminal Server (RDS Session Host) zeigt nach einiger Zeit verschiedene Effekte, wie z.B. „schwarzer Bildschirm nach der Anmeldung“, „nicht mehr funktionierendes Startmenü“, allgemeine Performance- oder Anmeldeprobleme.

Dies betrifft übrigens nicht zwingend nur RDS-SHs, sondern prinzipiell alle Windows Server 2016 Maschinen, auf Terminalservern (insbesondere mit User Profile Disks, UPDs) ist das ganze aufgrund potenziell größerer Anmelde-/Benutzeranzahl nur deutlich wahrscheinlicher anzutreffen.

Lösung:

Schuld könnte ein Bug sein, welcher dafür sorgt, dass bei der Benutzeranmeldung erstellte Firewall-Regeln beim löschen des Benutzerprofils (hier kommen die UPDs ins spiel, unter Einsatz dieser wird das Profil nämlich bei der Abmeldung automatisch wieder vom Server gelöscht) nicht mehr entfernt werden.

Das verursacht einen Registry-Bloat in 

HKLM:\System\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\FirewallRules

und/oder

HKLM:\System\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\RestrictedServices\Configurable\System

Sind diese Keys bereits „überfüllt“, kann es gut sein, dass sich die Werte nicht mehr per GUI (regedit) entfernen lassen – der Key lädt schlichtweg ewigkeiten. Abhilfe schafft folgendes PowerShell-Script:

$profiles = get-wmiobject -class win32_userprofile
Clear-Host
Write-Host "`n`n`n`n`n`n`n`n"
Write-Host "Getting Firewall Rules..."
$Rules1 = Get-NetFirewallRule -All | 
  Where-Object {$profiles.sid -notcontains $_.owner -and $_.owner }
$Rules1Count = $Rules1.count
Write-Host "" $Rules1Count "Rules`n"

Write-Host "Getting Firewall Rules from ConfigurableServiceStore..."
$Rules2 = Get-NetFirewallRule -All -PolicyStore ConfigurableServiceStore | 
  Where-Object { $profiles.sid -notcontains $_.owner -and $_.owner }
$Rules2Count = $Rules2.count
Write-Host "" $Rules2Count "Rules`n"

$Total = $Rules1.count + $Rules2.count
Write-Host "Deleting" $Total "Firewall Rules:" -ForegroundColor Green

$Result = Measure-Command {

  $start = (Get-Date)
  $i = 0.0

  foreach($rule1 in $Rules1){

    # action
    Remove-ItemProperty -Path "HKLM:\System\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\FirewallRules" -Name $rule1.name

    # progress
    $i = $i + 1.0
    $prct = $i / $total * 100.0
    $elapsed = (Get-Date) - $start
    $totaltime = ($elapsed.TotalSeconds) / ($prct / 100.0)
    $remain = $totaltime - $elapsed.TotalSeconds
    $eta = (Get-Date).AddSeconds($remain)

    # display
    $prctnice = [math]::round($prct,2) 
    $elapsednice = $([string]::Format("{0:d2}:{1:d2}:{2:d2}", $elapsed.hours, $elapsed.minutes, $elapsed.seconds))
    $speed = $i/$elapsed.totalminutes
    $speednice = [math]::round($speed,2) 
    Write-Progress -Activity "Deleting Rules ETA $eta elapsed $elapsednice loops/min $speednice" -Status "$prctnice" -PercentComplete $prct -SecondsRemaining $remain
  }

  foreach($rule2 in $Rules2) {

    # action  
    Remove-ItemProperty -Path "HKLM:\System\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\RestrictedServices\Configurable\System" -Name $rule2.name

    # progress
    $i = $i + 1.0
    $prct = $i / $total * 100.0
    $elapsed = (Get-Date) - $start
    $totaltime = ($elapsed.TotalSeconds) / ($prct / 100.0)
    $remain = $totaltime - $elapsed.TotalSeconds
    $eta = (Get-Date).AddSeconds($remain)

    # display
    $prctnice = [math]::round($prct,2) 
    $elapsednice = $([string]::Format("{0:d2}:{1:d2}:{2:d2}", $elapsed.hours, $elapsed.minutes, $elapsed.seconds))
    $speed = $i/$elapsed.totalminutes
    $speednice = [math]::round($speed,2) 
    Write-Progress -Activity "Deleting Rules from ConfugurableServiceStore ETA $eta elapsed $elapsednice loops/min $speednice" -Status "$prctnice" -PercentComplete $prct -secondsremaining $remain
  }
}

$end = Get-Date
Write-Host end $end 
Write-Host eta $eta

Write-Host $result.minutes min $result.seconds sec

Achtung: bei einem bereits länger laufenden Terminalserver, kann das Script schonmal so ein paar Stunden brauchen um alle Regeln zu entfernen. (In unserem Fall knapp 4 Stunden für etwa 95000 Regeln.)

Aus Performancegründen löscht das Script die Registry-Werte direkt, anstatt das Remove-NetFirewallRule Cmdlet zu verwenden.

Quelle: https://social.technet.microsoft.com/Forums/en-US/8dad5b1e-8236-4792-85fe-8725d74bbbcb/start-menu-not-coming-up-server-2016-rds?forum=winserverTS

WebDAV Fehler 0x800700DF: Die Dateigröße überschreitet die maximal zulässige Größe und kann nicht gespeichert werden.




Problem

Windows möchte auf einem via WebDAV eingebundenen Laufwerk (Sharepoint, NextCloud, NAS-System …) keine Dateien öffnen oder speichern, die 50Mbyte oder größer sind. Es gibt einen „0x800700DF“ Fehler. Das mit „net use l: https://…“ erstellte Laufwerk scheint überhaupt keine größeren Dateien anzunehmen oder rauszurücken.

Lösung

Es liegt – warscheinlich – nicht am Server.

Dieses Problem tritt aufgrund einer heute übertrieben wirkenden „Sicherheitsfunktion“ seit Windows XP SP2 (bis zum toaktuellen Windows 10). Ein bösartiger Server kann einen Windows Client so nicht „unendliche“ Datenmengen unterschieben. Und 50Mb waren damals ganz knapp vor „unendlich“.

Die Maximalgröße lässt sich in der Registry konfigurieren:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters 

Wert: FileSizeLimitInBytes auf FFFFFFFF

Windows neu starten (den Explorer abschießen reicht nicht), fertig.

Windows 10 Dateitypen mit Apps verknüpfen funktioniert nicht (mehr)




Problem

Funktioniert nicht: Datei immer mit Programm öffnen

„Neue“ Dateitypen, womit Dateiendungen gemeint sind die Windows nicht von Haus aus kennt, lassen sich nicht ohne weiteres mit einer Standardanwendung starten. Was früher über „Öffnen mit“ > „Immer öffnen mit“ möglich war, funktioniert nun nicht mehr.

Auch der „Immer diese App verwenden“ Haken bei der Auswahl der Anwendung funktioniert nicht mehr – er tut schlicht nichts. Ob über die „Einstellungen“, die „Systemsteuerung“ oder „Ändern …“, es hilft nichts – es wird keine Anwendung gespeichert.

Lösung

Es hilft wie so oft ein Griff in die gute alte Windows Kommandozeile.

Man prüft die vorhandene Zuordnung an der Kommandozeile (CMD) mit dem Befehl „assoc“:

C:\>assoc .mp3
.mp3=VLC.mp3  <-- Ausgabe; diesen Typ gibt es schon.

Wenn es diesen Anwendungstyp noch nicht gibt, funktioniert die Zuordnung nicht. Auch wenn das in der „Einstellungen“ App angezeigt wird, die Aktion wird nie gespeichert.

  1. Anlegen eines „neuen“ Dateitypen, wenn es diesen noch nicht gibt
    C:\> assoc .<DATEIENDUNG>=<NAME>

    Also zum Beispiel:

    C:\> assoc .mp3=VLCmp3File
  2. Verbinden der „neuen“ Endung mit einer Anwendung via „ftype“
    C:\> ftype VLCmp3File="C:\Programme\VLC\vlc.exe" "%1"

Und schon klappt das wieder mit der Dateitypenassoziierung.

„Clutter“ in Office 365 (für alle Benutzer) ein- oder ausschalten




Clutter analysiert in Office 365 Postfächern, wie E-Mails verarbeitet werden und verschiebt selbstständig „unwichtiges“ aus dem Ordner Posteingang in den Ordner „Clutter“. E-Mail-Gewohnheiten und Reaktionen auf E-Mails werden pro Benutzer analysiert und gespeichert. So wird der Posteingang etwas leerer und wichtige Nachrichten sollen so besser auffallen. Nur E-Mails mit hoher Priorität (die nicht im Junkmail-Ordner gelandet sind) und E-Mails die der Clutter-Algorithmus „interessant“ findet, werden in den Posteingang geleitet. Somit ist „Clutter“ der Posteingang zweiter Reihe. Er enthält E-Mails, die für gewöhnlich uninteressant sind und ignoriert werden.

Das iost ja ganz nett, aber oft auch Super-Irritierend.

Wie funktioniert Clutter denn tatsächlich?

Clutter verwendet eine Mischung aus Meta-Analysen von Verhaltensmustern und Textbasierten Analysen des Inhalts der E-Mail, um eine Wahrscheinlichkeit zu bestimmen, wie mit der E-Mail am warscheinlichsten umgegangen wird. Erst wenn die Wahrscheinlichkeit für ’schnelles löschen‘ oder ’schnelles verschieben‘ hoch ist, wird die Nachricht in Clutter verschoben.

Dabei verwendet Clutter die Funktion „Office Graph“. Zusätzliche Kosten oder Einstellungen sind nicht notwendig. Es soll auch einfach weiterhin ganz normal Outlook verwendet werden, um Clutter nach und nach zu trainieren. Trainingsdaten fallen auch nur bei aktiviertem Clutter an.

Wenn Clutter eine E-Mail falsch verschoben hat, kann die Nachricht winfach in den Posteingang oder einen anderen Ordner verschoben werden. Clutter verschiebt niemals E-Mails, die manuell bewegt wurden. Im OWA und Outlook können E-Mails mit einem Rechtsklick zudem als Clutter markiert werden.

Clutter an der Powershell aktivieren/deaktivieren

Set-Clutter -Enable $false

Oder das ganze im Bulk „auf die schnelle“ erledigen:

PS C:\> Set-ExecutionPolicy RemoteSigned
PS C:\> $cred = Get-Credential
PS C:\> $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $cred -Authentication Basic -AllowRedirection
PS C:\> Import-PSSession $Session
PS C:\> Get-Mailbox | Set-Clutter -Enable $true

DSL-Zugang mit Kennwort aus Fritz!Box auslesen




Problem

„Jemand“ hat „damals“ mal eine Fritz!Box für den Internetzugang konfiguriert und man benötigt heute das aktuelle Zugangskennwort. Fritzboxen rücken die Zugangsdaten aber nicht freiwillig raus.

Lösung

  1. Auf der Weboberfläche (z.B. http://fritz.box) anmelden
  2. „FRITZ!Box Paketmitschnitt“ starten: http://fritz.box/cgi-bin/webcm?getpage=../html/capture.html
  3. Eine Paketaufnahme für den DSL-Port starten (oberer Knopf) und die Datei speichern. die Datei wächst solange es Traffic auf dem POrt gibt.
  4. DSL-Kabel rausziehen, 2 Sekunden warten (bis die grüne Lampe ausgeht) und wieder in die Box stecken
  5. Wenn die Internetverbindung wider besteht, die Paketaufnahme beenden und die Datei öffnen
  6. Datei nach dem Benutzernamen durchsuchen; direkt dahinter steht das Kennwort.

Firefox 64 (oder höher) via GPO als Standartbrowser unter Windows 10 und Server 2016 setzen




Problem

Unter Windows 10.1703+ sowie (RDS) Server 2016.KU03+ funktioniert der gute alte Als-Default-Browser setzen Trick mittels Script-Aufruf nicht mehr:

firefox.exe -silent -nosplash -setDefaultBrowser

Zudem gibt es auch keine einfache Möglichkeit mehr, den Standartbrowser mit einer Gruppenrichtlinie zu ändern. Der Standartbrowser wird nicht mehr in einem simplen Registry-Schlüssel verwaltet.

Lösung

Man erstellt heute eine „Dateiendungenstandartprogrammzuodnungsdatei“ im XML-Format und wendet diese via GPO an. Darin werden Standart-Apps für Dateiendungen oder Protokoll-Handler gesetzt. Entweder man nimmt eine fertige Datei (wie hier) oder exportiert seine eigene aktuelle Konfiguration („DISM /Online /Export-DefaultAppAssociations:“MEINESTANDARTAPPS.xml“).

  1. „firefox-default.xml“ Datei im Netzwerk ablegen (z.B. \\DOMAIN.TLD\NETLOGON)
    <?xml version="1.0" encoding="UTF-8"?>
    <DefaultAssociations>
      <Association Identifier=".pdf" ProgId="FirefoxHTML-308046B0AF4A39CB" ApplicationName="Firefox" />
      <Association Identifier=".htm" ProgId="FirefoxHTML-308046B0AF4A39CB" ApplicationName="Firefox" />
      <Association Identifier=".html" ProgId="FirefoxHTML-308046B0AF4A39CB" ApplicationName="Firefox" />
      <Association Identifier=".shtml" ProgId="FirefoxHTML-308046B0AF4A39CB" ApplicationName="Firefox" />
      <Association Identifier=".xht" ProgId="FirefoxHTML-308046B0AF4A39CB" ApplicationName="Firefox" />
      <Association Identifier=".xhtml" ProgId="FirefoxHTML-308046B0AF4A39CB" ApplicationName="Firefox" />
      <Association Identifier="ftp" ProgId="FirefoxURL-308046B0AF4A39CB" ApplicationName="Firefox" />
      <Association Identifier="http" ProgId="FirefoxURL-308046B0AF4A39CB" ApplicationName="Firefox" />
      <Association Identifier="https" ProgId="FirefoxURL-308046B0AF4A39CB" ApplicationName="Firefox" />
      <Association Identifier=".url" ProgId="FirefoxURL-308046B0AF4A39CB" ApplicationName="Firefox" />
    </DefaultAssociations>
    
  2. Datei mit ihrem UNC-Pfad in einer Gruppenrichtlinie anwenden: Computerkonfiguration > Richtlinien > Administrative Vorlagen > Windows-Komponenten > Datei Explorer > „Konfigurationsdatei für Standardzuordnungen festlegen“

Diese Punkte beachten

  • Wenn die GPO als Computerrichtlinie definiert ist, müssen die lesenden Domänencpomputer Zugriff auf den entsprechenden Pfad haben
  • Die Zuordnung wird beim Anwenden der GPO zwar übernommen (siehe RSOP), wird aber erst beim Anmeldevorgang gültig (!)
  • Benutzer können die Standardzuordnung jederzeit ändern. Jedenfalls bis zur Neuanmeldung …
  • Firefox ab Version 60 versteht leider das alte ProgId=“FirefoxURL“ und „FirefoxHTML“ nicht mehr. Ab jetzt muss es dieser lange String sein.

VMware Speicherrichtlinie neu anwenden – Ungültige Konfiguration der virtuellen Maschine.




Problem:

Man hat frisch eine Storage Policy konfiguriert und auf eine VM angewendet. Es wurden allerdings nicht alle Einstellungen sofort übernommen (z.B. die NimbleStorage AppSync Konfiguration).
Nach dem Korrigieren dieser, möchte man die Richtlinie neu anwenden. VMware zeigt einem jedoch den Fehler:

Ungültige Konfiguration der virtuellen Maschine.

Lösung:

Die VM hat vermutlich noch einen Snapshot. Nach dem entfernen klappt das erneute Anwenden der Richtlinien sofort.