{"id":51036867,"url":"https://github.com/bwya77/pswindowscloudpc","last_synced_at":"2026-06-22T07:01:41.692Z","repository":{"id":365084147,"uuid":"1270470774","full_name":"bwya77/PSWindowsCloudPC","owner":"bwya77","description":"PowerShell module to managing Windows Cloud PCs","archived":false,"fork":false,"pushed_at":"2026-06-15T20:27:43.000Z","size":68,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-15T21:08:13.243Z","etag":null,"topics":["daas","powershell","windows-365","windows365"],"latest_commit_sha":null,"homepage":"","language":"PowerShell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bwya77.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-15T18:39:43.000Z","updated_at":"2026-06-15T20:27:46.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/bwya77/PSWindowsCloudPC","commit_stats":null,"previous_names":["bwya77/pswindowscloudpc"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/bwya77/PSWindowsCloudPC","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bwya77%2FPSWindowsCloudPC","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bwya77%2FPSWindowsCloudPC/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bwya77%2FPSWindowsCloudPC/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bwya77%2FPSWindowsCloudPC/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bwya77","download_url":"https://codeload.github.com/bwya77/PSWindowsCloudPC/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bwya77%2FPSWindowsCloudPC/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34637937,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-22T02:00:06.391Z","response_time":106,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["daas","powershell","windows-365","windows365"],"created_at":"2026-06-22T07:01:39.163Z","updated_at":"2026-06-22T07:01:41.649Z","avatar_url":"https://github.com/bwya77.png","language":"PowerShell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# WindowsCloudPC\n\n[![CI](https://github.com/bwya77/PSWindowsCloudPC/actions/workflows/ci.yml/badge.svg)](https://github.com/bwya77/PSWindowsCloudPC/actions/workflows/ci.yml)\n[![Release](https://github.com/bwya77/PSWindowsCloudPC/actions/workflows/release.yml/badge.svg)](https://github.com/bwya77/PSWindowsCloudPC/actions/workflows/release.yml)\n[![Docs](https://github.com/bwya77/PSWindowsCloudPC/actions/workflows/pages.yml/badge.svg)](https://bwya77.github.io/PSWindowsCloudPC/)\n[![PowerShell Gallery](https://img.shields.io/powershellgallery/v/WindowsCloudPC.svg)](https://www.powershellgallery.com/packages/WindowsCloudPC)\n[![Downloads](https://img.shields.io/powershellgallery/dt/WindowsCloudPC.svg)](https://www.powershellgallery.com/packages/WindowsCloudPC)\n\nPowerShell module for managing and querying Windows 365 Cloud PCs via Microsoft Graph (beta).\n\nDetailed Docusaurus documentation is published to GitHub Pages: \u003chttps://bwya77.github.io/PSWindowsCloudPC/\u003e.\n\n## Status\n\nEarly - read-only queries plus write actions for power-on, reboot, sync, local admin password rotation, reprovision, snapshots, provisioning policies, and maintenance windows.\n\n## Requirements\n\n- PowerShell 7+\n- `Microsoft.Graph.Authentication` module (auto-imported by `Connect-CloudPC`)\n- Delegated Graph scopes (requested automatically by `Connect-CloudPC`):\n  - `CloudPC.Read.All`\n  - `DeviceManagementManagedDevices.Read.All`\n  - `User.Read.All`\n  - `Group.Read.All`\n  - `CloudPC.ReadWrite.All` (added on-demand by power-on/reboot/reprovision cmdlets)\n  - `DeviceManagementManagedDevices.PrivilegedOperations.All` (added on-demand by `Sync-CloudPC` and `Reset-CloudPCLocalAdminPassword`)\n\n## Install\n\n```powershell\nInstall-Module WindowsCloudPC -Scope CurrentUser\n```\n\nOr for development against the repo:\n\n```powershell\ngit clone https://github.com/bwya77/PSWindowsCloudPC.git\nImport-Module .\\PSWindowsCloudPC\\WindowsCloudPC.psd1 -Force\n```\n\n## Functions\n\n| Function | Purpose |\n| --- | --- |\n| `Connect-CloudPC` | Idempotent Graph sign-in with the right scopes. |\n| `Export-CloudPCProvisioningPolicy` | Export a provisioning policy to reusable JSON with a create-safe body and assignment targets. |\n| `Get-CloudPC` | List Cloud PCs (filter by policy, user, or type). `Name` reflects the Cloud PC display name, while `ManagedDeviceName` preserves the Intune device name. |\n| `Get-CloudPCConnectivityHistory` | Get Cloud PC connectivity history events from Graph beta by Cloud PC ID or from `Get-CloudPC` pipeline input. |\n| `Get-CloudPCDiskSpace` | Report Cloud PC OS disk total, free, used, percent free, and last Intune sync time from the matching managed device inventory record. |\n| `Get-CloudPCUsage` | For each Cloud PC, report whether it is `inUse` / `available`. Shared PCs use near-instant `connectivityResult`; dedicated PCs use the real-time remote connection status report for `SignInStatus`, `DaysSinceLastSignIn`, and `LastActiveTime`. |\n| `Get-CloudPCProvisioningPolicy` | List provisioning policies with resolved assignment group names. |\n| `Get-CloudPCByProvisioningPolicy` | One row per policy with a nested `CloudPCs` array and `CloudPCCount`. Answers \"which Cloud PCs belong to which policy\". |\n| `Get-CloudPCLaunchDetail` | Get launch details for a Cloud PC, including the Graph launch URL, Windows 365 Switch compatibility, and a computed `ms-cloudpc:connect` Windows App URI when a username is available. Provisioning PCs return `LaunchDetailStatus = 'Unavailable'` instead of a noisy 404. |\n| `Get-CloudPCLicensingAllotment` | List Microsoft Graph cloud licensing allotments from Graph beta. Supports single allotment lookup plus `$select`, `$expand`, `$filter`, `$top`, and `$apply` query shaping. |\n| `Get-CloudPCMaintenanceWindow` | List Cloud PC maintenance windows from Graph beta. Supports exact display name lookup, ID lookup, and optional assignment expansion with resolved group names. |\n| `Get-CloudPCOrganizationSetting` | Read tenant-wide Windows 365 Cloud PC organization defaults such as OS version, user account type, MEM auto-enrollment, SSO, and Windows language. |\n| `Get-CloudPCReport` | Retrieve verified Windows 365 Cloud PC report stream files from Graph beta, parse their `Schema` and `Values` arrays, and emit typed report rows. Deprecated reports, live-failing report aliases, and enum values without callable actions are excluded. |\n| `Get-CloudPCRemoteActionResult` | Recent remote-action history (restart, reprovision, restore, …) for a Cloud PC, with `ActionState`, timestamps, and `HasDownTime`. Use right after `Restart-CloudPC` to confirm the action landed. |\n| `Get-CloudPCServicePlan` | List available Windows 365 Cloud PC service plans, including vCPU, RAM, storage, and user profile size. |\n| `Get-CloudPCSettingProfile` | List Windows 365 setting profiles from Graph beta. Use `-Id` for a single profile and `-IncludeDetails` to expand assignments and settings, including object and list setting children. |\n| `Get-CloudPCSnapshot` | List Cloud PC restore point snapshots from Graph beta. Supports `-Id`, `-CloudPC` object or friendly name, `-User`, and `-All`, with friendly Cloud PC names and verbose progress output. |\n| `Get-CloudPCSupportedRegion` | List Windows 365 supported Cloud PC regions from Graph beta, including region status, supported solution, region group, and geographic location type. Supports client-side filters for status, solution, region group, and geography. |\n| `Get-CloudPCUserSetting` | List Windows 365 Cloud PC user settings from Graph beta, including reset, restore point, local admin, cross-region disaster recovery, notification, and assignment details. |\n| `Invoke-CloudPCReprovision` | Reprovision one or more Cloud PCs via Graph. Pipeline-friendly, `SupportsShouldProcess` (defaults to `ConfirmImpact='High'`), optional `-OsVersion` / `-UserAccountType`, `-Force`, and `-PassThru`. |\n| `Invoke-CloudPCPolicyReprovision` | Reprovision every Cloud PC in a provisioning policy, optionally excluding specific Cloud PCs by name, ID, managed device ID, Azure AD device ID, or assigned user UPN. Emits a target/result row for every included or excluded PC. |\n| `New-CloudPCMaintenanceWindow` | Create Cloud PC maintenance windows from weekday and weekend times, or custom schedule objects. Uses the portal-style weekday plus weekend payload, supports `-WhatIf`, two-hour minimum validation, optional group assignment, and result metadata. |\n| `New-CloudPCProvisioningPolicy` | Create a provisioning policy from an export. Supports `-WhatIf`, display name and description overrides, and optional assignment recreation with `-Assign`. |\n| `New-CloudPCSnapshot` | Create Cloud PC restore point snapshots via Graph beta. Supports one Cloud PC by ID, object, or friendly name, plus `-All`, `-User`, and `-ProvisioningPolicyId` batch modes. Emits one result row per target. |\n| `Remove-CloudPCMaintenanceWindow` | Delete a Cloud PC maintenance window by ID, exact display name, or pipeline object. Clears assignments before delete to avoid Graph 409 conflicts. Supports `-WhatIf`, `-Confirm`, `-Force`, and `-PassThru`. |\n| `Remove-CloudPCProvisioningPolicy` | Delete a provisioning policy by ID or pipeline object. Supports `-WhatIf`, `-Confirm`, `-Force`, and `-PassThru`. Graph cannot delete policies that are still in use. |\n| `Rename-CloudPC` | Rename a Cloud PC display name through Microsoft Graph v1.0. Supports pipeline input, `-WhatIf`, `-Force`, and `-PassThru`. |\n| `Reset-CloudPCLocalAdminPassword` | Rotate the local admin password for one or more Cloud PCs through the Intune managed device action. Accepts Cloud PC objects, exact names, Cloud PC IDs, or managed device IDs. |\n| `Restore-CloudPC` | Restore a Cloud PC from a restore point snapshot. Accepts Cloud PC targets plus `-SnapshotId`, or `WindowsCloudPC.Snapshot` pipeline input. |\n| `Restart-CloudPC` | Reboot one or more Cloud PCs via Graph. Pipeline-friendly, `SupportsShouldProcess` (defaults to `ConfirmImpact='High'`), `-Force` to skip the prompt, `-PassThru` for a result object. |\n| `Start-CloudPC` | Power on one or more Cloud PCs via Graph beta. Accepts Cloud PC objects, exact names, or IDs. Pipeline-friendly, supports `-WhatIf`, `-Force`, and `-PassThru`. |\n| `Sync-CloudPC` | Sync one or more Cloud PCs through the Intune managed device `syncDevice` action. Accepts Cloud PC objects, exact names, Cloud PC IDs, or managed device IDs. |\n\n## Quick start\n\n```powershell\nConnect-CloudPC\n\n# Everything in the tenant\nGet-CloudPCUsage | Format-Table CloudPcName,ProvisioningType,UsageStatus,SignInStatus,DaysSinceLastSignIn,CurrentUserDisplayName,SessionStart\n\n# Only Cloud PCs with an active session\nGet-CloudPCUsage | Where-Object UsageStatus -eq 'inUse'\n\n# One Cloud PC by exact ID or name\nGet-CloudPC -Id '\u003ccloud-pc-id\u003e'\nGet-CloudPC -Name 'CPC-brad-*'\nGet-CloudPCUsage -CloudPC 'CPC-brad-U2O0S'\n\n# Idle Cloud PCs (no sign-in in 14+ days)\nGet-CloudPCUsage | Where-Object DaysSinceLastSignIn -ge 14 | Sort-Object DaysSinceLastSignIn -Descending\n\n# Cloud PCs with the least free OS disk space\nGet-CloudPCDiskSpace |\n    Sort-Object PercentFree |\n    Format-Table CloudPcName,AssignedUserUpn,FreeStorageGB,TotalStorageGB,PercentFree,LastSyncDateTime\n\n# Inspect raw connectivity history for a Cloud PC\nGet-CloudPC -Type Dedicated |\n    Select-Object -First 1 |\n    Get-CloudPCConnectivityHistory |\n    Sort-Object EventDateTime -Descending |\n    Format-Table CloudPcName,EventDateTime,EventType,EventName,EventResult\n\n# Per-policy breakdown\nGet-CloudPCByProvisioningPolicy | Format-Table DisplayName,ProvisioningType,CloudPCCount\n\n# Export a provisioning policy to reusable JSON\nExport-CloudPCProvisioningPolicy -Id '\u003cpolicy-id\u003e' -Path .\\policy-export.json\n\n# Preview creating a copy from the export\nNew-CloudPCProvisioningPolicy -Path .\\policy-export.json -DisplayName 'Copied Policy' -WhatIf\n\n# Create the copy and recreate exported assignment targets\nNew-CloudPCProvisioningPolicy -Path .\\policy-export.json -DisplayName 'Copied Policy' -Assign -Force\n\n# Copy a Flex Shared policy with a lower reserved Cloud PC allotment\nNew-CloudPCProvisioningPolicy -Path .\\policy-export.json -DisplayName 'Copied Flex Shared Policy' -RegionName eastus2 -AllotmentLicensesCount 1 -Assign -Force\n\n# Delete a copied provisioning policy\nRemove-CloudPCProvisioningPolicy -Id '\u003cpolicy-id\u003e' -WhatIf\nRemove-CloudPCProvisioningPolicy -Id '\u003cpolicy-id\u003e' -Force -PassThru\n\n# List maintenance windows and assigned groups\nGet-CloudPCMaintenanceWindow -IncludeAssignments |\n    Format-Table DisplayName,ScheduleSummary,AssignedGroupNames\n\n# Create a maintenance window and assign it to a group\nNew-CloudPCMaintenanceWindow `\n    -DisplayName 'Off-Hours Resize Window' `\n    -WeekdayStartTime '01:00' `\n    -WeekdayEndTime '05:00' `\n    -GroupId '\u003cgroup-id\u003e' `\n    -Force |\n    Format-Table DisplayName,Status,AssignmentStatus,AssignmentsApplied\n\n# Remove a maintenance window by exact display name, clearing assignments first\nRemove-CloudPCMaintenanceWindow -DisplayName 'Off-Hours Resize Window' -WhatIf\n\n# Drill into a single policy's Cloud PCs\nGet-CloudPCByProvisioningPolicy |\n    Select-Object DisplayName -ExpandProperty CloudPCs |\n    Format-Table DisplayName,Name,ProvisioningStatus,AssignedUserUpn\n\n# Pipeline composition\nGet-CloudPC -Type Dedicated | Get-CloudPCUsage | Export-Csv .\\dedicated-usage.csv -NoTypeInformation\n\n# Get launch URLs and Windows App launch URIs for a user's Cloud PCs\nGet-CloudPC -UserPrincipalName 'user@contoso.com' |\n    Get-CloudPCLaunchDetail -UserId 'user@contoso.com' |\n    Format-Table CloudPcName,LaunchDetailStatus,Windows365SwitchCompatible,WindowsAppLaunchUri\n\n# List cloud licensing allotments\nGet-CloudPCLicensingAllotment |\n    Format-Table SkuPartNumber,AllottedUnits,ConsumedUnits,AvailableUnits,AssignableTo\n\n# List Cloud PC service plans\nGet-CloudPCServicePlan |\n    Format-Table DisplayName,Type,VCpuCount,RamGB,StorageGB\n\n# Review tenant-wide Cloud PC organization defaults\nGet-CloudPCOrganizationSetting |\n    Select-Object OsVersion,UserAccountType,MEMAutoEnrollEnabled,SingleSignOnEnabled,WindowsLanguage\n\n# Retrieve and parse a Graph Cloud PC report stream\n$pc = Get-CloudPC | Select-Object -First 1\nGet-CloudPCReport -ReportName remoteConnectionHistoricalReports -CloudPcId $pc.Id -Top 50 |\n    Format-Table ManagedDeviceName,SignInDateTime,SignOutDateTime,UsageInHour\n\n# Get real-time sign-in status for all Cloud PCs\nGet-CloudPCReport -ReportName realTimeRemoteConnectionStatus |\n    Format-Table ManagedDeviceName,SignInStatus,DaysSinceLastSignIn,LastActiveTime\n\n# Pace tenant-wide real-time status checks in large environments\nGet-CloudPCReport -ReportName realTimeRemoteConnectionStatus -RequestDelayMilliseconds 100\n\n# Save the raw report file while still returning parsed report rows\n$activity = Get-CloudPCReport -ReportName remoteConnectionHistoricalReports -CloudPcId $pc.Id -Top 1\nGet-CloudPCReport -ReportName rawRemoteConnectionReports `\n    -ActivityId $activity.ActivityId `\n    -Select Timestamp,RoundTripTimeInMs,AvailableBandwidthInMBps `\n    -OutputFilePath .\\raw-remote-connection-report.json\n\n# Get one cloud licensing allotment by ID\nGet-CloudPCLicensingAllotment -Id '\u003callotment-id\u003e' |\n    Select-Object SkuPartNumber,AllottedUnits,ConsumedUnits,Services,Subscriptions\n\n# Shape the beta allotments query with OData options\nGet-CloudPCLicensingAllotment `\n    -Select id,skuPartNumber,allottedUnits,consumedUnits `\n    -Expand 'waitingMembers($select=id,waitingSinceDateTime)'\n\n# List supported Windows 365 Cloud PC regions\nGet-CloudPCSupportedRegion |\n    Sort-Object DisplayName |\n    Format-Table DisplayName,RegionStatus,RegionGroup,GeographicLocationType\n\n# Find available regions in a specific region group\nGet-CloudPCSupportedRegion -RegionStatus available -RegionGroup usEast\n\n# List Cloud PC user settings\nGet-CloudPCUserSetting |\n    Format-Table DisplayName,ResetEnabled,UserRestoreEnabled,LocalAdminEnabled\n\n# Get one user setting with assignments\nGet-CloudPCUserSetting -Id '\u003cuser-setting-id\u003e' -IncludeAssignments |\n    Select-Object DisplayName,Assignments\n\n# List Windows 365 setting profiles\nGet-CloudPCSettingProfile |\n    Format-Table DisplayName,ProfileType,TemplateId,IsAssigned,Priority\n\n# Get one setting profile with assignments and expanded settings\nGet-CloudPCSettingProfile -Id '\u003csetting-profile-id\u003e' -IncludeDetails |\n    Select-Object DisplayName,Assignments,Settings\n\n# List restore point snapshots for all Cloud PCs\nGet-CloudPCSnapshot -All -Verbose |\n    Format-Table CloudPcName,Status,SnapshotType,CreatedDateTime\n\n# List restore point snapshots for all Cloud PCs assigned to a user\nGet-CloudPCSnapshot -User 'user@contoso.com' -Verbose |\n    Format-Table CloudPcName,Status,SnapshotType,CreatedDateTime\n\n# List restore point snapshots for one Cloud PC by friendly name\nGet-CloudPCSnapshot -CloudPC 'CFD-Vance-XS4KT' |\n    Format-Table CloudPcName,Status,SnapshotType,CreatedDateTime\n\n# Preview restoring a Cloud PC from its newest snapshot\nGet-CloudPCSnapshot -CloudPC 'CFD-Vance-XS4KT' |\n    Select-Object -First 1 |\n    Restore-CloudPC -WhatIf\n\n# Create a restore point snapshot for one Cloud PC by friendly name\nNew-CloudPCSnapshot -CloudPC 'CFD-Vance-XS4KT' -Force |\n    Format-Table CloudPcName,Status,RequestedAt,ErrorMessage\n\n# Create restore point snapshots for all Cloud PCs assigned to a user\nNew-CloudPCSnapshot -User 'user@contoso.com' -Force |\n    Format-Table CloudPcName,AssignedUserUpn,Status,RequestedAt,ErrorMessage\n\n# Create restore point snapshots for every Cloud PC in a provisioning policy except selected targets\nNew-CloudPCSnapshot -ProvisioningPolicyId '\u003cpolicy-id\u003e' `\n    -ExcludeCloudPC 'CPC-KEEP-01','CPC-KEEP-02','cpc-id-3','user4@contoso.com' `\n    -Force |\n    Format-Table CloudPcName,AssignedUserUpn,ProvisioningPolicyName,Status,Excluded,ErrorMessage\n\n# Reboot a single Cloud PC and confirm the action landed\n$pc = Get-CloudPC | Where-Object Name -eq 'CFD-brad-TUFL7'\n$pc | Restart-CloudPC -Force\n$pc | Get-CloudPCRemoteActionResult | Where-Object ActionName -eq 'Restart'\n\n# Power on a Cloud PC by exact name or ID\nStart-CloudPC -CloudPC 'CPC-brad-U2O0S' -Force -PassThru\nStart-CloudPC -Id '\u003ccloud-pc-id\u003e' -Force -PassThru\n\n# Rename a Cloud PC display name\nRename-CloudPC -CloudPC 'CPC-brad-U2O0S' -NewDisplayName 'Finance-CloudPC-01' -WhatIf\n\n# Rename both the Cloud PC display name and Intune managed device name\nRename-CloudPC -CloudPC 'CPC-brad-U2O0S' -NewDisplayName 'Finance-CloudPC-01' -ManagedDeviceName 'Finance-CloudPC-01' -WhatIf\n\n# Sync a Cloud PC through the Intune managed device action\nSync-CloudPC -CloudPC 'CPC-brad-U2O0S' -Force -PassThru\nSync-CloudPC -ManagedDeviceId '\u003cmanaged-device-id\u003e' -Force -PassThru\n\n# Rotate a Cloud PC local admin password through the Intune managed device action\nReset-CloudPCLocalAdminPassword -CloudPC 'CPC-brad-U2O0S' -Force -PassThru\nReset-CloudPCLocalAdminPassword -ManagedDeviceId '\u003cmanaged-device-id\u003e' -Force -PassThru\n\n# Reprovision a single Cloud PC and confirm the action landed\n$pc | Invoke-CloudPCReprovision -OsVersion windows11 -UserAccountType standardUser -Force\n$pc | Get-CloudPCRemoteActionResult | Where-Object ActionName -eq 'Reprovision'\n\n# Reprovision every Cloud PC in a policy except a small exclusion list\nInvoke-CloudPCPolicyReprovision -ProvisioningPolicyId '\u003cpolicy-id\u003e' `\n    -ExcludeCloudPC 'CPC-KEEP-01','CPC-KEEP-02','cpc-id-3','user4@contoso.com' `\n    -OsVersion windows11 -UserAccountType standardUser -Force |\n    Format-Table CloudPcName,AssignedUserUpn,Status,Excluded,ErrorMessage\n\n# Tenant-wide most-recent-action snapshot\nGet-CloudPC | Get-CloudPCRemoteActionResult |\n    Format-Table CloudPcName,ActionName,ActionState,StartDateTime,HasDownTime\n```\n\n## How `UsageStatus` is determined\n\nFor shared Cloud PCs, `Get-CloudPCUsage` uses the Cloud PC endpoint's\n`connectivityResult.status` because it updates almost immediately for shared\ndevices. Shared PCs do not use connectivity history for `UsageStatus` because\nthat history can lag, but they do use connectivity history to populate\n`LastActiveTime` and `DaysSinceLastSignIn`. Endpoint status `available` maps to\n`SignInStatus = NotSignedIn`, and `inUse` maps to `SignedIn`.\n\n`Get-CloudPC` requests `connectivityResult` with `$select` and sends\n`Prefer: include-unknown-enum-members` so Microsoft Graph returns evolvable enum\nvalues such as `inUse` and `underServiceMaintenance`.\n\nFor dedicated Cloud PCs, `Get-CloudPCUsage` uses Graph beta\n`getRealTimeRemoteConnectionStatus` as the current sign-in source of truth. If\nthat real-time report is unavailable, the function falls back to\n`getCloudPcConnectivityHistory`: the latest successful `Connection Started`\nevent with no newer user-connection terminal event maps to `inUse`; otherwise\nthe PC maps to `available`. If connectivity history is also unavailable, the\nfunction falls back to `connectivityResult.status`.\n\n## Releases\n\nEvery push to `main` that touches functional code (`Public/`, `Private/`, `WindowsCloudPC.psd1`, `WindowsCloudPC.psm1`) automatically:\n\n1. Runs lint + Pester on Windows and Ubuntu.\n2. Bumps the manifest `ModuleVersion` (patch by default).\n3. Updates `CHANGELOG.md`, tags `vX.Y.Z`, and publishes to the PowerShell Gallery.\n\nForce a `minor` or `major` bump from the **Actions → Release → Run workflow** button. Skip a release with `[skip release]` in the commit message.\n\n## Roadmap\n\n- `Get-CloudPCConnection` (connectivity health history)\n- `Restore-CloudPC`, `Resize-CloudPC`\n- `Get-CloudPCAuditEvent`\n- Format file (`.format.ps1xml`) for default table views\n- Authenticode signing via Azure Trusted Signing\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbwya77%2Fpswindowscloudpc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbwya77%2Fpswindowscloudpc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbwya77%2Fpswindowscloudpc/lists"}