Outlook Programmgesteuerter Zugriff per GPO

Problem:

Ein externes Programm greift (automatisiert) auf Outlook zu. Dabei kommt es (sofern kein aktueller Virenscanner verfügbar) oft zu Bestätigungsmeldungen. (Meist kann man den Zugriff dann für bis zu 10 Minuten gewähren.)

In diesem fall soll auf einem Windows Server mit installiertem Outlook ein Prozess automatisiert werden. Dazu muss die automatisierungssoftware aber auf Outlook zugreifen können, ohne dass ein Benutzer aktiv diese Berechtigung vergeben kann.

Die Optionen im Trust Center („Programmgesteuerter Zugriff“) sind allerdings ausgegraut.

Lösung:

Die Steuerung der Trust Center Optionen ist (sogar noch etwas detaillierter) via GPO (ADMX-Vorlage) möglich.

Dazu werden die ADMX-Templates für die entsprechende Office-Version benötigt (Hier gibt’s die für Office 2016/2019 und Office365)

Nachdem selbige installiert wurden, findet man die passenden Einstellungen in den Gruppenrichtlinien hier:

Benutzerkonfiguration > Richtlinien > Administrative Vorlagen > Microsoft Outlook 2016 > Sicherheit > Sicherheitsformulareinstellungen

Zunächst muss hier die Einstellung „Outlook Sicherheitsmodus“ Aktiviert und als „Outlook-Sicherheitsrichtlinie: Outlook-Sicherheitsgruppenrichtlinie verwenden“ ausgewählt werden.

Danach lassen sich im Bereich „Programmatische Sicherheit“ die entsprechenden Meldungen konfigurieren. Die meisten externen Anwendungen benötigen hier „Eingabeaufforderung für Outlook-Objektmodell beim Lesen von Adressinformationen konfigurieren“ und „Eingabeaufforderung für Outlook-Objektmodell beim Senden von E-Mail konfigurieren“ Aktiv und „Schutzverhalten: Automatisch genehmigen„.

Set-RDCertificate cert.PFX ist keine PFX-Datei

Problem

Ich hatte gerade bei einem RDS-Deployment einen interessanten WTF-Moment. Es wurde ein ganz frisches SSL-Zertifikat von einer öffentlichen CA bestellt und installiert. Blieb also nur noch, dieses in der RDS-Bereitstellung einzurichten. Sobald das Zertifikat als .PFX exportiert wurde, sollte das per Powershell auch ganz einfach gehen (z.B. für die Gateway-Rolle):

PS C:\> $pfxPassword = Read-Host -AsSecureString
*************
PS C:\> Set-RDCertificate -Role RDGateway -ImportPath C:\install\cert.PFX -Password $pfxPassword

Und schon begrüßt mich der rote Text auf schwarzem Hintergrund:

Set-RDCertificate : ImportPath-Wert "C:\install\cert.PFX" ist keine PFX-Datei.
In Zeile:1 Zeichen:1
...

Lösung

Scheinbar ist das Cmdlet bezüglich der PFX-Dateiendung Case-Sensitive:

PS C:\> Set-RDCertificate -Role RDGateway -ImportPath C:\install\cert.pfx -Password $pfxPassword

funktioniert sofort. Und ja, es reicht wenn man „pfx“ im Cmdlet-Aufruf klein schreibt – der eigentliche Dateiname ist hier nicht relevant (zumindest was Groß-Kleinschreibung angeht).

Dem Server-Manager ist das übrigens auch egal. Über die GUI klappt’s ebenfalls sofort.

Outlook Abwesenheitsassistent Automatische Antworten – Server nicht verfügbar

Problem

Man möchte in seinem Outlook den Autoresponder aktivieren (Automatische Antworten / Abwesenheitsassistent), allerdings bekommt man lediglich folgenden Hinweis:

Ihre Einstellungen für automatische Antworten können nicht angezeigt werden, da der Server zurzeit nicht verfügbar ist.

oder englisch:
Your automatic reply settings cannot be displayed, because the server is currently unavailable. Try again later.

Lösung

Häufig liegt dies an falsch konfigurierten Autodiscover-Einstellungen, Proxys (bzw. fehlende Ausnahmen) vor dem Exchange-Server oder falschen Zertifikaten.

In einigen Fällen, kann es allerdings auch mit Authentifizierungsfehlern zu tun haben (der erste Hinweis in diese Richtung war: https://support.microsoft.com/en-us/help/2596516/your-out-of-office-settings-cannot-be-displayed-because-the-server-is)

In unserem Fall waren die Anmeldedaten an sich allerdings korrekt (das Profil wurde auch via SSO eingerichtet, alles super). Schuld waren letztendlich gespeicherte Windows-Anmeldedaten in der Anmeldeinformationsverwaltung. Sobald diese entfernt wurden klappen auch die Automatischen Antworten wieder.

Vermutlich sind die Anmeldedaten dort gelandet, da vorher ein weiteres Postfach im Outlook eingerichtet war. Sobald hier die Zugangsdaten einmal gespeichert werden, kommt der genannte Fehler wieder zustande.

Windows Server 2019 RRAS startet nicht (8007042a) – NPS Event 4405

Problem

Ein Frisch installierter Windows Server 2019 mit konfigurierter Routing & RAS Rolle möchte den RRAS Dienst nicht starten – „Dienstspezifischer Fehler 8007042a“

Das System-Eventlog zeigt ein paar Events des Netzwerkrichtlinienservers (NPS) – unter Anderem Event-ID 4405

NPS kann die Kontoinformationen nicht im primären Datenspeicher (C:\Windows\system32\LogFiles\IN1906.log) protokollieren. Aufgrund dieses Protokollierungsfehlers verwirft NPS alle Verbindungsanforderungen. Fehlerinformationen: 22.

Lösung

Der RRAS-Dienst muss vor dem NPS starten. Dazu einfach den Starttyp von „Routing und RAS“ auf Automatisch und den vom „Netzwerkrichtlinienserver“ auf Automatisch (Verzögerter Start) stellen und schon funktionieren beide korrekt.

Sollte es noch nicht klappen, könnte auch noch die Windows Defender Firewall schuld sein:

Der Fehler ist mehr oder weniger bekannt (siehe https://windowsserver.uservoice.com/forums/295059-networking/suggestions/35724043-fix-default-nps-firewall-rules-for-server-2019 )

Das Problem sind fehlerhafte Standard-Firewallregeln für den NPS. Fügt man manuell eine Regel hinzu, welche die beiden UDP Ports 1812 und 1813 eingehend erlaubt (das deaktivieren der Firewall hilft hier nicht), reicht ein Neustart des NPS und anschließend klappt auch das starten des RRAS-Dienstes.

Windows Server 2019 Aktivierung – Der eingegebene Produkt Key funktioniert nicht (0x80070490)

Problem:

Man hat gerade frisch aus dem VLSC das Windows Server 2019 ISO heruntergeladen und möchte die installierte Maschine nun mit dem zugehörigen MAK-Schlüssel aktivieren.

Nach Eingabe des Keys zeigt einem der Aktivierungsassistent allerdings nur die Fehlermeldung:

Der eingegebene Produkt Key funktioniert nicht. Überprüfen Sie den Produkt Key, und versuchen Sie es noch einmal, oder geben Sie einen anderen Produkt Key ein. (0x80070490)

Produkt Key Assistent

Lösung:

Es gibt wohl einen Bug in dem Grafischen Produkt Key Assistenten. Man muss den Key entweder bereits während der Installation angeben oder an der Konsole per slmgr installieren:

slmgr /ipk AAAAA-BBBBB-CCCCC-DDDDD-EEEEE

Danach könnte es noch einen Moment dauern, bis die Aktivierung in den Windows Einstellungen auch korrekt angezeigt wird. Von eventuellen Fehlermeldungen, welche dort direkt nach der Key-Installation angezeigt werden, sollte man sich also zunächst nicht irritieren lassen.

Windows Server 2016 RDS Effekte (Black Screen, Startmenü defekt)

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

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.