Public/Get-CloudPCUserSetting.ps1
|
function Get-CloudPCUserSetting { <# .SYNOPSIS Returns Windows 365 Cloud PC user settings. .DESCRIPTION Calls the Microsoft Graph beta /deviceManagement/virtualEndpoint/userSettings endpoint and returns normalized WindowsCloudPC.UserSetting objects. By default, the cmdlet lists every user setting. Pass -Id to retrieve a single user setting. Pass -IncludeAssignments to expand group assignments. .PARAMETER Id Optional user setting ID. When provided, the cmdlet retrieves only that user setting. .PARAMETER IncludeAssignments Includes assignment relationships by adding $expand=assignments. .EXAMPLE Get-CloudPCUserSetting | Format-Table DisplayName,ResetEnabled,UserRestoreEnabled Lists Cloud PC user settings with reset and restore status. .EXAMPLE Get-CloudPCUserSetting -Id '26494f36-064f-42e8-befd-fde474840402' Gets one Cloud PC user setting by ID. .EXAMPLE Get-CloudPCUserSetting -IncludeAssignments | Select-Object DisplayName,Assignments Lists Cloud PC user settings and expands assignment relationships. #> [CmdletBinding()] [OutputType('WindowsCloudPC.UserSetting')] param( [Parameter(Position = 0, ValueFromPipelineByPropertyName)] [Alias('UserSettingId')] [string]$Id, [switch]$IncludeAssignments ) begin { Connect-CloudPC | Out-Null } process { $select = @( 'id', 'displayName', 'selfServiceEnabled', 'localAdminEnabled', 'resetEnabled', 'lastModifiedDateTime', 'createdDateTime', 'provisioningSourceType', 'restorePointSetting', 'crossRegionDisasterRecoverySetting', 'notificationSetting' ) -join ',' $query = @('$select=' + [uri]::EscapeDataString($select)) if ($IncludeAssignments) { $query += '$expand=assignments' } if ($Id) { $escapedId = [uri]::EscapeDataString($Id) $uri = 'https://graph.microsoft.com/beta/deviceManagement/virtualEndpoint/userSettings/' + $escapedId + '?' + ($query -join '&') try { $settings = @( Invoke-MgGraphRequest -Method GET -Uri $uri ) } catch { Write-Error "Cloud PC user setting '$Id' not found: $($_.Exception.Message)" return } } else { $uri = 'https://graph.microsoft.com/beta/deviceManagement/virtualEndpoint/userSettings?' + ($query -join '&') $settings = Invoke-GraphPaged -Uri $uri } foreach ($setting in $settings) { [pscustomobject]@{ PSTypeName = 'WindowsCloudPC.UserSetting' Id = $setting.id DisplayName = $setting.displayName SelfServiceEnabled = $setting.selfServiceEnabled LocalAdminEnabled = $setting.localAdminEnabled ResetEnabled = $setting.resetEnabled RestorePointFrequencyInHours = $setting.restorePointSetting.frequencyInHours RestorePointFrequencyType = $setting.restorePointSetting.frequencyType UserRestoreEnabled = $setting.restorePointSetting.userRestoreEnabled CrossRegionDisasterRecoveryEnabled = $setting.crossRegionDisasterRecoverySetting.crossRegionDisasterRecoveryEnabled MaintainCrossRegionRestorePointEnabled = $setting.crossRegionDisasterRecoverySetting.maintainCrossRegionRestorePointEnabled DisasterRecoveryType = $setting.crossRegionDisasterRecoverySetting.disasterRecoveryType UserInitiatedDisasterRecoveryAllowed = $setting.crossRegionDisasterRecoverySetting.userInitiatedDisasterRecoveryAllowed DisasterRecoveryNetworkSetting = $setting.crossRegionDisasterRecoverySetting.disasterRecoveryNetworkSetting RestartPromptsDisabled = $setting.notificationSetting.restartPromptsDisabled ProvisioningSourceType = $setting.provisioningSourceType CreatedDateTime = if ($setting.createdDateTime) { ([datetime]$setting.createdDateTime).ToLocalTime() } else { $null } LastModifiedDateTime = if ($setting.lastModifiedDateTime) { ([datetime]$setting.lastModifiedDateTime).ToLocalTime() } else { $null } RestorePointSetting = $setting.restorePointSetting CrossRegionDisasterRecoverySetting = $setting.crossRegionDisasterRecoverySetting NotificationSetting = $setting.notificationSetting Assignments = if ($IncludeAssignments) { @($setting.assignments) } else { $null } Raw = $setting } } } end { } } |