Samstag, 19. Mai 2018

Exclaimer: Hinzufügen von Signaturen für IOS Geräte

Hallo zusammen,

wir haben vor kurzer Zeit die Anforderung eine neue automatisierte Signatur für einen Kunden via Exclaimer zu realisieren (für einen Exchange onpremise Server). Im Zuge der Konfiguration wurde "nur" die html Signatur erstellt, was sich als Fehler herausgestellt hat.

Beim Testen via Outlook wurde die Signatur wie gewünscht angefügt, allerdings wurden Signaturen über das IPhone bzw. IPAD nicht angezeigt. Die Lösung ist, dass auch noch eine Text-Signatur angelegt werden muss, da IOS Geräte Text Emails versenden. Ich habe hierzu einfach die html-Signatur kopiert und bei der Text Signatur eingefügt und schon klappt es auch mit den IOS Geräten.



Von daher am besten gleich von Anfang an auch die Text Signatur gleich erstellen, das spart Troubleshooting hintenraus.

Viele Grüße, Jens

Erweiterung User Profile Disks

Hallo zusammen,

zu Beginn der Erstellung einer RDS Collation muss sich der Administrator entscheiden, sofern dieser auf User Profile Disk setzt, wir groß die maximale Größe die User Profile Disk maximal werden darf.



Einmal eingestellt kann die maximale Größe der User Profile Disk nicht mehr geändert werden.
Was also tun, wenn die maximale Größe einzelner Benutzer nun doch erweitert werden muss, da der Benutzer das Limit gerissen hat und in seinem Profil beliebige Probleme hat (wie z.B. keine Speicherungen von Daten mehr auf dem Desktop mehr möglich)?

In einem früheren Beitrag habe ich die Vorgehensweise dokumentiert wie der Benutzername zu einer User Profile Disk ermittelt werden kann, https://backendfrontend.blogspot.com/2018/05/ermittlung-dateiname-einer-user-profile.html

Sofern die VM auf einem HyperV Server betrieben wird, muss die User Profile Disk Datei auf den HyperV Server kopiert werden. Sicherheitshalber ist es zum empfehlen eine Sicherung der Datei anzufertigen bevor hier Veränderungen vorgenommen werden. 

Sobald die VHDX Datei auf dem HyperV Server lokal vorliegt kann die Datei über den HyperV Manager erweitert werden.


Im weiteren ist nun die .vhdx Datei auszuwählen, die wir erweitern möchten:


Nun wählen wir "Erweitern" aus, da wir die bestehende Größe der Festplatte erhöhen möchten:


im letzten Schritt legen wir die neue maximale Größe der User Profile Disk fest und bestätigen mit "Fertigstellen"



Die bestehende Dateigröße der soeben angepassten .vhdx Datei bleibt unverändert, das Festplattenlimit wurde nur nun in diesem Fall auf 20 GB erhöht.
Die Datei wird nun wieder an ihren ursprünglichen Speicherort verschoben, so dass der Benutzer auf seine UPD wieder zugreifen kann. Sicherheitshalber bewahre ich die ursprüngliche .vhdx Datei noch ein paar Tage auf.

Viele Grüße, Jens




Mittwoch, 16. Mai 2018

Drucker und Terminal Server - Freunde fürs Leben

Hallo zusammen,

ich hatte in der vergangenen Zeit immer wieder Probleme mit dem Drucken aus dem Terminal Server heraus. Meine Umgebung besteht aus einer Windows Server 2016 RDS Farm und einem zentralen Print Server - ebenfalls Windows Server 2016. Die Drucker habe ich verbunden über den Netzwerkshare des zentralen Druckservers.

Mit den folgenden Symptomen habe ich zu kämpfen gehabt:

  • Der verbundener Drucker war von einem zum nächsten Tag nicht mehr vorhanden
  • Der verbundene Drucker wurde als "anderes Gerät" angezeigt
  • Der Drucker war zwar präsent, hat aber beim Drucken auf ein Treiber-Problem hingewiesen
Schlussendlich gab es beliebig viele Probleme, welche auch mit einem Neustart der RDS-und Druckserver nicht behoben werden konnte. Die Windows Updates waren selbstverständlich alle drauf.

Ich wusste mir anfangs nicht zu helfen als die Drucker wiederzu verbinden bzw. diese zu löschen und wieder neu hinzuzufügen. Dies konnte jedoch keine Lösung sein und habe nach einiger Recherche folgende Möglichkeiten gefunden um das Problem nachhaltig zu lösen:

Im Nachfolgenden Registry Key wurden die den Benutzern zugewiesenen Registry Schlüssel nach einer erfolgreichen RDS Abmeldung nicht auf den RDS Servern gelöscht. Daraufhin habe ich den Schlüssel sicherheitshalber exportiert und den Schlüssel vollständig gelöscht.

  • [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Providers\Client Side Rendering Print Provider]
    Im Anschluss habe ich erneut einen leeren Schlüssel namens "Client Side Rendering Print Provider" wieder angelegt.
  • Eine Alternative ist ebenfalls die Drucker per Gruppenrichtlinien zu verteilen. Dies hat den Vorteil, dass die GPO regelmäßig überprüft ob der Drucker vorhanden ist und legt ggf. den Drucker erneut an. Somit habe ich mir eine GPO angelegt



    Im Anschluss habe ich den freigegebenen Netzwerkdrucker hinterlegt:



    Unter "Gemeinsame Optionen" habe ich dann eingerichtet, dass der Drucker im Benutzerkontext hinzugefügt werden soll und dass der Drucker1 nur den Benutzern zugewiesen werden soll, die in der entsprechenden Gruppe Mitglied sind



    Nun noch die Gruppe auswählen, die dem Drucker zugewiesen ist.



Ich habe mich daraufhin mit einem Microsoft Support Spezialist unterhalten, dieses Problem war leider kein Einzelfall und es wäre auch müssig darüber zu diskutieren ob das Problem im Treiber des Druckerherstellers oder bei Microsoft selbst liegt. Wie auch immer, Microsoft empfiehlt das Verteilen der Drucker über GPOs zu realisieren.

Viele Grüße, Jens





Sonntag, 13. Mai 2018

Ermittlung Dateiname einer User Profile Disk

Hallo zusammen,

es kann manchmal vorkommen dass die User Profile Disks der Terminal Server Benutzer lokalisiert werden müssen. Die User Profile Disk Dateinamen werden allerdings als %SID%.vhdx Datei gespeichert:


Es gibt im Technet ein PowerShell Script zum Auschlüsseln der Benutzernamen hinter den .vhdx Dateien. Die Benutzer müssen hierzu übrigens nicht angemeldet sein, https://gallery.technet.microsoft.com/Retrieve-usernames-for-a-94780a9e 

Viele Grüße, Jens

Samstag, 5. Mai 2018

Migration VMWare nach HyperV

Hallo zusammen,

ich hatte das Vergnügen einige Tests VMs meiner VMWare Umgebung nach HyperV zu migrieren. Zu Beginn hatte ich den Fehler gemacht, dies auf einem Windows 7 Client auszuführen, bevor ich die Migration dann direkt auf dem HyperV Server durchgeführt habe.

Zu beachten an der Migration ist die Tatsache, dass für den Migrationszeitraum der doppelte Bedarf an Storage zur Verfügung stehen muss da sowohl die VMDK als auch die VHDX Datei gleichzeitig auf dem abgelegt werden.

Zu Beginn habe ich mir den Virtual Machine Converter erstmal auf dem HyperV Server installiert, anbei der Link zum Download, https://www.microsoft.com/en-us/download/details.aspx?id=42497

Es ist natürlich richtig, dass diese Software in Rente geschickt worden ist, sie hat jedoch einwandfrei funktioniert um meine VMs auf einen HyperV 2016 Server zu migrieren. Ich habe dabei sowohl Windows Server 2008 R2, Windows Server 201 R2 als auch Windows Server 2016 konvertiert.

Nach der Installation eine PowerShell öffnen und erstmal das Modul laden:
Import-Module 'C:\Program Files\Microsoft Virtual Machine Converter\MvmcCmdlet.psd1'

Im Anschluss können die Festplatten Stück für Stück migriert werden. Ich habe hier die Erfahrung gemacht nicht zu viele Jobs parallel durchzuführen, da mir zwischendurch immer mal wieder der RAM ausging und der Job abgebrochen.
ConvertTo-MvmcVirtualHardDisk -SourceLiteralPath C:\ClusterStorage\Volume1\Server1\Server1.vmdk -VhdType DynamicHardDisk -VhdFormat vhdx -destination C:\ClusterStorage\Volume1\Server1\

Viele Grüße, Jens

Donnerstag, 23. November 2017

Exchange Postfach Export bei ungleichem UPN zu Email Adresse

Hallo zusammen,

es kommt immer wieder vor, dass ein PST Postfach Export durchgeführt werden muss, bei dem der UPN nicht der Email Adresse entspricht. Gerade in einer cloudlastigen Zeit wird erwartet, dass der UPN der email Adresse entspricht um Benutzer beispielsweise ein single sign on für diverse Dienste anbieten zu können.

Warum nun dieses Script, es gab die Anforderung dass für eine Exchange Cross Forest Migration die Postfächer in PST Dateien exportiert wurden und diese dann automatisiert über ein Import Script in der Ziel Seite wieder importiert wurden. In der Zielseite wurde allerdings der UPN der Email Adresse gleichgesetzt. Das unten stehenden Script zieht sich nun anhand das AD Benutzer die Email Adresse und schreibt die Email Adresse in den Dateinamen rein um eine eindeutige Identifikation des Postfachs zu erhalten. Das Script funktioniert ab der Version Exchange 2010.

### PST Export für O365 Import bei unterschiedlichem UPN zu Email Adresse
#import-module activedirectory
#Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010

$Workload = "Exchange"
$Archiv = "FALSE"
$TargetRootFolder = "/"
$Date = (Get-Date).ToString('MM-dd-yyyy-HH-mm-ss')
$BasePath = "\\servername\g$\archive"
$ExportPath = $BasePath +"PSTs-" +$Date + "\"
$OutputFile = $BasePath +"Mailbox-O365" +"-" +$Date +".csv"
$ResultSize = 1000 #"unlimited"
$FilesCSV = @()
$CSVImportPath = "c:\temp\Migrationsliste.csv"
$UPN = @()
$Mbxsrollout = @()

Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010
New-Item -ItemType directory -Path $ExportPath -ErrorAction SilentlyContinue

#get-mailbox -OrganizationalUnit $OU

#CSV (Es muss "Kein CSV" oder "CSV" aktiv sein! Nie Beide!)
$FilesCSV += Import-Csv $CSVImportPath
#$Mbxsrollout = $FilesCSV

$FilesCSV
#$FilesCSV.count

foreach ($object in $FilesCSV) {
#$WEA = $object.WindowsEmailAddress
write-host "$object.WindowsEmailAddress in Bearbeitung"
#$Mbxsset = Get-ADUser -Filter "UserPrincipalName -Eq '$WEA'" -Properties *
$Mbxsrollout += get-mailbox -Identity $object.WindowsEmailAddress
#$Mbxsrollout

}
#$Mbxsrollout | select *name*
#$Mbxsrollout.count
#$FilesCSV.count
#$Mbxsrollout.count
#$Mbxsrollout

$Files = $Mbxsrollout | Select-Object @{label="Workload";expression={$Workload}}, @{label="FilePath";expression={$FilePath}}, @{label="Name";expression={($_.WindowsEmailAddress.ToString() + ".pst")}}, @{label="Mailbox";expression={($_.PrimarySmtpAddress)}}, @{label="IsArchive";expression={($Archiv)}},@{label="TargetRootFolder";expression={($TargetRootFolder)}},@{label="SPFileContainer";expression={("")}},@{label="SPManifestContainer";expression={("")}},@{label="SPSiteUrl";expression={("")}}
$Files | Export-Csv $OutputFile -NoTypeInformation -Delimiter ","
#$Files

#Kein CSV (Es muss "Kein CSV" oder "CSV" aktiv sein! Nie Beide!)

#$Files = get-mailbox -ResultSize $ResultSize -OrganizationalUnit $OU | Select-Object @{label="Workload";expression={$Workload}}, @{label="FilePath";expression={$FilePath}}, @{label="Name";expression={($_.Name + ".pst")}}, @{label="Mailbox";expression={($_.PrimarySmtpAddress)}}, @{label="IsArchive";expression={($Archiv)}},@{label="TargetRootFolder";expression={($TargetRootFolder)}},@{label="SPFileContainer";expression={("")}},@{label="SPManifestContainer";expression={("")}},@{label="SPSiteUrl";expression={("")}}
#$Files | Export-Csv $OutputFile -NoTypeInformation -Delimiter ","
#$Files


foreach ($MB in $Files){
#[String]$MBName = $MB.Mailbox.local + "@" +$MB.Mailbox.Domain
#[String]$MBName = $MB.Mailbox.local + "@" +$MB.Mailbox.Domain
#[String]$MBName
#$MB.Mailbox
New-MailboxExportRequest -BadItemLimit 1000 -AcceptLargeDataLoss -mailbox $MB.Mailbox.ToString() -Domaincontroller %DomainController% -FilePath $ExportPath\$($MB.Name)
}

Write-Output "Der Pfad für den Folgeschritt Import lautet: " $ExportPath

Write-Output "`nDie zugehörige PST-Importzuordnungsdatei wurde hier abgelegt: " $OutputFile

#Skript erwartet bei CSV-Datei als Header: ("# " am Anfang beim Kopieren entfernen)
# #TYPE Selected.Microsoft.Exchange.Data.Directory.Management.Mailbox
# "WindowsEmailAddress"


viele Grüße, Jens

Freitag, 10. November 2017

Überprüfung DNS Einträge für Skype for Business

Hallo zusammen,

immer wieder gibt es ein Problem, dass Skype for Business sind sauber funktioniert, egal ob onpremis oder auch bei O365. Es fällt dabei immer wieder im Troubleshooting auf, dass DNS Einträge nicht bzw. nicht richtig gesetzt sind. 

Aus diesem Grund haben einige Kollegen das nachfolgende PS Script geschrieben um zu prüfen ob und welche DNS relevanten SfB Einträge gesetzt sind:

#Definition der SIP-Domains:
$SipDomain = "contoso.com","fabrikam.com"

#Überprüfung der oben hinterlegten SIP Domains:
$SipDomain
Foreach ($Item in $SipDomain) {
Write-Host "`n`n### Prüfe: ARECORD sip.$item ###`n"
#nslookup -q=a sip.$item
resolve-dnsname -type a sip.$item -ErrorAction SilentlyContinue
Write-Host "`n`n### Prüfe: CNAME sip.$item ###`n"
#nslookup -q=cname sip.$item
resolve-dnsname -type cname sip.$item -ErrorAction SilentlyContinue
Write-Host "`n`n### Prüfe: SRV _sip._tls.$item ###`n"
#nslookup -q=srv _sip._tls.$item 
resolve-dnsname -type srv _sip._tls.$item -ErrorAction SilentlyContinue
Write-Host "`n`n### Prüfe: SRV sipfederationtls._tcp.$item ###`n"
#nslookup -q=srv _sipfederationtls._tcp.$item
resolve-dnsname -type SRV _sipfederationtls._tcp.$item -ErrorAction SilentlyContinue
Write-Host "`n`n### Prüfe: CNAME lyncdiscover.$item ###`n"
#nslookup -q=cname lyncdiscover.$item
resolve-dnsname -type cname lyncdiscover.$item -ErrorAction SilentlyContinue
}

In einem weiteren Eintrag werde ich darauf eingehen welche DNS Einträge für SfB relevant sind.

Viele Grüße, Jens