Hats off to Carl Luberti! So, here it is, without further ado….its’ time to start Optimizing!
‘ // ========================================================================
‘ // Original generated with VDIOptimizer – http://www.autoitscript.com/tools
‘ // (c)2010 Jonathan Bennett
‘ //
‘ // Version: 1.3-Win8
‘ // Last Modified: 9th April 2013
‘ // Last Modified by: Carl Luberti (MSFT)
‘ // Contributions by: Jeff Stokes (MSFT)
‘ // ========================================================================
‘ // ==============
‘ // General Advice
‘ // ==============
‘
‘ Before finalizing the image perform the following tasks:
‘ – Ensure no unwanted startup files by using autoruns.exe from SysInternals
‘ – Run the Disk Cleanup tool as administrator and delete all temporary files and system restore points (can be automated with this script)
‘ – Run disk defrag and consolidate free space: defrag c: /v /x
‘ – Reboot the machine 6 times and wait 120 seconds after logging on before performing the next reboot (boot prefetch training)
‘ – Run disk defrag and optimize boot files: defrag c: /v /b
‘ – If using a dynamic virtual disk, use the vendor’s utilities to perform a "shrink" operation
‘ // *************
‘ // * CAUTION *
‘ // *************
‘
‘ THIS SCRIPT MAKES CONSIDERABLE CHANGES TO THE DEFAULT CONFIGURATION OF WINDOWS.
‘
‘ Please review this script THOROUGHLY before applying to your virtual machine, and disable changes below as necessary to suit your current
‘ environment.
‘
‘ This script is provided AS-IS – usage of this source assumes that you are at the very least familiar with the vbscript language being used and the
‘ tools used to create and debug this file.
‘
‘ In other words, if you break it, you get to keep the pieces.
‘ Constants
Const ForReading = 1
Const Disable_Aero = False
Const Disable_BranchCache = False
Const Disable_EFS = False
Const Disable_iSCSI = False
Const Disable_MachPass = False
Const Disable_Search = False
Const Install_NetFX3 = False
Const NetFX3_Source = "D:\Sources\SxS"
‘ Common objects
Set oShell = WScript.CreateObject ("WScript.Shell")
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oEnv = oShell.Environment("User")
‘ Command Line Arguments for Some Settings
Set colNamedArguments = WScript.Arguments.Named
If colNamedArguments.Exists("Aero") Then
strAero = colNamedArguments.Item("Aero")
Else
strAero = Disable_Aero
End If
If colNamedArguments.Exists("BranchCache") Then
strBranchCache = colNamedArguments.Item("BranchCache")
Else
strBranchCache = Disable_BranchCache
End If
If colNamedArguments.Exists("EFS") Then
strEFS = colNamedArguments.Item("EFS")
Else
strEFS = Disable_EFS
End If
If colNamedArguments.Exists("iSCSI") Then
striSCSI = colNamedArguments.Item("iSCSI")
Else
striSCSI = Disable_iSCSI
End If
If colNamedArguments.Exists("MachPass") Then
strMachPass = colNamedArguments.Item("MachPass")
Else
strMachPass = Disable_MachPass
End If
If colNamedArguments.Exists("Search") Then
strSearch = colNamedArguments.Item("Search")
Else
strSearch = Disable_Search
End If
If colNamedArguments.Exists("NetFX3") Then
strNetFX3 = colNamedArguments.Item("NetFX3")
Else
strNetFX3 = Install_NetFX3
End If
‘ First things first – enable RDP Connections!!!
RunWait "WMIC rdtoggle where AllowTSConnections=0 call SetAllowTSConnections 1,1"
RunWait "netsh advfirewall firewall set rule group=" & Chr(34) & "remote desktop" & Chr(34) & " new enable=Yes"
‘ // ==================
‘ // Configure Services
‘ // ==================
‘ Disable Application Layer Gateway Service
RunWait "sc config ALG start= disabled"
‘ Disable Background Intelligent Transfer Service
RunWait "sc config BITS start= disabled"
‘ Disable Bitlocker Drive Encryption Service
RunWait "sc config BDESVC start= disabled"
‘ Disable Block Level Backup Engine Service
RunWait "sc config wbengine start= disabled"
‘ Disable Bluetooth Support Service
RunWait "sc config bthserv start= disabled"
If strBranchCache = True Then
‘ Disable BranchCache Service
RunWait "sc config PeerDistSvc start= disabled"
End If
‘ Disable Computer Browser Service
RunWait "sc config Browser start= disabled"
‘ Disable Device Association Service
RunWait "sc config DeviceAssociationService start= disabled"
‘ Disable Device Setup Manager Service
RunWait "sc config DsmSvc start= disabled"
‘ Disable Diagnostic Policy Services
RunWait "sc config DPS start= disabled"
RunWait "sc config WdiServiceHost start= disabled"
RunWait "sc config WdiSystemHost start= disabled"
‘ Disable Distributed Link Tracking Client Service
RunWait "sc stop TrkWks"
RunWait "sc config TrkWks start= disabled"
If strEFS = True Then
‘ Disable Encrypting File System Service
RunWait "sc config EFS start= disabled"
End If
‘ Disable Family Safety Service
RunWait "sc config WPCSvc start= disabled"
‘ Disable Fax Service
RunWait "sc config Fax start= disabled"
‘ Disable Function Discovery Resource Publication Service
RunWait "sc config fdPHost start= disabled"
‘ Disable HomeGroup Listener Service
RunWait "sc config HomeGroupListener start= disabled"
‘ Disable HomeGroup Provider Service
RunWait "sc config HomeGroupProvider start= disabled"
If striSCSI = True Then
‘ Disable Microsoft iSCSI Initiator Service
RunWait "sc config msiscsi start= disabled"
End If
‘ Disable Microsoft Software Shadow Copy Provider Service
RunWait "sc config swprv start= disabled"
‘ Set Network List Service to Auto
RunWait "sc config netprofm start= auto"
‘ Disable Optimize Drives Service
RunWait "schtasks /change /tn ""microsoft\windows\defrag\ScheduledDefrag"" /disable"
oShell.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Dfrg\BootOptimizeFunction\Enable", "N", "REG_SZ"
RunWait "sc config defragsvc start= disabled"
‘ Disable Secure Socket Tunneling Protocol Service
RunWait "sc config SstpSvc start= disabled"
‘ Disable Sensor Monitoring Service
RunWait "sc config SensrSvc start= disabled"
‘ Disable Shell Hardware Detection Service
RunWait "sc config ShellHWDetection start= disabled"
‘ Disable SNMP Trap Service
RunWait "sc config SNMPTRAP start= disabled"
‘ Disable SSDP Discovery Service
RunWait "sc stop SSDPSRV"
RunWait "sc config SSDPSRV start= disabled"
‘ Disable Telephony Service
RunWait "sc config TapiSrv start= disabled"
If strAero = True Then
‘ Disable Themes Service
RunWait "sc config Themes start= disabled"
End If
‘ Disable UPnP Device Host Service
RunWait "sc config upnphost start= disabled"
‘ Disable Volume Shadow Copy Service
RunWait "sc config VSS start= disabled"
‘ Disable Windows Backup Service
RunWait "sc config SDRSVC start= disabled"
‘ Disable Windows Color System Service
RunWait "sc config WcsPlugInService start= disabled"
‘ Disable Windows Connect Now – Config Registrar Service
RunWait "sc config wcncsvc start= disabled"
‘ Disable Windows Defender Service
RunWait "schtasks /change /tn ""microsoft\windows\windows Defender\Windows Defender Cache Maintenance"" /disable"
RunWait "schtasks /change /tn ""microsoft\windows\windows Defender\Windows Defender Cleanup"" /disable"
RunWait "schtasks /change /tn ""microsoft\windows\windows Defender\Windows Defender Scheduled Scan"" /disable"
RunWait "schtasks /change /tn ""microsoft\windows\windows Defender\Windows Defender Verification"" /disable"
‘ Disable Windows Error Reporting Service
RunWait "sc config WerSvc start= disabled"
‘ Disable Windows Media Player Network Sharing Service
RunWait "sc config WMPNetworkSvc start= disabled"
‘ Break out Windows Management Instrumentation Service
RunWait "winmgmt /standalonehost"
RunWait "sc config winmgmt group= COM Infrastructure"
‘Disable Windows Search Service
If strSearch = True Then
RunWait "sc stop WSearch"
RunWait "sc config WSearch start= disabled"
End If
‘ Disable WLAN AutoConfig Service
RunWait "sc config Wlansvc start= disabled"
‘ Disable WWAN AutoConfig Service
RunWait "sc config WwanSvc start= disabled"
‘ // ================
‘ // MACHINE SETTINGS
‘ // ================
‘ Disable Hard disk timeouts
RunWait "POWERCFG /SETACVALUEINDEX 381b4222-f694-41f0-9685-ff5bb260df2e 0012ee47-9041-4b5d-9b77-535fba8b1442 6738e2c4-e8a5-4a42-b16a-e040e769756e 0"
RunWait "POWERCFG /SETDCVALUEINDEX 381b4222-f694-41f0-9685-ff5bb260df2e 0012ee47-9041-4b5d-9b77-535fba8b1442 6738e2c4-e8a5-4a42-b16a-e040e769756e 0"
‘ Disable TCP/IP / Large Send Offload
oShell.RegWrite "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\DisableTaskOffload", &H00000001, "REG_DWORD"
‘ Disable hibernate
RunWait "powercfg -h off"
‘ Disable System Restore
Set objWMIService = GetObject("winmgmts:\\.\root\default")
Set objItem = objWMIService.Get("SystemRestore")
objItem.Disable("")
RunWait "schtasks /change /tn ""microsoft\windows\SystemRestore\SR"" /disable"
oShell.RegWrite "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\SystemRestore\DisableSR", &H00000001, "REG_DWORD"
‘ Disable NTFS Last Access Timestamps
RunWait "FSUTIL behavior set disablelastaccess 1"
If strMachPass = True Then
‘ Disable Machine Account Password Changes
oShell.RegWrite "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters\DisablePasswordChange", &H00000001, "REG_DWORD"
End If
‘ Disable memory dumps
oShell.RegWrite "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl\CrashDumpEnabled", &H00000000, "REG_DWORD"
oShell.RegWrite "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl\LogEvent", &H00000000, "REG_DWORD"
oShell.RegWrite "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl\SendAlert", &H00000000, "REG_DWORD"
oShell.RegWrite "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl\AutoReboot", &H00000001, "REG_DWORD"
‘ Disable default system screensaver
oShell.RegWrite "HKEY_USERS\.DEFAULT\Control Panel\Desktop\ScreenSaveActive", 0, "REG_DWORD"
‘ Increase service startup timeouts
oShell.RegWrite "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ServicesPipeTimeout", &H0002bf20, "REG_DWORD"
‘ Increase Disk I/O Timeout to 200 seconds.
oShell.RegWrite "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Disk\TimeOutValue", &H000000C8, "REG_DWORD"
‘ Disable Other Scheduled Tasks
RunWait "schtasks /change /tn ""microsoft\windows\Application Experience\AitAgent"" /disable"
RunWait "schtasks /change /tn ""microsoft\windows\Application Experience\ProgramDataUpdater"" /disable"
RunWait "schtasks /change /tn ""microsoft\windows\Application Experience\StartupAppTask"" /disable"
RunWait "schtasks /change /tn ""microsoft\windows\Autochk\Proxy"" /disable"
RunWait "schtasks /change /tn ""microsoft\windows\Bluetooth\UninstallDeviceTask"" /disable"
RunWait "schtasks /change /tn ""microsoft\windows\Customer Experience Improvement Program\BthSQM"" /disable"
RunWait "schtasks /change /tn ""microsoft\windows\Customer Experience Improvement Program\Consolidator"" /disable"
RunWait "schtasks /change /tn ""microsoft\windows\Customer Experience Improvement Program\KernelCeipTask"" /disable"
RunWait "schtasks /change /tn ""microsoft\windows\Customer Experience Improvement Program\Uploader"" /disable"
RunWait "schtasks /change /tn ""microsoft\windows\Customer Experience Improvement Program\UsbCeip"" /disable"
RunWait "schtasks /change /tn ""microsoft\windows\Diagnosis\Scheduled"" /disable"
RunWait "schtasks /change /tn ""microsoft\windows\DiskDiagnostic\Microsoft-Windows-DiskDiagnosticDataCollector"" /disable"
RunWait "schtasks /change /tn ""microsoft\windows\DiskDiagnostic\Microsoft-Windows-DiskDiagnosticResolver"" /disable"
RunWait "schtasks /change /tn ""microsoft\windows\Maintenance\WinSAT"" /disable"
RunWait "schtasks /change /tn ""microsoft\windows\MobilePC\HotStart"" /disable"
RunWait "schtasks /change /tn ""microsoft\windows\Power Efficiency Diagnostic\AnalyzeSystem"" /disable"
RunWait "schtasks /change /tn ""microsoft\windows\RAC\RacTask"" /disable"
RunWait "schtasks /change /tn ""microsoft\windows\Ras\MobilityManager"" /disable"
RunWait "schtasks /change /tn ""microsoft\windows\Registry\RegIdleBackup"" /disable"
RunWait "schtasks /change /tn ""microsoft\windows\Shell\FamilySafetyMonitor"" /disable"
RunWait "schtasks /change /tn ""microsoft\windows\Shell\FamilySafetyRefresh"" /disable"
RunWait "schtasks /change /tn ""microsoft\windows\SideShow\AutoWake"" /disable"
RunWait "schtasks /change /tn ""microsoft\windows\SideShow\GadgetManager"" /disable"
RunWait "schtasks /change /tn ""microsoft\windows\SideShow\SessionAgent"" /disable"
RunWait "schtasks /change /tn ""microsoft\windows\SideShow\SystemDataProviders"" /disable"
RunWait "schtasks /change /tn ""microsoft\windows\UPnP\UPnPHostConfig"" /disable"
RunWait "schtasks /change /tn ""microsoft\windows\WDI\ResolutionHost"" /disable"
RunWait "schtasks /change /tn ""microsoft\windows\Windows Filtering Platform\BfeOnServiceStartTypeChange"" /disable"
RunWait "schtasks /change /tn ""microsoft\windows\Windows Media Sharing\UpdateLibrary"" /disable"
RunWait "schtasks /change /tn ""microsoft\windows\WindowsBackup\ConfigNotification"" /disable"
‘ Configure Event Logs to 1028KB (Minimum size under Vista/7) and set retention to "overwrite"
Set oEventLogs = GetObject("winmgmts:{impersonationLevel=impersonate,(Security)}!//./root/cimv2").InstancesOf("Win32_NTEventLogFile")
For Each e in oEventLogs
e.MaxFileSize = 1052672
e.OverWritePolicy = "WhenNeeded"
e.OverWriteOutdated = 0
e.Put_
e.ClearEventLog()
Next
oShell.RegWrite "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\eventlog\Application\Retention", 0, "REG_DWORD"
oShell.RegWrite "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\eventlog\Security\Retention", 0, "REG_DWORD"
oShell.RegWrite "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\eventlog\System\Retention", 0, "REG_DWORD"
‘ Set PopUp Error Mode to "Neither"
oShell.RegWrite "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Windows\ErrorMode", 2, "REG_DWORD"
‘ Disable bootlog and boot animation
RunWait "bcdedit /set {default} bootlog no"
RunWait "bcdedit /set {default} quietboot yes"
‘ Disable UAC secure desktop prompt
oShell.RegWrite "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\PromptOnSecureDesktop", &H00000000, "REG_DWORD"
‘ Disable New Network dialog
RunWait "reg add HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff"
‘ Disable AutoUpdate of drivers from WU
oShell.RegWrite "HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\DriverSearching\searchorderConfig", 0, "REG_DWORD"
‘ Turn off Windows SideShow and install NetFX3
oShell.RegWrite "HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\Sideshow\Disabled", 1, "REG_DWORD"
If strNetFX3 = True Then
RunWait "dism /online /Enable-Feature /FeatureName:NetFx3 /All /LimitAccess /Source:" & NetFX3_Source & " /NoRestart"
End If
‘ Disable IE First Run Wizard and RSS Feeds
oShell.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Internet Explorer\Main\DisableFirstRunCustomize", 1, "REG_DWORD"
‘ Disable the ability to clear the paging file during shutdown
oShell.RegWrite "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\Memory Management\ClearPageFileAtShutdown", 0, "REG_DWORD"
‘ Perform a disk cleanup
‘ Automate by creating the reg checks corresponding to "cleanmgr /sageset:100" so we can use "sagerun:100"
oShell.RegWrite "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Active Setup Temp Folders\StateFlags0100", &H00000002, "REG_DWORD"
oShell.RegWrite "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Downloaded Program Files\StateFlags0100", &H00000002, "REG_DWORD"
oShell.RegWrite "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Internet Cache Files\StateFlags0100", &H00000002, "REG_DWORD"
oShell.RegWrite "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Memory Dump Files\StateFlags0100", &H00000002, "REG_DWORD"
oShell.RegWrite "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Offline Pages Files\StateFlags0100", &H00000002, "REG_DWORD"
oShell.RegWrite "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Old ChkDsk Files\StateFlags0100", &H00000002, "REG_DWORD"
oShell.RegWrite "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Previous Installations\StateFlags0100", &H00000000, "REG_DWORD"
oShell.RegWrite "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Recycle Bin\StateFlags0100", &H00000002, "REG_DWORD"
oShell.RegWrite "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Setup Log Files\StateFlags0100", &H00000002, "REG_DWORD"
oShell.RegWrite "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\System error memory dump files\StateFlags0100", &H00000002, "REG_DWORD"
oShell.RegWrite "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\System error minidump files\StateFlags0100", &H00000002, "REG_DWORD"
oShell.RegWrite "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Temporary Files\StateFlags0100", &H00000002, "REG_DWORD"
oShell.RegWrite "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Temporary Setup Files\StateFlags0100", &H00000002, "REG_DWORD"
oShell.RegWrite "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Thumbnail Cache\StateFlags0100", &H00000002, "REG_DWORD"
oShell.RegWrite "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Upgrade Discarded Files\StateFlags0100", &H00000000, "REG_DWORD"
oShell.RegWrite "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Windows Error Reporting Archive Files\StateFlags0100", &H00000002, "REG_DWORD"
oShell.RegWrite "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Windows Error Reporting Queue Files\StateFlags0100", &H00000002, "REG_DWORD"
oShell.RegWrite "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Windows Error Reporting System Archive Files\StateFlags0100", &H00000002, "REG_DWORD"
oShell.RegWrite "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Windows Error Reporting System Queue Files\StateFlags0100", &H00000002, "REG_DWORD"
oShell.RegWrite "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Windows Upgrade Log Files\StateFlags0100", &H00000002, "REG_DWORD"
RunWait "cleanmgr.exe /sagerun:100"
‘ // =============
‘ // USER SETTINGS
‘ // =============
‘ Reduce menu show delay
oShell.RegWrite "HKEY_CURRENT_USER\Control Panel\Desktop\MenuShowDelay", "0", "REG_SZ"
‘ Disable cursor blink
oShell.RegWrite "HKEY_CURRENT_USER\Control Panel\Desktop\CursorBlinkRate", "-1", "REG_SZ"
oShell.RegWrite "HKEY_CURRENT_USER\Control Panel\Desktop\DisableCursorBlink", &H00000001, "REG_DWORD"
‘ Force off-screen composition in IE
oShell.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\Force Offscreen Composition", &H00000001, "REG_DWORD"
‘ Disable screensavers
oShell.RegWrite "HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\Control Panel\Desktop\ScreenSaveActive", "0", "REG_SZ"
oShell.RegWrite "HKEY_CURRENT_USER\Control Panel\Desktop\ScreenSaveActive", "0", "REG_SZ"
oShell.RegWrite "HKEY_USERS\.DEFAULT\Control Panel\Desktop\ScreenSaveActive", "0", "REG_SZ"
‘ Don’t show window contents when dragging
oShell.RegWrite "HKEY_CURRENT_USER\Control Panel\Desktop\DragFullWindows", "0", "REG_SZ"
‘ Don’t show window minimize/maximize animations
oShell.RegWrite "HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics\MinAnimate", "0", "REG_SZ"
‘ Disable font smoothing
oShell.RegWrite "HKEY_CURRENT_USER\Control Panel\Desktop\FontSmoothing", "0", "REG_SZ"
‘ Disable most other visual effects
oShell.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\VisualEffects\VisualFXSetting", &H00000003, "REG_DWORD"
oShell.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\ListviewAlphaSelect", &H00000000, "REG_DWORD"
oShell.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\TaskbarAnimations", &H00000000, "REG_DWORD"
oShell.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\ListviewWatermark", &H00000000, "REG_DWORD"
oShell.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\ListviewShadow", &H00000000, "REG_DWORD"
RegBinWrite "HKEY_CURRENT_USER\Control Panel\Desktop", "UserPreferencesMask", "90,12,01,80"
‘ Disable Action Center
oShell.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\HideSCAHealth", &H00000001, "REG_DWORD"
‘ Disable IE Persistent Cache
oShell.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Cache\Persistent", 0, "REG_DWORD"
oShell.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Feeds\SyncStatus", 0, "REG_DWORD"
‘ Done
WScript.Quit
‘ // ================
‘ // HELPER FUNCTIONS
‘ // ================
Function Run(sFile)
Run = oShell.Run(sFile, 1, False)
End Function
Function RunWait(sFile)
RunWait = oShell.Run(sFile, 1, True)
End Function
Function RunWaitHidden(sFile)
RunWaitHidden = oShell.Run(sFile, 0, True)
End Function
Function IsServer()
IsServer = False
On Error Resume Next
For Each objOS in GetObject("winmgmts:").InstancesOf ("Win32_OperatingSystem")
If objOS.ProductType = 1 Then IsServer = False
If objOS.ProductType = 2 Or ObjOS.ProductType = 3 Then IsServer = True
Next
End Function
Sub RegBinWrite (key, value, data)
key = "[" & key & "]"
If value <> "@" then
value = chr(34) & value & chr(34)
End if
valString = value & "=" & "hex:" & data
tempFile = GetTempDir() & "\regbinaryimport.reg"
Set txtStream = oFSO.CreateTextFile(tempFile,true)
txtStream.WriteLine("Windows Registry Editor Version 5.00")
txtStream.WriteLine(key)
txtStream.WriteLine(valString)
txtStream.Close
oShell.Run "regedit.exe /s """ & tempFile & """", 1, true
oFSO.DeleteFile tempFile
End Sub
Function GetTEMPDir()
GetTEMPDir = oEnv("TEMP")
If InStr(GetTEMPDir, "%") Then
GetTEMPDir = oShell.ExpandEnvironmentStrings(GetTEMPDir)
End If
End Function
Disclaimed: If none of this makes sense to you, you probably shouldn’t be doing it. All liability is the property of the person applying it. If you break it you get to keep the pieces….
Should be fine for RDS yeah. I am not that good at powershell, so yeah…
Hi Ravi A, no modifications needed to my knowledge.
Rob did I get back to you? We are! Rob T. Peter, please explain what you mean sir?
Good eye Andrew! Good eye! Windows 8 is hyper-visor aware in this regard. A big improvement over 7 in this area. I'm looking for something public on this and will post it to this comment area when I find it ok?
Correct, superfetch is not disabled in the 8 script, but is on 7 yes.
Nah some of the stuff will go away post sysprep /generalize, I’d make it a post deploy task TS step.
blogs.technet.com/…/the-microsoft-premier-field-engineer-pfe-view-on-virtual-desktop-vdi-density.aspx
Is the Win7 script Dani
@Andrew Wood
Windows 8 detects SSD drives and doesn’t do any prefetch for this drive, but keeps prefetching for normal HDDs. So no need to stop the superfetch service:
channel9.msdn.com/…/Defrag-Disabling-Hibernation-Superfetch-onboard-VGA
Anthony you may want to email me (email blog author link)
No disable pre-fetch or superfetch?
Can you comment on the volume cache changes? I'm not familiar with those tweaks.
Does it works for Windows 7 as well? If not, any equivalent script for Win7?
If you're ever interested in converting all or part of this to Powershell, let me know! This might be a fun project to do as a Powershell Module and I'd appreciate your guidance on it!
Maybe a very stupid question but how should this script be run on a w8 template?
Jeff, Can we use this on Windows 8.1 or any modifications needed for this script?
Pingback from Optimisation des VM Windows
Jeff – so once an image is created. Run this script and then sysprep the image???
Jeff thank you for sharing this it is a great help. Just curious to know if these commands can be used for optimizing Windows 2012/R2 server build in particular Citrix and TS builds? At the present moment I don't have something like WDS/MDT for deploying
the Image so I use a scripted install of Win7/8/2008/2012 using unattend.xml and using a post install batch file I apply the cutomizations. It would be great if someone could kindly convert this into a Powershell script.
According to this video for optimizing (which they demo this script in) Windows 8 Superfetch is virtualization aware, so it does not need to be disabled…
http://channel9.msdn.com/Events/MMS/2013/DV-B308
Decent video. Would still prefer to see all of this done via GPOs (with the GPOs being posted.)
8.1 and Update 1 have installed new Services (Windows App Store). Can you update this script to include the latest recommendations?
Will there be an update to this script for Windows 8.1 Update 1?
Thanks!
If you want network printers to show up under Devices and Printers (so that a user can change their default printer), don't disable the Device Setup Manager service.
I posted this same question in the wrong section earlier:
Having a Type Mismatch error at each instance of 'RunWait' in the script. Running script in Wscript at base admin level. Any help would be appreciated! Thanks.
Running this on Windows 8.1 Enterprise then using CopyProfile during sysprep leaves newly created profiles with a strange gap in windows explorer between the window border and the menu bar. Killing explorer.exe and restarting resolves it but I'm wondering
what the root cause might be since I can't tell VDI users to restart explorer. Any idea what parts of the script might be to blame?
Dan can you email me a screenshot of what you are seeing please? [email protected]
Thanks,
Jeff
~ John Behneman | Senior Support Escalation Engineer Hello everyone, John Behneman here again. I’d like
Hi Jeff, any idea if there is a Windows 10 version of this script yet? 🙂
Big fan of the Windows 8 script.
From what i have seen on W2K12R2 and W10
' Disable Function Discovery Resource Publication Service
RunWait "sc config fdPHost start= disabled"
Should be
' Disable Function Discovery Resource Publication Service
RunWait "sc config FDResPub start= disabled"
https://github.com/cluberti/VDI is the current library of scripts for this. I checked in 10, you are correct.