– Jan's Cloud – online Gedankenstütze ;)

8. November 2018

Koexistenz Probleme mit Exchange 2010 und 2013 bis 2016

Verschiedene Konstellationen die zu Problemen beim Clientzugriff während der Koexistenz von Exchange 2010 und 2013 bis 2016 führen können

Da ein Großteil unserer (Neu) Kunden jetzt so langsam anfängt Ihre Exchange Server 2010 in den wohlverdienten Ruhestand zu schicken stolpern diese, oder auch ich, immer mal wieder über entsprechende Konfigurationsfehler. Hier mal ein Überblick, was wie zu Problemen führt und wie diese beseitigt werden:

Client Access Array zeigt auf OWA, ECP, EWS URLs und / oder Outlook Anywhere Host (https://blogs.technet.microsoft.com/exchange/2013/05/23/ambiguous-urls-and-their-effect-on-exchange-2010-to-exchange-2013-migrations/):

  1. Den Link bitte aufmerksam lesen! Wer möchte darf auch noch das und das lesen. 🙂
  2. Die Lösung umsetzen und intern sowie extern per Outlook Anywhere mit dem Exchange verbinden
    Set-OutlookProvider EXPR -OutlookProviderFlags:ServerExclusiveConnect
    Set-OutlookProvider EXCH -OutlookProviderFlags:ServerExclusiveConnect
    

Sollte das nicht möglich sein, wäre ein anderer Schritt eine weitere Datenbank anzulegen und dort den RpcClientAccessServer auf den Exchange selber zeigen zu lassen sowie im Anschluss die Postfächer in die neue Datenbank zu verschieben. Sobald die User sich mit Outlook in der neuen DB verbunden haben, können diese weiter auf den neuen Exchange Server verschoben werden.

New-MailboxDatabase "Name_der_Datenbank"
Set-MailboxDatabase "Name_der_Datenbank" -RpcClientAccessServer Name_des_Exchange_2010
Get-Mailbox -Server Exchange_2010 | New-MoveRequest -TargetDatabase "Name_der_Datenbank"

Achtung: Speicherplatz beachten! Bzw. vorher gründlich planen. 😉

Die nächste Alternative wäre das ClientAccessArray aus den bestehenden Datenbanken zu entfernen und zu löschen. Sollte Autodiscover nicht funktionieren, müssen alle Outlook Profile von Hand neu eingerichtet werden. Aber Achtung: Auch wenn Autodiscover funktioniert, ist die Chance sehr hoch, dass viele Outlook Profile von Hand neu konfiguriert werden müssen!

 

Outlook Web App (OWA) Proxy von Exchange Server 2016 / 2013 zu Exchange 2010 ohne Funktion (:-( Da hat etwas nicht geklappt.):

Outlook Web App Koexistenz 2010 2016 Da hat etwas nicht geklappt.

Outlook Web App Koexistenz 2010 2016 Da hat etwas nicht geklappt.

 

 

 

 

 

Hier ist mir eben grade noch eine HTTP -> HTTPS Weiterleitung bzw. eine Umleitung auf /owa auf die Füße gefallen. Entsprechende Umleitungen können an diversen Stellen konfiguriert sein:

  1. In C:\inetpub\wwwroot\ die „iisstart.htm“ macht ein <META> Redirect.
    Lösung: Am besten die Standard iisstart.htm wieder bereitstellen oder eine leere.
  2. Eine „web.config“ mit entsprechende Umleitung / entsprechenden Umleitungen in C:\inetpub\wwwroot
    Lösung: web.config aus dem Verzeichnis verschieben. Bzw. Backup erstellen und löschen.
  3. HTTP-Umleitung im Internetinformationsdienste (IIS)-Manager (inetmgr)
    Lösung: HTTP-Umleitung im „inetmgr“ deaktivieren

Neben dem Umleitungs-Problem kann es ebenfalls noch ein Berechtigugnsproblem auf dem virtullen Verzeichnis für ECP und / oder OWA sein:

  1. Internetinformationsdienste (IIS)-Manager (inetmgr) starten und unter der „Default Web Site“ im „ecp“ und „owa“ Verzeichnis prüfen, ob die Windows-Authentifizierung aktiviert ist. Falls nicht, diese aktivieren und im rechten Teil in den „Aktionen“ unter „Anbieter…“ sicherstellen, dass „NTLM“ und „Negotiate“ ausgewählt sind. Siehe Bilder:

Kein Zugriff auf Verschobene Mailboxen (Der Informationsspeicher steht zurzeit nicht zur Verfügung) :

Die beschriebenen OWA (Outlook Web App) Probleme können ebenfalls die Ursache dafür sein, dass ein Zugriff mit Outlook auf ein bereits verschobenes Postfach per MAPI over HTTP bzw. Outlook Anywhere nicht möglich ist. Sollte es hier zu einem „komischen“ und „unerklärlichem“ Verhalten kommen, ggfs. die o.g. Schritte prüfen und durchführen. 🙂

Eine Weitere potenzielle Fehlerquelle könnten komplett vergessene öffentliche Ordner (Public Folders) oder eine nicht erstellte PFProxyMailbox sein (Siehe dazu: https://jans.cloud/2018/07/migration-von-exchange-2010-zu-2016/).

Bei weiteren Problemen / Fehler, die mir über den Weg laufen, werde ich den Beitrag updaten. Generell kann es natürlich nie schaden -> RTFM 😀

7. November 2018

Offloading der Netzwerkkarte mit PowerShell aktivieren

Filed under: PowerShell,VMware,Windows Server — Schlagwörter: , , , , , — Jan Mischo @ 10:27

Ein kleines HowTo um Receive Side Scaling (RSS) sowie sämtliches Offloading der NIC(s) an einem Windows Server zu aktivieren (oder deaktivieren)

Ein Kunde hatte eine leicht vernachlässigte VMware vSphere Umgebung mit dem Stand der ESXi Hosts von 6.0 Update 1. Aufgrund der damals™ auftretenden Netzwerkprobleme, hatte der Kunde sich dazu entschlossen sämtliches Offloading sowie Receive Side Scaling auf den Netzwerkkarten zu deaktivieren. Siehe dazu den VMware KB Artikel 2129176. Nachdem die Umgebung auf einen aktuellen 6.5 Build aktualisiert wurde gab es erneut extreme Netzwerkprobleme. Siehe erneut den VMware KB Artikel 2129176. 😉

Kurzum musste auf diversen Windows Servern die erweiterte Netzwerkkartenkonfiguration angepasst werden. Vorher:

Jetzt folgte ein wenig PowerShell Magic:

# Zum Deaktivieren des Offloading sowie RSS alle Werte (-Value) auf "0" setzen
$RegRoot = "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}"
$RegItems = Get-ChildItem -Path Registry::$RegRoot -Name

foreach ($RegItem in $RegItems) {
    if ($RegItem -ne "Properties" -and $RegItem -ne "Configuration") {
        $RegPath = $RegRoot + "\" + $RegItem
        if ($(Get-ItemProperty -Path Registry::$RegPath | Select-Object -ExpandProperty "ProviderName") -eq "VMware, Inc." -and $(Get-ItemProperty -Path Registry::$RegPath | Select-Object -ExpandProperty "DriverDesc") -eq "vmxnet3 Ethernet Adapter"){
            Set-ItemProperty -Path Registry::$RegPath -Name "*IPChecksumOffloadIPv4" -Value "3" -Force
            Set-ItemProperty -Path Registry::$RegPath -Name "*LsoV1IPv4" -Value "1" -Force
            Set-ItemProperty -Path Registry::$RegPath -Name "*LsoV2IPv4" -Value "1" -Force
            Set-ItemProperty -Path Registry::$RegPath -Name "*LsoV2IPv6" -Value "1" -Force
            Set-ItemProperty -Path Registry::$RegPath -Name "*RSS" -Value "1" -Force
            Set-ItemProperty -Path Registry::$RegPath -Name "*TCPChecksumOffloadIPv4" -Value "3" -Force
            Set-ItemProperty -Path Registry::$RegPath -Name "*TCPChecksumOffloadIPv6" -Value "3" -Force
            Set-ItemProperty -Path Registry::$RegPath -Name "*UDPChecksumOffloadIPv4" -Value "3" -Force
            Set-ItemProperty -Path Registry::$RegPath -Name "*UDPChecksumOffloadIPv6" -Value "3" -Force
            Set-ItemProperty -Path Registry::$RegPath -Name "OffloadIpOptions" -Value "1" -Force
            Set-ItemProperty -Path Registry::$RegPath -Name "OffloadTcpOptions" -Value "1" -Force
            Set-ItemProperty -Path Registry::$RegPath -Name "OffloadVlanEncap" -Value "1" -Force
        }
    }
}

Die evtl. große Frage: Was macht das Script? Generell recht simepl:

  1. Der Netzwerk-Adapter Zweig der Registry wird festgelet (HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}). Siehe dazu die Microsoft Docs: https://docs.microsoft.com/en-us/windows-hardware/drivers/install/system-defined-device-setup-classes-available-to-vendors
  2. Es werden alle Unterschlüssel des Registryzweiges ausgelesen und nacheinander in einer foreach-Schleife durchlaufen.
  3. Im Zweig gibt es neben den interessanten Schlüsseln „0000“ bis „00xy“ noch die uninteressanten Schlüssel „Propertiers“ sowie „Configuration“. Diese werden „aussortiert“.
  4. Der aktuelle Registry-Pfad wird gebaut und auf das Vorhandensein des Keys „ProviderName“ mit dem Wert „VMware, Inc.“ und „DriverDesc“ mit dem Wert „vmxnet3 Ethernet Adapter“ geprüft. (Wir befinden uns ja bei VMware, daher VMXnet3 und VMware Inc.)
  5. Zum Schluss werden die entsprechenden für das Offloading verantwortlichen Reg-Keys mit den passenden Werten geschrieben.

Und voilà:

Da wir uns hier ja im VMware Bereich befinden und es glücklicherweise die PowerCLI von VMware gibt, machen wir uns diese zu Nutze, um das Script auf allen Windows Systemen auszurollen:

$vCenterServer = "Name des VCenter Servers / der VCenter Appliance"
$Cred = Get-Credential

Get-Module -ListAvailable VMWare* | Import-Module

Connect-VIServer -Server $vCenterServer

foreach($VM in Get-VM | Where { $_.Guest -Like "*:Microsoft Windows Server*" }) {
    Write-Host $VM.Name
    Copy-VMGuestFile -VM $VM -Source C:\Install\Scripts\Offloading.ps1 -Destination C:\install\Scripts\Offloading.ps1 -LocalToGuest -GuestCredential $Cred -Force
    Invoke-VMScript -VM $VM -ScriptText C:\Install\Scripts\Offloading.ps1 -ScriptType Powershell -GuestCredential $Cred
}

Erneut, die Frage: Was ist passiert?

  1. Der FQDN des VCenters wird eingelesen, danach wird das Kennwort für einen entsprechenden Windows Benutzer in den VMs abgefragt und schließlich die verfügbaren VMware PowerShell Module der PowerCLI werden aufgelistet und geladen. Die PowerCLI gibt es übrigens >hier<.
  2. Es wird sich mit dem VCenter verbunden.
  3. Erneut geht es in eine foreach-Schleife in der alle Virtuellen Maschinen gesucht werden, die als Gast ein Windows Server OS ausführen.
  4. Völlig unspektakulär wird der VMName ausgegeben.
  5. Vom lokalen Client, auf dem die PowerShell ausgeführt wird, wird das Script C:\Install\Scripts\Offloading.ps1 (siehe oben) in die Gast VM an selbige Stelle kopiert. Dabei werden die anfangs eingegeben Credentials genutzt. „-Force“ wird benutzt, falls das Script schon dort liegen sollte.
  6. Zum Schluss wird das soeben kopierte Script in der virtuellen Maschine ausgeführt.

That’s it. 🙂

1. August 2018

Exchange Server 2019 Preview verfügbar

Filed under: Exchange,PowerShell,Windows Server — Schlagwörter: , , , — Jan Mischo @ 14:37

Am 24.07.2018 wurde die Exchange Server 2019 Preview für die Allgemeinheit veröffentlicht

Da es grade sehr heiß ist und in der Ferienzeit scheinbar alle im Urlaub sind, habe ich meine riesige Exchange Demoumgebung doch direkt einmal auf die Exchange Server 2019 Preview upgedatet. 🙂

Bei der Installation in die bestehende Exchange Organisation hat sich im Vergleich zu den letzten beiden Exchange Versionen eigentlich wenig getan. Die Vorraussetzungen sind ebenfalls nahezu geich geblieben und wären namentlich:

Eine kleine (ggfs. wichtige) Änderung betrifft das Forest Functional Level der Gesamtstruktur. Dieses muss mindestens auf das Forest Functionality Level Server 2012 R2 angehoben werden!

Getreu dem Dinner for one Motto „The same procedure as every year“ sieht das GUI Setup dem der alten Versionen ziemlich ähnlich. Damit alle beruhigt sind, bei der Installation per Commandline hat sich auch nichts getan.

Nach der Installation geht es ebenfalls ziemlich genau so weiter wie bei einer Migration von Exchange 2013 auf 2016:

#Auslesen der Exchange Server
$Exch2016 = Get-ExchangeServer | ? AdminDisplayVersion -match "Version 15.1"
$Exch2019 = Get-ExchangeServer | ? AdminDisplayVersion -match "Version 15.2"
#Auslesen des konfigurierten SplitDNS FQDNs
$vDirHost = $(Get-OwaVirtualDirectory -Server $Exch2016).InternalURL.Host

#Mailboxdatenbanken auf dem Exchange 2019 trennen
Get-MailboxDatabase -Server $Exch2019 | Dismount-Database -Confirm:$false
#Mailboxdatenbanken umbenennen, verschieben und einbinden
foreach ($DB in $(Get-MailboxDatabase -Server $Exch2019)) { $i = $i + 1; Set-MailboxDatabase -Identity $DB -Name Exch2019DB0$i; Move-Databasepath -Identity $DB -edbfilepath "D:\ExchangeDB\Exch2019DB0$i\Exch2019DB0$i.edb" -logfolderpath "D:\ExchangeLOG\Exch2019DB0$i" -confirm:$false; Mount-Database -Identity Exch2019DB0$i -confirm:$false }

#Neuen Receiveconnector "Internet" erstellen und in meinem Fall der Firewall erlauben anonym Mails einzuliefern
New-ReceiveConnector -Name "Internet" -Usage Custom  -TransportRole FrontendTransport -PermissionGroups AnonymousUsers -Bindings 0.0.0.0:25 -RemoteIpRanges $((Get-NetRoute -ifIndex $(Get-NetIPAddress -InterfaceAlias "LAN" -AddressFamily "IPv4").ifIndex | ? DestinationPrefix -eq "0.0.0.0/0").NextHop)
#Dem Sendeconnector "Internet" den neuen Exchange hinzufügen
Get-SendConnector -Identity "Internet" | Set-SendConnector -SourceTransportServers $Exch2016, $Exch2019

#IMAP und POP Zertifikats CN anpassen, da ich ein Wildcard Zertifikat nutze
Set-ImapSettings -Server $Exch2019 -X509CertificateName $vDirHost
Set-PopSettings -Server $Exch2019 -X509CertificateName $vDirHost

# IMAP und POP Dienste neu starten
Restart-Service MSExchangeIMAP4BE
Restart-Service MSExchangeImap4
Restart-Service MSExchangeIMAP4BE
Restart-Service MSExchangePop3

#Virtuelle Verzeichnisse konfigurieren
Get-OwaVirtualDirectory -Server $Exch2019 | Set-OwaVirtualDirectory -InternalUrl "https://$vDirHost/owa" -ExternalUrl "https://$vDirHost/owa"
Get-EcpVirtualDirectory -Server $Exch2019 | Set-EcpVirtualDirectory -InternalUrl "https://$vDirHost/ecp" -ExternalUrl "https://$vDirHost/ecp"
Get-OABVirtualDirectory -Server $Exch2019 | Set-OABVirtualDirectory -InternalURL "https://$vDirHost/OAB" -ExternalURL "https://$vDirHost/OAB"
Get-ActiveSyncVirtualDirectory -Server $Exch2019 | Set-ActiveSyncVirtualDirectory -InternalURL "https://$vDirHost/Microsoft-Server-ActiveSync" -ExternalURL "https://$vDirHost/Microsoft-Server-ActiveSync"
Get-WEbServicesVirtualDirectory -Server $Exch2019 | Set-WEbServicesVirtualDirectory -InternalURL "https://$vDirHost/EWS/Exchange.asmx" -ExternalURL "https://$vDirHost/EWS/Exchange.asmx"
Get-MapiVirtualDirectory -Server $Exch2019 | Set-MapiVirtualDirectory -InternalURL "https://$vDirHost/mapi" -ExternalURL "https://$vDirHost/mapi"
Get-ClientAccessService -Identity $Exch2019.Name | Set-ClientAccessService -AutodiscoverServiceInternalUri https://$vDirHost/autodiscover/autodiscover.xml
Get-OutlookAnywhere -Server $Exch2019 | Set-OutlookAnywhere -ExternalHostname $vDirHost -InternalHostname $vDirHost -ExternalClientsRequireSsl:$true -InternalClientsRequireSsl:$true -ExternalClientAuthenticationMethod "Ntlm"

#Zertifikatskette und eigentliches Wildcard Zertifikat aus C:\Install\Zertifikate einlesen
$Zertifikat = (Get-ChildItem -Path C:\Install\Zertifikate\1Comodo_RootCA.crt)
$Zertifikat | Import-Certificate -CertStoreLocation Cert:\LocalMachine\Root | Out-Null
$Zertifikat = (Get-ChildItem -Path C:\Install\Zertifikate\2Comodo_Intermediate_1.crt)
$Zertifikat | Import-Certificate -CertStoreLocation Cert:\LocalMachine\CA | Out-Null
$Zertifikat = (Get-ChildItem -Path C:\Install\Zertifikate\3Comodo_Intermediate_2.crt)
$Zertifikat | Import-Certificate -CertStoreLocation Cert:\LocalMachine\CA | Out-Null
$Zertifikat = Import-pfxCertificate -FilePath "C:\Install\Zertifikate\04Wildcard.pfx" -CertStoreLocation Cert:\LocalMachine\My -Password $(ConvertTo-SecureString "Kennwort1" -AsPlainText -Force)
Enable-ExchangeCertificate -Thumbprint $Zertifikat.Thumbprint -Services IIS, IMAP, POP, SMTP -Force -Confirm:$false

#An dieser Stelle wäre es Zeit die IP Adresse im DNS von $vDirHost auf den neuen Exchange Server zu schwenken
#Sowie den DNS Cache am Server sowie Client zu löschen
#Sowie einen heißen, schwarzen Kaffee zu trinken!

#Migrations Mailbox verschieben
#https://technet.microsoft.com/en-us/library/mt441791(v=exchg.150)
Get-Mailbox -Identity Migration* -Arbitration | New-MoveRequest -TargetDatabase Exch2019DB01

#Test User verschieben
New-MoveRequest Toni.Test -TargetDatabase Exch2019DB01

#Outlook testen... Outlook kann während dem gesamten Verschiebevorgang offen sein. Nach Abschluss ist ebenfalls kein Neustart mehr notwendig

#Arbitration Postfächer, alle anderen Postfächer und die öffentlichen Ordner Postfächer verschieben
Get-Mailbox -Server $Exch2016 -Arbitration | New-MoveRequest -TargetDatabase Exch2019DB01
Get-Mailbox -Server $Exch2016 | New-MoveRequest -TargetDatabase Exch2019DB01
Get-Mailbox -PublicFolder | New-MoveRequest -TargetDatabase Exch2019DB01
Get-Mailbox -AuditLog | New-MoveRequest -TargetDatabase Exch2019DB01

#Aufräumen
Get-MoveRequest | Remove-MoveRequest -Confirm:$false

#Exchange 2016 deinstallieren

Aufgrund des Hinweises von Sebastian Röhner im Kommentar, habe ich die Umgebung noch einmal neu aufgebaut und die Mailbox eines Testusers direkt verschoben ohne vorher das Migrationspostfach (Migration Mailbox) zu verschieben. Was soll ich sagen, es hat erneut ohne Probleme funktionert. Dennoch werde ich in Zukunft wohl den Microsoft-Weg, wie in https://technet.microsoft.com/en-us/library/mt441791(v=exchg.150) beschrieben gehen. Daher ist das Script auch ein wenig ergänzt worden.

Nochmals ein „Danke“ an Sebastian Röhner für den Hinweis!

MoveRequest MigrationMailbox

MoveRequest MigrationMailbox

 

 

 

 

 

Da bleibt ja eigenltich nur die Frage nach den Änderungen oder Neuerungen… Auf den ersten Blick wären da:

  • Support von Windows Server 2016 (2019 vermutlich auch?) Core
  • Einem in der Preview nicht funktionierenden SSD Cache
  • Indexierung nicht mehr im Dateisystem sondern in der Datenbnak
  • Unterstützung von 48 Prozessoren und 256GB RAM
  • Es gibt keine UM (Unified Messaging) Rolle mehr mit Exchange 2019
halo i bims exchange server 2019 preview

halo i bims exchange server 2019 preview

 

18. Juli 2018

Unnötige Windows Server 2016 Dienste deaktivieren

Deaktivieren der nicht benötigten Windows Server 2016 Dienste (Manager für heruntergeladene Karten, Xbox Live Authentifizierungs-Manager, Xbox Live-Spiele speicher, usw.)

Kurz und schmerzlos:

$cred = Get-Credential
foreach ($Server in $(Get-ADComputer -SearchBase "OU=Meine OU,DC=Meine Domäne,DC=Meine TLD" -Filter 'OperatingSystem -like "Windows Server 2016*"')) {
    Write-Host "Verbinde mit Server:" $Server.DNSHostName
    Invoke-Command -ComputerName $Server.DNSHostName -Credential $cred -ScriptBlock {
        Write-Host "`tDeaktiviere Dienste..."
        Set-Service -Name "MapsBroker" -StartupType Disabled
        Set-Service -Name "XblAuthManager" -StartupType Disabled
        Set-Service -Name "XblGameSave" -StartupType Disabled

        Write-Host "`tDeaktiviere per User Dienste..."
        if(Test-Path -Path HKLM:\SYSTEM\CurrentControlSet\Services\OneSyncSvc_*) {
	        $TempSVC = (Get-ChildItem -Path HKLM:\SYSTEM\CurrentControlSet\Services\OneSyncSvc_*)
	        foreach ($SVC in $TempSVC) {
		        $SVC = "$($SVC.PSParentPath)\$($SVC.PSChildName)"
		        Set-ItemProperty -Path $SVC -Name "Start" -Value 4
	        }
        }
        Write-Host "`tDeaktiviere geplante Tasks..."
        Disable-ScheduledTask -TaskPath "\Microsoft\Windows\Maps\" -TaskName "MapsToastTask" | Out-Null
        Disable-ScheduledTask -TaskPath "\Microsoft\XblGameSave\" -TaskName "XblGameSaveTask" | Out-Null
        Disable-ScheduledTask -TaskPath "\Microsoft\XblGameSave\" -TaskName "XblGameSaveTaskLogon" | Out-Null
    }
}

Vor einiger Zeit hatte ich über das Citrix Optimizer Tool geschrieben. Das deaktiviert unterm Strich ebenfalls einige Dienste und nimmt weitere Einstellungen vor. Ebenfalls hat Microsoft eine Liste mit Diensten veröffentlicht die deaktiviert werden sollten / können:

Hier einmal das „volle Programm“ an überflüssigen / unnötigen Windows Server 2016 Diensten:

$cred = Get-Credential
foreach ($Server in $(Get-ADComputer -SearchBase "OU=Meine OU,DC=Meine Domäne,DC=Meine TLD" -Filter 'OperatingSystem -like "Windows Server 2016*"')) {
    Write-Host "Verbinde mit Server:" $Server.DNSHostName
    Invoke-Command -ComputerName $Server.DNSHostName -Credential $cred -ScriptBlock {
        Write-Host "`tDeaktiviere Dienste..."
        Set-Service -Name "Audiosrv" -StartupType Disabled
        Set-Service -Name "AudioEndpointBuilder" -StartupType Disabled
        Set-Service -Name "AxInstSV" -StartupType Disabled
        Set-Service -Name "bthserv" -StartupType Disabled
        Set-Service -Name "CDPUserSvc" -StartupType Disabled
        Set-Service -Name "dmwappushservice" -StartupType Disabled
        Set-Service -Name "FrameServer" -StartupType Disabled
        Set-Service -Name "icssvc" -StartupType Disabled
        Set-Service -Name "lltdsvc" -StartupType Disabled
        Set-Service -Name "lfsvc" -StartupType Disabled
        Set-Service -Name "MapsBroker" -StartupType Disabled
        Set-Service -Name "NcbService" -StartupType Disabled
        Set-Service -Name "PcaSvc" -StartupType Disabled
        Set-Service -Name "QWAVE" -StartupType Disabled
        Set-Service -Name "RmSvc" -StartupType Disabled
        Set-Service -Name "SensorDataService" -StartupType Disabled
        Set-Service -Name "SensorService" -StartupType Disabled
        Set-Service -Name "SensrSvc" -StartupType Disabled
        Set-Service -Name "SharedAccess" -StartupType Disabled
        Set-Service -Name "ShellHWDetection" -StartupType Disabled
        Set-Service -Name "SSDPSRV" -StartupType Disabled
        Set-Service -Name "stisvc" -StartupType Disabled
        Set-Service -Name "TabletInputService" -StartupType Disabled
        Set-Service -Name "upnphost" -StartupType Disabled
        Set-Service -Name "WalletService" -StartupType Disabled
        Set-Service -Name "WiaRpc" -StartupType Disabled
        Set-Service -Name "wisvc" -StartupType Disabled
        Set-Service -Name "wlidsvc" -StartupType Disabled
        Set-Service -Name "WpnService" -StartupType Disabled
        Set-Service -Name "XblAuthManager" -StartupType Disabled
        Set-Service -Name "XblGameSave" -StartupType Disabled

        Write-Host "`tDeaktiviere User Dienste..."
        if(Test-Path -Path HKLM:\SYSTEM\CurrentControlSet\Services\CDPUserSvc_*) {
	        $TempSVC = (Get-ChildItem -Path HKLM:\SYSTEM\CurrentControlSet\Services\CDPUserSvc_*)
	        foreach ($SVC in $TempSVC) {
		        $SVC = "$($SVC.PSParentPath)\$($SVC.PSChildName)"
		        Set-ItemProperty -Path $SVC -Name "Start" -Value 4
	        }
        }
        Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\NgcSvc" -Name "Start" -Value 4
        Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\OneSyncSvc" -Name "Start" -Value 4
        if(Test-Path -Path HKLM:\SYSTEM\CurrentControlSet\Services\OneSyncSvc_*) {
	        $TempSVC = (Get-ChildItem -Path HKLM:\SYSTEM\CurrentControlSet\Services\OneSyncSvc_*)
	        foreach ($SVC in $TempSVC) {
		        $SVC = "$($SVC.PSParentPath)\$($SVC.PSChildName)"
		        Set-ItemProperty -Path $SVC -Name "Start" -Value 4
	        }
        }
        Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\PimIndexMaintenanceSvc" -Name "Start" -Value 4
        if(Test-Path -Path HKLM:\SYSTEM\CurrentControlSet\Services\PimIndexMaintenanceSvc_*) {
	        $TempSVC = (Get-ChildItem -Path HKLM:\SYSTEM\CurrentControlSet\Services\PimIndexMaintenanceSvc_*)
	        foreach ($SVC in $TempSVC) {
		        $SVC = "$($SVC.PSParentPath)\$($SVC.PSChildName)"
		        Set-ItemProperty -Path $SVC -Name "Start" -Value 4
	        }
        }
        Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\UserDataSvc" -Name "Start" -Value 4
        Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\UnistoreSvc" -Name "Start" -Value 4
        if(Test-Path -Path HKLM:\SYSTEM\CurrentControlSet\Services\UnistoreSvc_*) {
	        $TempSVC = (Get-ChildItem -Path HKLM:\SYSTEM\CurrentControlSet\Services\UnistoreSvc_*)
	        foreach ($SVC in $TempSVC) {
		        $SVC = "$($SVC.PSParentPath)\$($SVC.PSChildName)"
		        Set-ItemProperty -Path $SVC -Name "Start" -Value 4
	        }
        }
        Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\WpnUserService" -Name "Start" -Value 4
        if(Test-Path -Path HKLM:\SYSTEM\CurrentControlSet\Services\WpnUserService_*) {
	        $TempSVC = (Get-ChildItem -Path HKLM:\SYSTEM\CurrentControlSet\Services\WpnUserService_*)
	        foreach ($SVC in $TempSVC) {
		        $SVC = "$($SVC.PSParentPath)\$($SVC.PSChildName)"
		        Set-ItemProperty -Path $SVC -Name "Start" -Value 4
	        }
        }

        Write-Host "`tDeaktiviere geplante Tasks..."
        Disable-ScheduledTask -TaskPath "\Microsoft\Windows\Application Experience\" -TaskName "Microsoft Compatibility Appraiser" | Out-Null
        Disable-ScheduledTask -TaskPath "\Microsoft\Windows\Application Experience\" -TaskName "ProgramDataUpdater" | Out-Null
        Disable-ScheduledTask -TaskPath "\Microsoft\Windows\AppID\" -TaskName "EDP Policy Manager" | Out-Null
        Disable-ScheduledTask -TaskPath "\Microsoft\Windows\AppID\" -TaskName "SmartScreenSpecific" | Out-Null
        Disable-ScheduledTask -TaskPath "\Microsoft\Windows\ApplicationData\" -TaskName "CleanupTemporaryState" | Out-Null
        Disable-ScheduledTask -TaskPath "\Microsoft\Windows\ApplicationData\" -TaskName "DsSvcCleanup" | Out-Null
        Disable-ScheduledTask -TaskPath "\Microsoft\Windows\Autochk\" -TaskName "Proxy" | Out-Null
        Disable-ScheduledTask -TaskPath "\Microsoft\Windows\Bluetooth\" -TaskName "UninstallDeviceTask" | Out-Null
        Disable-ScheduledTask -TaskPath "\Microsoft\Windows\CloudExperienceHost\" -TaskName "CreateObjectTask" | Out-Null
        Disable-ScheduledTask -TaskPath "\Microsoft\Windows\Customer Experience Improvement Program\" -TaskName "Consolidator" | Out-Null
        Disable-ScheduledTask -TaskPath "\Microsoft\Windows\Customer Experience Improvement Program\" -TaskName "KernelCeipTask" | Out-Null
        Disable-ScheduledTask -TaskPath "\Microsoft\Windows\Customer Experience Improvement Program\" -TaskName "UsbCeip" | Out-Null
        Disable-ScheduledTask -TaskPath "\Microsoft\Windows\Diagnosis\" -TaskName "Scheduled" | Out-Null
        Disable-ScheduledTask -TaskPath "\Microsoft\Windows\Location\" -TaskName "Notifications" | Out-Null
        Disable-ScheduledTask -TaskPath "\Microsoft\Windows\Location\" -TaskName "WindowsActionDialog" | Out-Null
        Disable-ScheduledTask -TaskPath "\Microsoft\Windows\Maintenance\" -TaskName "WinSAT" | Out-Null
        Disable-ScheduledTask -TaskPath "\Microsoft\Windows\Maps\" -TaskName "MapsToastTask" | Out-Null
        Disable-ScheduledTask -TaskPath "\Microsoft\Windows\Mobile Broadband Accounts\" -TaskName "MNO Metadata Parser" | Out-Null
        Disable-ScheduledTask -TaskPath "\Microsoft\Windows\NetTrace\" -TaskName "GatherNetworkInfo" | Out-Null
        Disable-ScheduledTask -TaskPath "\Microsoft\Windows\Power Efficiency Diagnostics\" -TaskName "AnalyzeSystem" | Out-Null
        Disable-ScheduledTask -TaskPath "\Microsoft\Windows\Ras\" -TaskName "MobilityManager" | Out-Null
        Disable-ScheduledTask -TaskPath "\Microsoft\Windows\SpacePort\" -TaskName "SpaceAgentTask" | Out-Null
        Disable-ScheduledTask -TaskPath "\Microsoft\Windows\SpacePort\" -TaskName "SpaceManagerTask" | Out-Null
        Disable-ScheduledTask -TaskPath "\Microsoft\Windows\Speech\" -TaskName "SpeechModelDownloadTask" | Out-Null
        Disable-ScheduledTask -TaskPath "\Microsoft\Windows\Storage Tiers Management\" -TaskName "Storage Tiers Management Initialization" | Out-Null
        Disable-ScheduledTask -TaskPath "\Microsoft\Windows\WDI\" -TaskName "ResolutionHost" | Out-Null
        Disable-ScheduledTask -TaskPath "\Microsoft\Windows\Workplace Join\" -TaskName "Automatic-Device-Join" | Out-Null
        Disable-ScheduledTask -TaskPath "\Microsoft\XblGameSave\" -TaskName "XblGameSaveTask" | Out-Null
        Disable-ScheduledTask -TaskPath "\Microsoft\XblGameSave\" -TaskName "XblGameSaveTaskLogon" | Out-Null
    }
}

Hier das Script als Textdatei zum Download: Windows Server 2016 Dienste deaktivieren

Older Posts »

Powered by WordPress