Windows-as-a-service (WaaS) requires a stable process for testing feature updates. You don’t want to discuss all over again, who is involved in testing what applications multiple times a year. But once you have the process in place it should be used for testing all changes: new or updated standard applications, software updates or settings. Continued testing creates routine for IT and end-users.
Resources used in testing should be identifiable in Configuration Manger and GPO. Branding internal rings in WMI allows to import the branding in Configuration Manager via Hardware Inventory and to use WMI filter to apply different settings via GPO.
In this showcase three internal rings are defined:
- Insider
- IT EUC internal users
- To run tests on standard applications and settings
- IT EUC internal users
- Early Adopter (EA)
- End-users outside IT EUC
- To run tests in end-user daily business
- End-users outside IT EUC
- General Availability (GA)
- Default users
- New standard, No tests
- Default users
WMI class
To avoid conflicts a new WMI class is created.
The showcase creates a WMI class for MyCompany (MC):
[Static] class MC_MyCompanySettings { [key, read, write] string OS; // to prevent multiple instances [read, write] string MC_Release; // to identify the initial release used to setup the device [read, write] string MS_Ring; // Microsoft release [read, write] string MC_Ring; // internal ring [read, write] string CostCenter; // Cost Center [read, write] string Setting01; // free setting [read, write] string Setting02; // free setting [read, write] string Setting03; // free setting };
PowerShell is used for all WMI operations
The scripts can be integrated in the Operating System Deployment (OSD) task sequence.
Create WMI class
$newClass = New-Object System.Management.ManagementClass("root\cimv2", [String]::Empty, $null); $newClass["__CLASS"] = "MC_MyCompanySettings"; $newClass.Qualifiers.Add("Static", $true) $newClass.Properties.Add("OS",[System.Management.CimType]::String, $false) $newClass.Properties["OS"].Qualifiers.Add("Key", $true) $newClass.Properties["OS"].Qualifiers.Add("Read", $true) $newClass.Properties["OS"].Qualifiers.Add("Write", $true) $newClass.Properties.Add("MC_Release",[System.Management.CimType]::String, $false) $newClass.Properties["MC_Release"].Qualifiers.Add("Read", $true) $newClass.Properties["MC_Release"].Qualifiers.Add("Write", $true) $newClass.Properties.Add("MS_Ring",[System.Management.CimType]::String, $false) $newClass.Properties["MS_Ring"].Qualifiers.Add("Read", $true) $newClass.Properties["MS_Ring"].Qualifiers.Add("Write", $true) $newClass.Properties.Add("MC_Ring",[System.Management.CimType]::String, $false) $newClass.Properties["MC_Ring"].Qualifiers.Add("Read", $true) $newClass.Properties["MC_Ring"].Qualifiers.Add("Write", $true) $newClass.Properties.Add("CostCenter",[System.Management.CimType]::String, $false) $newClass.Properties["CostCenter "].Qualifiers.Add("Read", $true) $newClass.Properties["CostCenter "].Qualifiers.Add("Write", $true) $newClass.Properties.Add("Setting01",[System.Management.CimType]::String, $false) $newClass.Properties["Setting01"].Qualifiers.Add("Read", $true) $newClass.Properties["Setting01"].Qualifiers.Add("Write", $true) $newClass.Properties.Add("Setting02",[System.Management.CimType]::String, $false) $newClass.Properties["Setting02"].Qualifiers.Add("Read", $true) $newClass.Properties["Setting02"].Qualifiers.Add("Write", $true) $newClass.Properties.Add("Setting03",[System.Management.CimType]::String, $false) $newClass.Properties["Setting03"].Qualifiers.Add("Read", $true) $newClass.Properties["Setting03"].Qualifiers.Add("Write", $true) $newClass.Put()
Fill WMI
Param( [string]$CostCenter ) $OS = "Windows 10" $MC_Release = "1607_beta02" $MS_Ring = "CB" $MC_Ring = "GA" $CostCenter = $CostCenter $Setting01 = "" $Setting02 = "" $Setting03 = "" New-CimInstance -Namespace root/cimv2 -ClassName MC_MyCompanySettings -Property @{OS=$OS;MC_Release=$MC_Release;MS_ring=$MS_Ring;MC_ring=$MC_Ring;CostCenter=$CostCenter;Setting01=$Setting01;Setting02=$Setting02;Setting03=$Setting03}
Brand a machine as Early Adopter
$MC_Instance = Get-CimInstance -ClassName MC_MyCompanySettings; Set-CimInstance -InputObject $MC_Instance -Property @{MC_Ring = "EA"} -PassThru
If this script is published as an application in the Software Center users can assign as Early Adopter themselves.
Next time GPOs are applied the machine / user will receive the EA-GPOs. Configuration Manager hardware inventory will report the new ring back to Configuration Manager, so EA-application can be offered / deployed.