Was recently asked by a customer to make a global Hyper-V change on VM’s having the wrong AutomaticStopAction setting, across many HV Hosts. My tool of choice, SCCM Baseline! (Yes, SCVMM is a better option here, but that’s not an option in their environment…)
To familiarize everyone, this is what we are changing:
Let’s hop over to PowerShell and get familiar with the cmdlets needed for this. Let’s check the value first:
$(Get-VM -Name HYD-CLIENT1).AutomaticStopAction
For what’s it worth, running just $(Get-VM).AutomaticStopAction will return the state for all VM’s on the host.
Good source for Hyper-V cmdlets : https://docs.microsoft.com/powershell/module/hyper-v
Create and name the baseline, we’ll come back to it later:
Go ahead and create a new configuration item, name it, platforms you want to limit it to, etc. We’ll focus primarily on the “Settings” and “Compliance Rules”:
For “Setting type” and “Data type”, we’ll choose Script and String as shown below:
Since we know what value we want and how to grab that, we’ll use that for our “Discovery Script”:
And as you may have guessed, we’ll use the Set version of that cmdlet to ensure the desired value is set:
Get-VM | Stop-VM;Get-VM | Set-VM -AutomaticStopAction ShutDown;Get-VM | Start-VM
Now choose the “Compliance Rules” tab, this can also be accessed from the main properties window shown below this. Double click or highlight and:
Here we are defining the conditions for a machine to report as compliant when measured against this baseline, make sure you check the box to “Run the specified remediation script when this setting is noncompliant”:
That’s it for the configuration item!
Last step, head back to the Configuration Baseline and add the configuration item we just created, by adding it to the “Evaluation Conditions” as shown below:
Filter the list to find the newly created item, select it and click “Add”:
Choose “OK” and you’re done!
Please comment with any questions about this procedure or any general baseline questions, we’re here to help!