This article describes how to update the master image for Dedicated and Pooled MCS catalogs using PowerShell Software Development Kit (PowerShell SDK)
The GUI option Update Machine is available only for the Pooled MCS catalogs. This option is not available for Dedicated MCS catalogs.
Note: Changes applied to the master image of a Dedicated Catalog takes effect only for the new machines created from the image. These changes are not applied to the existing machines in the Catalog.
Modify the master Virtual Machine or new virtual machine with the required changes.
Take a snapshot of the modified virtual machine.
Start PowerShell on Delivery Controller (Controller).
Run command Add-PSSnapIn citrix*.
Run command Get-ProvScheme.
This displays a list of Provisioning Scheme(s) from the XenDesktop site. Make a note of the MasterImageVM entry.
Example
ProvisioningSchemeUid : 2a01126c-0352-41e0-9603-9118120e15c3
ProvisioningSchemeName : win7ded_anu
.
.
MasterImageVM : XDHyp:\HostingUnits\anu\Anu- Win7.vm\existing.snapshot\Citrix_XD_win7-pooled.snapshot\Citrix_XD_win7-pooled.snapshot\sp1.snapshot\248813.snapshot
MasterImageVMDate : 4/14/2011 6:01:21 PM
IdentityPoolUid : 1d227066-f5ee-41b9-8a99-753e9d060e42
IdentityPoolName : win7ded
HostingUnitUid : d534c437-6c65-4659-97db-d6b86534685b
HostingUnitName : anu
.
.
VMMetadata : {A, A, E, A...}
Note: This preceding information is also required for reverting to the previous image.
Run the following command to display the list of snapshots on the virtual machine:
Get-ChildItem -Recurse -Path 'XDHyp:\hostingunits\%hostName%\%vmName%.vm'
ExampleGet-ChildItem -Recurse -Path 'XDHyp:\hostingunits\anu\Anu-Win7.vm
Where, hostname is anu and vmname is Anu-win7.
Output
PSPath : Citrix.Host.Admin.V1\Citrix.Hypervisor::XDHyp:\hostingunits\anu\Anu- Win7.vm\existing.snapshot\Citrix_XD_win7-pooled.snapshot\Citrix_XD_win7- pooled.snapshot\sp1.snapshot\2505438.snapshot\afterupdate.snapshot
PSParentPath : Citrix.Host.Admin.V1\Citrix.Hypervisor::XDHyp:\hostingunits\anu\Anu-
Win7.vm\existing.snapshot\Citrix_XD_win7-pooled.snapshot\Citrix_XD_win7- pooled.snapshot\sp1.snapshot\2505438.snapshot
PSChildName : afterupdate.snapshot
.
.
ObjectPath : /Anu-Win7.vm/existing.snapshot/Citrix_XD_win7-pooled.snapshot/Citrix_XD_win7-pooled.snapshot/sp1.snapshot/2505438.snapshot/afterupdate.snapshot
FullPath : XDHyp:\hostingunits\anu\Anu-Win7.vm\existing.snapshot\Citrix_XD_win7- pooled.snapshot\Citrix_XD_win7- pooled.snapshot\sp1.snapshot\2505438.snapshot\afterupdate.snapshot
IsSymLink : False
AdditionalData : {}
Run the following command to publish the details of the master virtual machine:
Publish-ProvMasterVmImage -ProvisioningSchemeName "%provisioningSchemeName%" -MasterImageVM "%templatePSPath%"
Example
Publish-ProvMasterVmImage -ProvisioningSchemeName win7ded_anu –masterimagevm XDHyp:\hostingunits\anu\Anu-Win7.vm\existing.snapshot\Citrix_XD_win7- pooled.snapshot\Citrix_XD_win7-pooled.snapshot\sp1.snapshot\2505438.snapshot\afterupdate.snapshot
Where %provisioningSchemeName% is win7ded_anu and %templatePSPath% is XDHyp:\hostingunits\anu\Anu-Win7.vm\existing.snapshot\Citrix_XD_win7- pooled.snapshot\Citrix_XD_win7- pooled.snapshot\sp1.snapshot\2505438.snapshot\afterupdate.snapshot.
The preceding command updates the master image and displays the result.
OutputTaskId : c6b5acf4-f950-428c-82a4-0150dab99945
Active : False
Host : XX-W2K8R2-DDC
DateStarted : 4/15/2011 5:01:44 PM
Type : PublishImage
Metadata : {}
WorkflowStatus : Completed
ProvisioningSchemeUid : 2a01126c-0352-41e0-9603-9118120e15c3
ProvisioningSchemeName : win7ded_anu
MasterImage : XDHyp:\HostingUnits\anu\Anu- Win7.vm\existing.snapshot\Citrix_XD_win7-pooled.snapshot\Citrix_XD
_win7- pooled.snapshot\sp1.snapshot\2505438.snapshot\afterupdate.snapshot
HostingUnitName : anu
HostingUnitUid : d534c437-6c65-4659-97db-d6b86534685b
ADIdentityPoolName :
ADIdentityPoolUid : 1d227066-f5ee-41b9-8a99-753e9d060e42
TaskState : Finished
TaskStateInformation :
TaskProgress : 100
DiskSize : 24
The following confirmation message appears in the Citrix Studio action pane:

For the update to change effect the VMs in the catalog must be rebooted from Citrix Studio and not via the Hypervisor .
https://support.citrix.com/external/article?articleUrl=CTX546958-how-to-reboot-all-the-unregistered-win10-desktops-via-powershell-script can be adapted .
For instance fora catalog ' Test-Catalog' this command will reboot all VMs .
Get-BrokerMachine -CatalogName 'Test-Catalog' | New-BrokerHostingPowerAction -Action "reset"
This software application is provided to you as is with no representations, warranties or conditions of any kind. You may use and distribute it at your own risk. CITRIX DISCLAIMS ALL WARRANTIES WHATSOEVER, EXPRESS, IMPLIED, WRITTEN, ORAL OR STATUTORY, INCLUDING WITHOUT LIMITATION WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NONINFRINGEMENT. Without limiting the generality of the foregoing, you acknowledge and agree that: (a) the software application may exhibit errors, design flaws or other problems, possibly resulting in loss of data or damage to property; (b) it may not be possible to make the software application fully functional; and (c) Citrix may, without notice or liability to you, cease to make available the current version and/or any future versions of the software application. In no event should the software application be used to support ultra-hazardous activities, including but not limited to life support or blasting activities. NEITHER CITRIX NOR ITS AFFILIATES OR AGENTS WILL BE LIABLE, UNDER BREACH OF CONTRACT OR ANY OTHER THEORY OF LIABILITY, FOR ANY DAMAGES WHATSOEVER ARISING FROM USE OF THE SOFTWARE APPLICATION, INCLUDING WITHOUT LIMITATION DIRECT, SPECIAL, INCIDENTAL, PUNITIVE, CONSEQUENTIAL OR OTHER DAMAGES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. You agree to indemnify and defend Citrix against any and all claims arising from your use, modification or distribution of the software application.
This article describes how to update the master image for Dedicated and Pooled MCS catalogs using PowerShell Software Development Kit (PowerShell SDK)