Windows 7 en SteadyState

pict - oktober 5th, 2015

Tot en met Windows XP werd een zogeheten “SteadyState” functionaliteit officieel door Microsoft ondersteund. De SteadyState functionaliteit houdt in, dat alle wijzigingen die een gebruiker tijdens een sessie doorvoert (de “User-delta”) ongedaan worden gemaakt na een reboot. Bijvoorbeeld: een gebruiker meldt aan op een machine en installeert Microsoft Office. Deze Office installatie zal verdwenen zijn van de werkplek zodra de machine opnieuw opgestart wordt. De SteadyState functionaliteit is dus vergelijkbaar met de snapshot-functionaliteit van bijvoorbeeld VMWare, Virtualbox of Hyper-V, waarmee je teruggaat naar een eerdere “state” van de computer.

Een mooie functionaliteit die veel praktisch nut heeft, maar helaas wordt deze functionaliteit niet meer aangeboden of ondersteund onder Windows 7. Toch is het SteadyState principe nog steeds werkbaar te krijgen onder Windows 7. Zo heeft Panos Macheras hier een mooi artikel geschreven over zijn oplossing voor Windows 7 en SteadyState. Helaas zitten er aan deze oplossing nog wat haken en ogen welke ik in dit artikel zal beschrijven en oplossen.

In de basis is een SteadyState machine niets anders dan een Windows 7-installatie met twee verschillende boot-opties naar een VHD (Virtual Harddisk). De twee boot-opties zijn “Windows 7” en “SteadyState” en hebben de volgende functionaliteit:

  • 1. SteadyState: Deze boot-optie zorgt ervoor dat Windows bij reboot teruggezet wordt naar de “SteadyState” van het image. Alle wijzigingen die zijn doorgevoerd door de gebruiker worden verwijderd en de machine is na reboot weer “terug bij af”.
  • 2. Windows 7: In tegenstelling tot de SteadyState-boot optie, worden met de Windows 7 boot-optie wijzigingen wel permanent doorgevoerd. Op deze wijze kan het image opgebouwd en onderhouden worden.

Door de boot-timeout op 0 te zetten met als standaard boot-optie de SteadyState boot wordt zeker gesteld dat de gebruiker in SteadyState terecht komt. SteadyState werkt als volgt:

Zodra de machine start wordt een tijdelijke extra VHD aangemaakt waarin de User-delta wordt opgeslagen. Met het afsluiten van de sessie wordt de user-delta samengevoegd met de Windows 7 VHD (merge) of weggegooid (discard). De “Merge” vindt plaats wanneer naar de reguliere Windows 7 geboot wordt en de “discard” vindt plaats wanneer naar Steadystate geboot wordt.

De oplossing van Panos Macheras bestaat uit een (AutoIT-) script waarmee de merge en discard van de User-delta geregeld worden. Nou is Pi-CT eigenlijk geen fan van Auto-IT, maar in dit geval heeft het een aantal voordelen:

  • 1.Het afvangen van melding is relatief eenvoudig en betrouwbaar
  • 2. Het aanpassen van de scripts en (her-)compileren tot executables is zeer eenvoudig
  • 3. Het is gemakkelijk inzichtelijk wat er gebeurt, doordat de scripts gemakkelijk leesbaar zijn

De scripts werken op zich prima, maar er zijn een aantal haken en ogen:

  • 1. De scripts zijn Engelstalig en vangen dus Engelstalige meldingen af. Hierdoor werkt het niet op een anderstalig OS, zoals bijvoorbeeld Nederlands.
  • 2. Vanuit de scripts worden scheduled tasks aangemaakt. Deze scheduled tasks worden vanaf een commandline aangemaakt. Vanaf de commandline staat standaard de optie aan dat de “taak dient te worden gestopt zodra de computer op accu gaat werken”. Hierdoor werkt de SteadyState oplossing dus niet wanneer een laptop gebruikt wordt welke niet aan het lichtnet aangesloten is.
  • 3. In het artikel refereert Panos aan de “Microsoft Deployment Toolkit” welke gebruikt dient te worden om de juiste sources en ISO te compileren. De nieuwste versie van de MDT genereert echter errors; een oudere versie (2012) van de MDT dient dus gebruikt te worden.

Oplossingen voor deze punten zijn relatief eenvoudig:

  • 1. Recompile de executable zodat deze Nederlandstalige meldingen afvangt.
  • 2. Maak een eigen scheduled task aan zonder de Power-management setting, exporteer deze naar c:\Windows\System\Tasks en vervang de commandline in de executable waarmee de scheduled task aangemaakt wordt door een commandline waarmee de scheduled task geïmporteerd wordt. Eventueel kun je de aangepaste scripts downloaden middels deze link
  • 3. Download de goed werkende (oudere) MDT-versie hier vanaf de Pi-CT website. Deze zip-file bevat zowel de X64 als de X86 versie van de MDT 2012.

Mocht je hiermee aan de gang gaan: Succes!

Stuur bij vragen of opmerkingen even een berichtje aan blog@pi-ct.com.