Category: Windows Server

Print drivers and Microsoft Update KB3170455

Typically users get their printers mapped by Group Policies or Group Policy Preferences. Especially in Citrix environments, users should not have the right to add their own printers or drivers that are not approved for multi-user environments. On July 12th 2016, Microsoft released a security update (KB3170455) to safeguard Man-in-the-Middle (MITM) attacks for clients and print servers. Then an updated version was released again September 12th 2017.

Users could encounter the dialog boxes below if the driver did not meet the requirements of Microsoft where the driver would be packaged and signed with a certificate:

Scenario 1

For non-package-aware v3 printer drivers, the following warning message may be displayed when users try to connect to point-and-print printers:


Do you trust this printer?

Scenario 2

Package-aware drivers must be signed with a trusted certificate. The verification process checks whether all the files that are included in the driver are hashed in the catalog. If that verification fails, the driver is deemed untrustworthy. In this situation, driver installation is blocked, and the following warning message is displayed:


Connect to Printer

Even if you enabled Point and Print restrictions in GPO and specified which server’s clients could get drivers from, users could encounter an installation prompt and request administrator privileges to install.

For most printers this is not an issue if there is an up-to-date driver which is compliant. Some manufacturers do not always provide printers drivers that is both packaged and signed. The first thing you should do is update the driver to one that both is signed and packaged. Usually the drivers from the manufacturer are signed according to Microsoft Windows Hardware Quality Labs (WHQL) but may not be packaged correctly and the users get prompted for administrator credentials when the printer is being added to the client computer or in the remote desktop session.

Since KB3170455 we need to enable point and print restrictions and specify our print servers in the GPO. For most printers there is no issues, however a couple of printers will not be pushed out by Group Policy Preferences since the update. Even though the print server was listed in the point and print GPO. Browsing the print share and trying to connect the printer manually would result in the ”Do you trust this printer” pop up which will then prompt for administrator credentials to install the driver. Looking at Print Management on the server in question shows that the problem printer drivers have a ”Packaged” status of false.


If you are pushing out printers via Group Policy or Group Policy Preferences and they are of Non-Packaged type you will always get a prompt to install, ignoring the point and print GPO, which will cause the install to fail. A workaround to this is a registry edit on the print server – test and verify this first before putting it into production:

  • HKLM\System\CurrentControlSet\Control\Print\Enviroments\Windowsx64\Drivers\<…>\<Driver name>\PrinterDriverAttributes

Change the value from 0 to 1 and reboot the printspool service or/and server. The value for other print drivers may not be 1, but to make this work the value needs to be set to an odd number. For example, if the value is 4 change it to 5. Only do these changes if you have no other means of getting a valid driver or printer swapped. In RDS/Citrix environments you could pre-install the printer driver on the host if viable and you only have a few session-hosts.

Back in Print Management you will see the Packaged status is now changed to true, and the printer should deploy. If you can find packaged print drivers then use those, but some manufacturers have not bothered supplying them.


PrintManagement – Packaged True


Update for Windows is already installed on this computer?

En del uppdateringar från Windows Update misslyckas vid installation med en prompt om att uppdateringen redan är installerad. Ett återkommande exempel är KB3146978 som listas som en rekommenderad hotfix för RDS 2012 R2 Session Hosts. I ett flertal miljöer har jag sett att KB3146978 inte listas under Installed Updates, Systeminfo, Powershells Get-Hotfix, wmic get hotfixid eller andra sätt som är baserade på Win32_QuickEngineering men installation fastnar ändå på ”Update for Windows is already installed on this Computer”.

För att få en mer inkluderande översyn på vilka uppdateringar som faktiskt är installerade kan följande köras:

$Session = New-Object -ComObject ”Microsoft.Update.Session”
$Searcher = $Session.CreateUpdateSearcher()
$historyCount = $Searcher.GetTotalHistoryCount()
$Searcher.QueryHistory(0, $historyCount) | Select-Object Title, Description, Date,
@{name=”Operation”; expression={switch($_.operation){
1 {”Installation”}; 2 {”Uninstallation”}; 3 {”Other”}
}}} | Export-Csv -NoType ”$Env:userprofile\Desktop\Windows Updates.csv”

Windows Updates.csv lägger sig då på skrivbordet och innehåller i detta exempel information om att KB3146978 faktiskt är installerad.

Provisioning services – Activate SMB2 for better security and performance

When installing Provision Services 7.x and below on a Windows 2008 R2 or Windows 2012 R2 – The Provisioning installer will disable SMB2 and only allow SMB1 on the server.
NOTE: SMB2 will still be enabled with a new install of PVS 7.13 (Thanks Andrew Wood).

Verify which SMB protocols are enabled on Windows 2012 R2 by running the following powershell command:

View SMB Protocols

View SMB Protocols

SMB 1.0 (or SMB1) – Used in Windows 2000, Windows XP and Windows Server 2003 R2 is no longer supported and you should use SMB2 or SMB3 which has many improvements from its predecessor. Another big reason is to prevent the security-hole that the WannaCry/Wcry/WannaCrypt0r-ransomware utilizes to infect and spread if you have not installed the security patch MS from Microsoft released 14th of March 2017.

Here’s a very brief summary of what changed with each version of SMB:

  • From SMB 1.0 to SMB 2.0 – The first major redesign of SMB – Windows Vista (SP1 or later) and Windows Server 2008
    • Increased file sharing scalability
    • Improved performance
      • Request compounding
      • Asynchronous operations
      • Larger reads/writes
    • More secure and robust
      • Small command set
      • Signing now uses HMAC SHA-256 instead of MD5
      • SMB2 durability
  • From SMB 2.0 to SMB 2.1 – The version used in Windows 7 and Windows Server 2008 R2
    • File leasing improvements
    • Large MTU support
    • BranchCache
  • SMB 3.0 – The version used in Windows 8 and Windows Server 2012

SMB2 has a requirement to utilize Oplocks. Enabling Oplocks will not cause any failures so long as the write cache is not stored on the Provisioning Server.
SMB2.1 introduced leasing and is more flexible and results in significant performance improvement in a high latency network.

If the write cache is on the PVS server then this would happen:

  1. You have two PVS servers, PVS1 and PVS2.
  2. The write cache for targets is hosted on \\FileSRV01\store
  3. A target device is connected to PVS1 and PVS1 becomes unavailable.
  4. The target device fails over and connects to PVS2.
  5. PVS2 cannot connect to the write cache file because PVS1 still has the exclusive OPlock to the file. Eventually, the OPlock will timeout and PVS2 will be able to connect to the write cache file, but there will be a delay.


To activate SMB2 and disable SMB1 on Windows 2008 run the following PowerShell command:

To activate SMB2 and disable SMB1 on Windows 2012 run the following PowerShell command:

A reboot is required to activate the new settings. As always, perform any changes in a test scenario first, before deploying into production. This is important since Windows XP and Windows 2003 utilizes SMB1 and will not be able to communicate with servers over SMB where SMB1 has been disabled.

If you have any questions or feedback about above, feel free to leave a comment below!

Applocker eventlog audit report

Applocker is a great resource to avoid malicious code and applications, however it’s not always easy to inventory the applications in your environment.
To solve this Applocker can be configured to audit only for a time and clients can upload logs to a server which can then be filtered with powershell into a easy to filter report.

First a GPO must be configured with enforce or audit only rules.

Then an Event subscription manager needs to be configured (details at the end of the post).
When a server is configured the subscriptions needs to be configured, set up a subscription per applocker policy type.


The logs should now be collected by the server and presented in the Forwarded Events log.

However the data is only available in XML view and sorting through hundreds of logs manually is often not a valid approach. This is where powershell comes to the rescue.

The script below can be run on the collector server or remotely and outputs valuable data to a gridview report. The gridview can in turn be copied to an excel sheet for further processing.


Configure Source initiated subscription:

Microsoft kommer med ett nytt sätt att hantera patchar

Ni har säkert märkt att Windows 10 och Windows Server 2016 fungerar annorlunda kring patchning. Där släpper Microsft 1 st uppdatering som innehåller samtliga fixar och de är även kumultativa, det vill säga, installerar du en ny maskin, kör Windows Update så laddar den bara ner den senaste uppdateringen och då inkluderar den alla tidigare patchar. Med andra ord, slut på att efter deployat en maskin behöva installera 100+ patchar.

Fördelen är såklart att det går snabbare att deploya maskiner. Du behöver inte spendera lika mycket tid att verifiera vissa patchar är installerade (och kanske ha samma på flera servrar som man gärna vill ha i farmar/kluster) och Microsoft slipper testa alla oändliga kombinationer när de släpper nya patchar. Så tanken är säkert också att kvalitén ska bli bättre då Microsoft kommer ha färre kombinationer att testa innan de släpper en uppdatering.

Nackdeldelen är att det inte går att styra exakt vilken KB som installeras. Med andra ord ”Kan man backa tillbaka en enskild patch (KB) om just den orsakar problem?” Korta svaret – Nej. Men vill du veta mer, läs denna blog post.

Nu kanske ni tänker att det är bara något man behöver tänka på i Windows 10 och Windows Server 2016?

FEL! Från och med Oktober i år så gäller detta även Windows 7/8/8.1/2008 R2/2012 och 2012 R2.

Vi inser att det kommer ställa en hel del krav på organisationer och den process de har idag för att patcha sina miljöer. Tiden kommer också utvisa om detta är rätt drag av Microsoft för att förenkla och även minimera risken för felande patchar.

Ställs ni inför utmaningar hur ni ska hantera patchar framöver? Eller behöver ni förstå Microsofts olika begrepp kring Upgrade, Update, Branch och Ring? Kontakta oss så hjälper vi dig!

Windows Server 2016: Hyper-V Discrete Device Assignment

En stor nyhet i Windows Server 2016 och Hyper-V är möjligheten att via Discrete Device Assignment vidarekoppla enheter anslutna med PCI-Express till virtuella maskiner.

Det har t.ex. sedan tidigare varit möjligt att vidarekoppla grafikkort till en VDI-infrastruktur med både XenServer och VMware vilket i sin tur har gjort det möjligt att virtualisera även de mest krävande användarnas arbetsstationer. Detta kommer alltså snart också vara möjligt med Hyper-V.

Vi satte därför i ett NVIDIA GRID K2 grafikkort i en server, installerade Windows Server 2016 Technical Preview 5 med Hyper-V och testade. Följande skärmdumpar är från en virtuell maskin som har en NVIDIA GRID K2 GPU tilldelad via Discrete Device Assignment.



Inventera patchjobb

Verifiera patchar på servrar är något som måste göras och är ofta tidskrävande.
Det finns verktyg från Microsoft samt övervakningssystem för att skanna patchnivå m.m men ibland behövs det endast en snabb första kontroll för att se till att servrarna har blivit patchade.

Jag har skrivit några rader i powershell för att snabbt, asynkront skanna maskiner enligt en array med enkel presentation. Koden inventerar om patchar har installerats de senaste 2 dygnen och listar antalet patchar samt senaste uppstart.

Vid körning skapas jobb upp för seriell hantering.

Efter körning presenteras jobben i en sökbar lista eller kan exporteras till en fil.

Vid fel (behörigheter, nätverk etc) fylls error kollumnen i och dessa bör hanteras manuellt.

Flytta Hyper-V VM till Azure

Det finns många sätt att flytta Hyper-V VM till Azure, i detta fallet beskriver jag hur det kan göras till ett befintligt virtual network (classic / Azure Service Management – ASM).

Kortfattat är det följande som behöver hanteras: (denna guide utgår från att VM:et kört sysprep innan det importeras)

Innan ett VM flyttas från Hyper-V till Azure behöver det bekräftas att Remote Desktop är aktiverat samt att det är tillåtet i brandväggen för Domain, Public och Private networks.

Mer info om hur powershell för Azure installeras och används finn här: How to install and configure Azure PowerShell

Kortfattat, vad som behöver göras för att koppla upp sig innan ovan kan utföras:

När väl den virtuella maskinen är igång finns det några saker som är rekommenderade att utföra (enligt Windows IT Pro: Use a Non-SYSPREP VHD in Azure):

KMS Client Keys finns här: Technet – Appendix A: KMS Client Setup Keys

Jag valde även att installera Azure Windows VM agent, vilket även kräver .NET 4.5 om det inte redan är installerat. Mer information om detta finns här: About the virtual machine agent and extensions

Jag valde även att ta bort så kallade ”Ghost NICs” från den virtuella maskinen, då jag sett att det ibland kan ställa till problem:

Har du något mer du gör när du flyttar VM till Azure? Lämna gärna en kommentar!

Windows Server 2016: Remote Desktop Services (RDS) nyheter

Windows Server 2016 bjuder på många nyheter inom RDS (Remote Desktop Services). De tre främsta områdena är:

  • Grafik
  • Skalbarhet
  • Azure


Microsoft har investerat mycket tid att få till ett bättre stöd för hårdvarugrafikkort i 2016. I tidigare versioner var fokus mer på ”Information Worker”, det vill säga Officepaketet, surf, video etc. i 2016 så får RemoteFX vGPU dock bättre stöd för OpenGL och därmed bättre möjlighet för grafikintensiva applikationer såsom CAD.


Rollen Connection Broker har gjorts mer skalbar för att kunna hantera ”logon stormar” vilket kunde inträffa på morgonen när stort antal användare skulle logga in samtidigt vilket kunder resultera i flera minuters inloggningstid. RDCB har nu testats 10.000+ samtidiga förfrågningar utan att fel. Det är nu enklare att skapa en RDCB SQL databas på en delad SQL server för att enklare bygga en HA-lösning i mindre installationer.


Som mycket annat med Microsoft så är de stora nyheterna inom Azure. Dels har deployment i Azure blivit enklare med nya ARM (Azure Resource Manager). Tidigare har installationen varit helt manuellt men nu finns templates [länk]Det gör att du med en enkel template kan skapa upp en komplett RDS miljö med CB, SH, WA, GW och lastbalanserare:

rds-azure-template1 rds-azure-template2

De har även gjort det enklare och billigare i Azure att skapa en RDS-miljö genom möjligheten att köra tjänster (PaaS) istället för virtuella servrar (Iaas). Exempelvis går det ha en högtillgänglig SQL genom Azure SQL Database istället för att manuellt sätta upp ett SQL kluster vilket gör att det behövs lägre antal VMs och slippa hantera ett SQL kluster och all administration kring detta.

Istället för att ha dedikera domänkontrollanter, går det använda Active Directory Domain Services som sätter upp ett AD som tjänst istället för på VMs.

Till sist går det använda Azure AD Application Proxy för att säkert göra din RDS deployment tillgänglig över Internet på ett säkrare sätt genom att minska attackytan och göra det möjligt att använda multi-faktor autentisering.

Exempel design i 2012 R2 jämfört med 2016:

rds-azure1 rds-azure2


Har du kanske en 2008 R2/2012 R2 RDS miljö idag och funderar på att uppdatera för att ta del av ovan fördelar? Tveka inte att kontakta oss!

Provisioning av Windows 2012 R2 – ShortFileName

I Windows 2012 R2 har det introducerats flera förbättringar. En förbättring är att Microsoft valt att stänga av vissa funktioner som tidigare varit aktiverade för bakåtkompabilitet. En sådan funktion är ShortFileName (SFN), även kallat 8dot3 Name Creation (8dot3), som Microsoft valt att inaktivera på nya diskvolymer som läggs till på en Windows 2012 R2, utöver operativsystemsdisken.

SFN användes i DOS, Windows NT 3.51 och Windows 95 där det fanns en begränsning i FAT filsystem för hur många tecken ett namn fick innehålla. Anledningen till att det är inaktiverat i senare OS versioner är för att SFN skapar en prestanda försämring vid skapande eller enumrering av filer [1].

För att enkelt verifiera om SFN existerar på en volym, skriv kommandot dir /x när du befinner dig i root-katalogen på en volym.

ShortFileName Exists

Resultat när SFN sökvägar existerar

Vi kan se att ”C:\Program files” har en förkortning till C:\PROGRA~1 och ”C:\Program Files (x86)” har en förkortning till C:\PROGRA~2.

Det är fördelaktigt att SFN är inaktiverat om det är en volymdisk på en filserver att spara prestanda. Som tidigare beskrivit vid skapande och enumrering av filer när SFN är aktiverat [1]Är det avstängt på en systemdisk, där applikationer fortfarande kan använda sig av SFN av någon anledning kan man få udda felmeddelanden.

Ett sådant scenario kan man stötta på när man provisionerar ut en ny diskrevision med Office 2013 installerat. Installation av Office-paketet i Golden-image fungerar och ger inga felmeddelanden. Först när man startar Word på sina provisionerade targets kan man få meddelandet:

Office Word Something Went Wrong

Utför vi kommandot dir /x på en provisionerad target kan vi se att ShortFileName sökvägar inte längre existerar på diskvolymen.

ShortFileName Does Not Exist

Resultat när SFN sökvägar saknas

Som beskrivit tidigare, när nya diskar läggs i Windows 2012 R2 blir SFN inaktiverat på nya diskar. Äldre program och plugins som använder sig av SFN kan delvis eller helt sluta fungera om sökvägarna inte existerar.

I följande scenario har vi en Golden image med en Systemdisk C:\ som vi skall kopiera till den tomma vDisken E:\. Vi kan verifiera att möjligheten att skapa SFN är aktiverat på volymen C: genom att använda oss av

  • fsutil.exe 8dot3name query c:
8dot3 name creation enabled

Skapandet av SFN-genvägar är aktiverat

Värdet “0 – 8dot3 name creation is enabled” för C:\ visar att det är möjligt att skapa SFN genvägar.  Utför vi samma kommando mot vår tomma vDisk E:\ kan vi se att det SFN är inaktiverat, vilket innebär att SFN sökvägar inte kommer skapas.

8dot3 name creation disabled

Skapandet av SFN-genvägar är inaktiverat


För att undvika att varje ny vDisk har SFN inaktiverat ändrar man följande registervärde [2] i sin Golden Image.

Registry PATH:                             HKLM\System\CurrentControlSet\Control\FileSystem\
REG_DWORD:                             NtfsDisable8dot3NameCreation
Value:                                             2 > 0

0: Enables 8dot3 name creation for all volumes on the system.
1: Disables 8dot3 name creation for all volumes on the system.
2: Sets 8dot3 name creation on a per volume basis.
3: Disables 8dot3 name creation for all volumes except the system volume.

Källa: [1]

Källa: [2]