Terminalserver 2016 (RDS): PDF-Dateien können nicht mit dem Adobe Reader DC geöffnet oder gedruckt werden

Problem:
Nach der Installation des Adobe Readers DC auf einem Terminalserver 2016 konnten die PDFs aus dem eigenen TEMP-Ordner geöffnet werden. Mein erster Verdacht waren die neuen VHD-Profiles.

Lösung:
Des Rätsels Lösung war ganz einfach. Es ist der "Geschütze Modus" (Potected Mode) des Adobe Readers. Scheinbar macht das schon immer Probleme auf einem Terminalserver. Man kann die Funktion testweise bei einem Benutzer mal auscahlten:
- Wählen Sie Bearbeiten > Voreinstellungen.
- Wählen Sie auf der linken Seite unter Kategorien die Option Sicherheit (erweitert).
- Deaktivieren Sie im Abschnitt Sandbox-Schutz die Option Geschützten Modus beim Start aktivieren.

Um das Problem für alle Benutzer zu lösen, kann man einen Registry-Key per GPP ausstreuen:
Keypath: HKLM\SOFTWARE\Wow6432Node\Policies\Adobe\Acrobat Reader\DC\FeatureLockDown
Value name: bProtectedMode
Value type: REG_DWORD
Value data: 0

Damit wird der "geschützte Modus" deaktiviert und das Öffnen und Drucken soltle problemlos funktionieren!

Quelle: FAQ-O-MATIC: Terminalserver: Den Protected Mode des Adobe Reader X abschalten

Outlook Suche: Onlineergebnisse sind auf 250 Elemente begrenzt! Es werden nicht alle Suchergebnisse angezeigt

Ich hatte folgenden Fehler bei Outlook-User, die eine größere Ordnerstruktur durchsucht haben


Die User bekommen tatsächlich nur 250 Suchergebnisse angezeigt, was jetzt nicht besonders viel ist, wenn man eine ältere Mail sucht!

Ich dachte erste, dass es was mit den MaxObjects zu tun hat und habe daher die MaxObjects für Folder, FolderView, Message und MessageView auf 2000 gesetzt. Heute besteht das Problem weiterhin. Nach etwas Recherche habe ich doch dann tatsächlich einen Eintrag gefunden, der das Problem schildert und löst.
Dieses Einstellung kann erst seit Exchange 2013 CU11 geändert werden und muss aber manuell angepasst werden.

1.) Öffnen Sie die Datei "%ExchangeInstallPath%/Bin/Microsoft.Exchange.Store.Worker.exe.config"
2.) Suchen Sie hier den Schlüssel /runtime
3.) Fügen Sie danach folgende Zeilen hinzu:

<appSettings>
      <add key="MaxHitsForFullTextIndexSearches" value="1000" />
</appSettings>

Hiermit werden die Suchergbnisse auf 1.000 Elemente erweitert.
4.) Starten Sie den Informationsspeicher durch

Damit aber noch nicht genug, da wir hiermit die Beschränkung auf dem Server aufgehoben haben, aber NICHT am Client.
Hier gibt es noch eine Einstellung im Outlook, die die Suchergebnisse ebenfalls beschränkt:

Scheinbar gibt es aber in den Microsoft-GPOs keine Einstellungsmöglichkeit und somit muss man einen RegKey per GPO ausstreuen. Diese Einstellung gibt es aber erst ab Outlook 2013. Hier die RegKeys dazu:
Office 2013: HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\Outlook\Search
Office 2016: HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Outlook\Search
REG_DWORD “SearchResultsCap” anlegen
Hier den Wert “0” vergeben (Hier kann auch der gleiche Wert wie auf dem Server eingetragen werden)

Ein scheinbar kleines Problem hat mich gut beschäftigt!

Quelle: somoit: Exchange 2013 – Solved the “Search results limited to 250” bug

VBS: Dateien auf einen FTP hochladen mit VBS (FTPUpload)

Ich brauchte ein Skript um eine Datei auf einen FTP hochzuladen ohne zusätzliche Software - nur mit Boardmitteln.
Daraus ist folgendes VBS entstanden, dass genau das macht - FTPUpload:

'Objekte definieren
Set oShell = CreateObject("Shell.Application")
Set objFSO = CreateObject("Scripting.FileSystemObject")

'Datei für Upload festlegen
path = "C:\lang.txt"

FTPUpload(path) 'Datei hochladen

'Subroutine für FTPUpload
Sub FTPUpload(path)

On Error Resume Next

Const copyType = 16

'FTP Wartezeit in ms, damit sichergestellt wird, dass Upload erfolgreich
'Abhängig von der größe der übertragenen Datei - bei mir waren es nur ein paar kB!
waitTime = 80000

FTPUser = "ftpuser"  		'FTP-Benutzername
FTPPass = "ftppassword"		'FTP-Passwort
FTPHost = "ftp.keineahnung.de"	'FTP-Hostnmae oder IP
FTPDir = "/"			'FTP-Verzeichnis - mit / abschließen (z.B. "/test/")

'String für Verbindung bauen und an Shell übergeben
strFTP = "ftp://" & FTPUser & ":" & FTPPass & "@" & FTPHost & FTPDir
Set objFTP = oShell.NameSpace(strFTP)

'Upload der Datei     
If objFSO.FileExists(path) Then

	Set objFile = objFSO.getFile(path)
	strParent = objFile.ParentFolder
	Set objFolder = oShell.NameSpace(strParent)

	Set objItem = objFolder.ParseName(objFile.Name)

	Wscript.Echo "Upload der Datei " & objItem.Name & " nach " & strFTP
 	objFTP.CopyHere objItem, copyType

End If

'Fehlerroutine, falls gewünscht - kann auch auskommentiert werden
If Err.Number <> 0 Then
Wscript.Echo "Error: " & Err.Description
End If

'Warten bis Upload fertiggestellt
Wscript.Sleep waitTime

Msgbox "FTP-Upload durchgeführt"

End Sub

Netzwerk: Umstellung der IP-Range in einem ActiveDirectory-Netzwerk

Ich musste die IP-Range eines Standortes komplett ändern, da dieser an unser Netzwerk gekoppelt werden sollte und hier die gleichen IP-Ranges vorlagen. Somit wäre ein Routing zwischen den Standorten nicht möglich gewesen.
Die nachfolgende Liste zeigt meine Gedanken und Vorgehensweisen bzw. Lösungen und ist wahrscheinlich nicht vollständig?!

Vorbereitung für IP-Bereichs-Änderung
- Reverse-Lookup-Zone für neuen Bereich im DNS anlegen
- Replikation der neuen Zone auf DNS-Server prüfen
- DCDIAG erstellt und gespeichert
- DC-Replikation geprüft
- Statische DNS-Einträge dokumentieren
- Eventuelle Skripte oder Dienste auf statische IP-Einträge prüfen (Backups, Netlogon, SMTP etc.)
- Wenn möglich statische IP-Einträge gegen DNS-Einträge tauschen und testen
- Geräte mit festen IPs dokumentieren (z.B. Drucker, Terminals etc.) -> manuelle Anpassung nötig
- DHCP-Optionen dokumentieren
- DHCP-Reservierungen dokumentieren
- Liste mit allen aktiven IP-Adressen und dazugehörigen Geräten erstellen
- Firewall-Regeln dokumentieren
- Routing in der Firewall dokumentieren
- Virenscanner oder anderen Dienste dokumentieren, die IP-Adressen zur Standort-Erkennung verwenden

Umstellung am ersten DC mit FSMO-Rollen
- Neue IP, Subnet und Gateway eintragen
- WINS und DNS sich selbst eintragen
- WINS- und DNS-Dienste starten um Dienstbindung durchzuführen
- ipconfig /flushdns (löscht DNS Cache)
- nbtstat –RR (löschte WINS Cache)
- ipconfig /registerdns (DNS neu registrieren)
- dcdiag /fix (Fixt Probleme im DC und schreibt einige Einträge neu)
- DNS-SRV-Einträge im DNS prüfen ggf. alte löschen (Wichtig sind _GC)
- Restart netlogon

Umstellung der anderen Domain Controller
- Neue IP, Subnet und Gateway eintragen
- WINS und DNS korrekt eintragen (sich selbst als 2. Server eintragen)
- WINS- und DNS-Dienste starten um Dienstbindung durchzuführen
- ipconfig /flushdns (löscht DNS Cache)
- nbtstat –RR (löschte WINS Cache)
- ipconfig /registerdns (DNS neu registrieren)
- dcdiag /fix (Fixt Probleme im DC und schreibt einige Einträge neu)
- DNS-SRV-Einträge im DNS prüfen ggf. alte löschen (Wichtig sind _GC)
- Restart netlogon
- Replikation der DCs testen über "AD Standort und Dienste"
- dcdiag ausführen und speichern
- Ereignisanzeige prüfen

Umstellung DHCP-Server
- Alten DHCP-Scope löschen
- Neuen DHCP-Scope eintragen und Optionen festlegen
- Vorherige DHCP-Reservierungen wiederherstellen
TIPP: Zum Umzug des DHCP-Servers habe ich eine gute Anleitung geschrieben, in der man auch die IP-Range anpassen kann:
DHCP: Einfacher Umzug DHCP-Dienst auf neuen Server mit Anpassung Scope, allen bestehenden Leases und Reservierungen

Umstellung der Memberserver, Clients und sonstiger Geräte
- Neue IP, Subnet und Gateway eintragen
- WINS und DNS korrekt eintragen
- ipconfig /flushdns (falls möglich)
- nbtstat –RR (falls möglich)
- ipconfig /registerdns (Falls möglich/nötig)
- Prüfen der DNS-Einträge auf den DNS-Servern
- eventuellen Restart der Maschinen, Dienste oder Geräten

Sonstige Anpassungen
- Statische DNS-Einträge auf neue IPs ändern
- Dienste und Geräte ggf. anpassen, die nicht auf DNS-Einträge geändert werden konnten
- Firewall-Regeln anpassen
- Routing in Firewall und Netzwerk anpassen
- Virenscanner und andere Dienste anpassen für Standort-Erkennung

Abschlusstests Active Directory
- DCDIAG prüfen
- Eventlogs prüfen
- Alle wichtigen Dienste prüfen (Mail, Fileshares, Datenbanken etc.)
- externe Zugriffe (z.B. VPN) prüfen
- Backup prüfen
- Wichtige Geräte prüfen auf Erreichbarkeit (USV, Switche etc.)

Hier einige Quellen, die mir bei der Lösung geholfen haben:
Microsoft: Change the static IP address of a domain controller
Yusuf: Die IP – Adresse eines Domänencontrollers ändern
ACE FEKAY: So you want to change your IP range?

Exchange: Mitglieder einer dynamischen Verteilerliste mit Powershell ermitteln

Skript zum Abfragen der Mitglieder in einer dynamischen Verteilerlisten:
Add-PSSnapin Microsoft.Exchange.Management.PowerShell.SnapIn
$DDL = “Name-der-Verteilerliste”
Get-DynamicDistributionGroup $DDL | ForEach {Get-Recipient -RecipientPreviewFilter $_.RecipientFilter -OrganizationalUnit $_.RecipientContainer} | Select DisplayName,PrimarySMTPAddress | Format-Table 

Hinweis: Die erste Zeile braucht man nur, wenn das Powershell-Skript außerhalb der Exchange-Powershell laufen lässt. Diese lädt die Exchange-Verwaltungsmodule!

EXCEL: Passwort entfernen bei XLS-Dateien

Normalerweise muss ich immer die Sheet-Protection von XLSX-Dateien entfernen, was relativ leicht mittels WinZIP geht.
Bei einer XLS-Datei klappt so leider nicht!

Hier gibt es aber ein schönes und schnelles BruteForce-VBA-Skript um das Kennwort zu entfernen:

Sub PasswordBreaker()
'Breaks worksheet password protection.
Dim i As Integer, j As Integer, k As Integer
Dim l As Integer, m As Integer, n As Integer
Dim i1 As Integer, i2 As Integer, i3 As Integer
Dim i4 As Integer, i5 As Integer, i6 As Integer
On Error Resume Next
For i = 65 To 66: For j = 65 To 66: For k = 65 To 66
For l = 65 To 66: For m = 65 To 66: For i1 = 65 To 66
For i2 = 65 To 66: For i3 = 65 To 66: For i4 = 65 To 66
For i5 = 65 To 66: For i6 = 65 To 66: For n = 32 To 126
    ActiveSheet.Unprotect Chr(i) & Chr(j) & Chr(k) & _
        Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & Chr(i3) & _
        Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
    If ActiveSheet.ProtectContents = False Then
        MsgBox "One usable password is " & Chr(i) & Chr(j) & _
            Chr(k) & Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & _
            Chr(i3) & Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
         Exit Sub
    End If
Next: Next: Next: Next: Next: Next
Next: Next: Next: Next: Next: Next
End Sub


Nicht wundern, das ausgegebene Kennwort ist nicht das, welches Ihr eingegeben habt aber funktioniert!

Quelle: uknowit: How to Unprotect an excel sheet without password
“Das einzig sichere System müsste ausgeschaltet, in einem versiegelten und von Stahlbeton ummantelten Raum und von bewaffneten Schutztruppen umstellt sein.”
Gene Spafford (Sicherheitsexperte)