Repository navigation
This release adds 11 cmdlets for day-to-day Cloud PC management, such as the audit log, connection history, snapshots and the troubleshooter. It also fixes signing in with a certificate or a device code, and makes deleting and updating policies safer.
Read the breaking changes before you upgrade: the Remove-* cmdlets now ask for confirmation and need the exact name.
Install or upgrade
Install-Module -Name PSCloudPC -RequiredVersion 1.0.18
# or, if the module is already installed:
Update-Module -Name PSCloudPCRequires PowerShell 7.2 or later. The Microsoft.Graph.Authentication module is installed automatically.
⚠️ Breaking changes
Remove-CPCAzureNetworkConnection,Remove-CPCCustomImage,Remove-CPCProvisioningPolicyandRemove-CPCUserSettingsPolicyonly delete an object whose name matches exactly (upper and lower case don't matter). Before, part of the name was enough, so the wrong object could be deleted. When no object or more than one object matches, nothing is deleted. These cmdlets now ask for confirmation. What to do: pass the full name, and add-Confirm:$falsewhen you run them in a script (#133)Update-CPCUserSettingsPolicyandSet-CPCCrossRegionDisasterRecoveryno longer return the policy. What to do: if your script uses the output, runGet-CPCUserSettingsPolicyafter the change (#156)Set-CPCCrossRegionDisasterRecovery:-RegionNameand-RegionGroupare now required when you turn oncrossRegionorpremiumdisaster recovery (#139)
🚀 New cmdlets and parameters
Get-CPCAuditEvent: shows the Windows 365 audit logGet-CPCConnectivityHistory: shows the connection history of a Cloud PCGet-CPCRealTimeConnectionStatus: shows whether a user is signed in to a Cloud PC right nowGet-CPCRemoteActionResult: shows the remote actions run on a Cloud PC and their resultInvoke-CPCChangeUserAccountType: makes the user of a Cloud PC a standard user or a local administratorInvoke-CPCCreateSnapshot: creates a restore point of a Cloud PCInvoke-CPCPowerOnandInvoke-CPCPowerOff: start or shut down a Windows 365 Frontline Cloud PCInvoke-CPCRetryPartnerAgentInstallation: retries a failed partner agent installation on a Cloud PCInvoke-CPCTroubleshoot: runs the Windows 365 troubleshooter on a Cloud PCUpdate-CPCAzureNetworkConnection: changes an existing Azure network connectionInvoke-CPCRestore: new-SnapshotIdparameter, so you can restore a Cloud PC from a script without the selection windowInvoke-CPCReprovision: new-OsVersionand-UserAccountTypeparametersRemove-CPCCustomImage: new-Versionparameter, for images that share a name (#133)
✨ Changes
New-CPCAzureNetworkConnectionuses-Namelike the other cmdlets;-DisplayNamestill worksGet-CPCServicePlanalso returns the provisioning type of each plan (#141)- Error messages now include the reason given by Microsoft Graph, which makes failures easier to solve (#132)
- The help of every cmdlet is complete: each parameter has a description, and wrong descriptions and permissions are corrected (#144)
🗑️ Deprecated
Update-CPCUserSettingsPolicy:-DisableRestartPromptsand-SelfServiceEnabledhave no effect, because Microsoft retired these settings. They show a warning and will be removed in a later version (#156)
🐛 Fixes
Connect-Windows365: signing in with a certificate didn't work (#128), and signing in with a device code didn't ask for the Cloud PC permissions (#129)Get-CloudPCdidn't return all Cloud PCs in larger tenants (#130)- Some cmdlets reported success while the change had failed (#131)
Update-CPCUserSettingsPolicyandSet-CPCCrossRegionDisasterRecoveryreset every setting you didn't pass to its default value (#156)Set-CPCCrossRegionDisasterRecoverycouldn't turn disaster recovery off (#139)Get-CPCServicePlan -ServicePlanNamedidn't work.Invoke-CPCResizeandSet-CPCProvisioningPolicyAssignmentstop when the service plan name is unknown or matches more than one plan (#141)Set-CPCProvisioningPolicyAssignmentandSet-CPCUserSettingsPolicyAssignmentfailed when the group was already assigned (#142)New-CPCProvisioningPolicycouldn't create a hybrid join policy, andNew-CPCProvisioningPolicyandUpdate-CPCProvisioningPolicydidn't pass on the join type of the Azure network connection (#135)New-CPCAzureNetworkConnectionsent the AD domain password in an encrypted form that Windows 365 can't use (#137)New-CPCCustomImagecreated images without a name (#136)Update-CPCOrganizationSettingsent its on/off settings in the wrong format (#140)Invoke-CPCPublishCloudAppandInvoke-CPCUnpublishCloudAppcould act on another app whose name contained the name you entered (#134)Invoke-CPCEndGracePeriodstopped with an error when it asked for confirmation (#138)Invoke-CPCRestoreandInvoke-CPCReprovisionuse the current Windows 365 restore and reprovision actionsGet-CPCRestorePointreturned no restore points (#98)Get-CPCGalleryImage -Namesearched on the offer name instead of the image name- When a name isn't found or a value isn't valid, the cmdlet now stops before it changes anything, also with
-ErrorAction SilentlyContinue(#139, #141)
🔎 Known issues
Invoke-CPCChangeUserAccountTypedoesn't work yet: Microsoft Graph returns an error (#104)Invoke-CPCPowerOnandInvoke-CPCPowerOffhaven't been tested on a Frontline Cloud PC yet (#107)- Microsoft removes the AD domain user name and password of Azure network connections on December 31, 2026.
New-CPCAzureNetworkConnectionandUpdate-CPCAzureNetworkConnectionwill be updated before then (#175)
Contributors: @Ruthhl3ss, @StefanDingemanse
Full changelog: v1.0.17...v1.0.18