The other day I tweeted a short bit of code on how to automate the zeroing-out of your VDI images using SDelete:
I got quite a few DMs afterwards asking if it was possible to do the same with VMware’s OS Optimization Tool.
So without further ado, here’s the code I use as the last step in my Packer builds before closing them down for svMotioning:
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| $ErrorActionPreference = "Stop" | |
| $webserver = "webserver.contoso.local" | |
| $url = "http://" + $webserver | |
| $files = @("VMwareOSOptimizationTool.exe","VMwareOSOptimizationTool.exe.config","my_osot.xml") | |
| $exe = $files[0] | |
| $arg = "-o -t " + $files[2] | |
| # Verify connectivity | |
| if (Test-Connection $webserver -Quiet){ | |
| # Get the OSOT files | |
| ForEach ($file in $files) | |
| { | |
| Invoke-WebRequest -Uri ($url + "/" + $file) -OutFile $env:TEMP\$file | |
| } | |
| } else { | |
| throw "No connection to server. Aborting." | |
| } | |
| # Change to temp folder | |
| Set-Location $env:TEMP | |
| # Run OSOT | |
| Try | |
| { | |
| Start-Process $exe -ArgumentList $arg -Passthru -Wait -ErrorAction stop | |
| } | |
| Catch | |
| { | |
| Write-Error "Failed to run OSOT" | |
| Write-Error $_.Exception | |
| Exit -1 | |
| } | |
| # Delete files | |
| ForEach ($file in $files) | |
| { | |
| Remove-Item -Path $env:TEMP\$file -Confirm:$false | |
| } |
Please remember to swap out your web server and to specify your own XML file. You could also YOLO it and use one of the built-in templates…

…but don’t be surprised when you cripple half your apps 🙂
I’m currently working on a lab project which enables cloud consumers to request a full VMware Horizon environment straight from my vRealize Automation catalog. This will provision Connection Servers, a Composer server, UAGs – all load-balanced using VMware NSX. Exciting, but not without its challenges. The first being… Horizon wouldn’t install. 
Continuously entering connection details to cloud systems can quickly become boring. However, if you’re connecting to Azure and from a secure system, then there is an easier way.

