[{"content":"","date":"15 May 2026","externalUrl":null,"permalink":"/categories/","section":"Categories","summary":"","title":"Categories","type":"categories"},{"content":"","date":"15 May 2026","externalUrl":null,"permalink":"/tags/microsoft-graph/","section":"Tags","summary":"","title":"Microsoft Graph","type":"tags"},{"content":"","date":"15 May 2026","externalUrl":null,"permalink":"/posts/","section":"Posts","summary":"","title":"Posts","type":"posts"},{"content":"","date":"15 May 2026","externalUrl":null,"permalink":"/tags/powershell/","section":"Tags","summary":"","title":"Powershell","type":"tags"},{"content":"","date":"15 May 2026","externalUrl":null,"permalink":"/tags/sdk/","section":"Tags","summary":"","title":"Sdk","type":"tags"},{"content":"","date":"15 May 2026","externalUrl":null,"permalink":"/tags/","section":"Tags","summary":"","title":"Tags","type":"tags"},{"content":"","date":"15 May 2026","externalUrl":null,"permalink":"/categories/windows-365/","section":"Categories","summary":"","title":"Windows 365","type":"categories"},{"content":" Overview # The Windows 365 Cloud PC Monitors feature is currently in Public Preview and already provides a broad range of valuable insights into your Cloud Endpoints. This includes sign-in time trends, Cloud PC health trends, average round-trip times, connection data by Windows App version and a much more. However, at the time of writing, the platform does not provide reporting for Cloud PC disk space trends, particularly around free and used disk space. Luckily, we can still get this information using the Microsoft Graph REST API.\nMicrosoft Graph managedDevices # Because every Cloud PC is also an Intune-enrolled Windows device, the Microsoft Intune device-inventory pipeline carries OS disk values for each one. Graph exposes these via the managedDevice resource — specifically two read-only Int64 properties inherited by windowsManagedDevice:\nProperty Type Meaning totalStorageSpaceInBytes Int64 Total OS volume capacity freeStorageSpaceInBytes Int64 Free space on the OS volume Both come straight off the device at Intune check-in time and apply to the system drive (typically C:). They are documented on the shared managedDevice resource type and are inherited by windowsManagedDevice. The cloudPC resource itself does not carry these properties — you must join across.\nFiltering managedDevices to the Cloud PC fleet # Cloud PCs are not flagged with a dedicated managedDeviceOwnerType value; they appear as ordinary company-owned Windows devices. Currently, we can distriguish Cloud PCs using the following methods:\nManaged Device model property contains Cloud PC: Every W365 SKU\u0026rsquo;s model string starts with \u0026ldquo;Cloud PC \u0026quot; (e.g. Cloud PC Enterprise 2vCPU/4GB/64GB). This is the simplest one-shot filter and is what the Intune admin center itself uses.\nThe Microsoft Graph deviceManagement/managedDevices endpoint returns all managed devices and properties for total storage (totalStorageSpaceInBytes) and free space (freeStorageSpaceInBytes). It also include our model property that we can filter against.\nIn my example, using the Microsoft Graph PowerShell SDK, I can run, Get-MgDeviceManagementManagedDevice -All -Property * | Where-Object { $_.Model -like 'Cloud PC*'} | Select-Object Id, Total*, Free*, Model in my tenant which displays my current Cloud PC\u0026rsquo;s and all the properties I will need:\nId TotalStorageSpaceInBytes FreeStorageSpaceInBytes Model -- ------------------------ ----------------------- ----- 3c787e74-e2d2-4fce-9cd1-650b5e06a4ee 136844410880 95460261888 Cloud PC Frontline 4vCPU/16GB/12… 22bb1414-aa07-4d5d-8d5d-a7af104d1dae 136844410880 99693363200 Cloud PC Frontline Shared 4vCPU/… cc802f52-f11e-43df-8393-565439c1a7c6 274283364352 222822400000 Cloud PC Enterprise 8vCPU/32GB/2… Match Cloud PCs from /deviceManagement/virtualEndpoint/cloudPCs to Get-MgDeviceManagementManagedDevice: Another way to get Cloud PCs is to use the /deviceManagement/virtualEndpoint/cloudPCs Graph endpoint which will give us a list of Cloud PCs like below:\n{ \u0026#34;id\u0026#34;: \u0026#34;95194d88-cec5-4b65-af62-26dbd1814364\u0026#34;, \u0026#34;displayName\u0026#34;: \u0026#34;W365-Frontline-Dedicated - Bradley Wyatt\u0026#34;, \u0026#34;imageDisplayName\u0026#34;: \u0026#34;Windows 11 Enterprise + Microsoft 365 Apps 25H2\u0026#34;, \u0026#34;provisioningPolicyId\u0026#34;: \u0026#34;27d60840-6888-44b9-aefd-e5f8f1a92add\u0026#34;, \u0026#34;provisioningPolicyName\u0026#34;: \u0026#34;W365-Frontline-Dedicated\u0026#34;, \u0026#34;onPremisesConnectionName\u0026#34;: \u0026#34;\u0026#34;, \u0026#34;servicePlanId\u0026#34;: \u0026#34;dd3801e2-4aa1-4b16-a44b-243e55497584\u0026#34;, \u0026#34;servicePlanName\u0026#34;: \u0026#34;Cloud PC Frontline 4vCPU/16GB/128GB\u0026#34;, \u0026#34;userPrincipalName\u0026#34;: \u0026#34;brad@windowsfromanywhere.com\u0026#34;, \u0026#34;lastModifiedDateTime\u0026#34;: \u0026#34;2026-05-15T00:01:02Z\u0026#34;, \u0026#34;managedDeviceId\u0026#34;: \u0026#34;3c787e74-e2d2-4fce-9cd1-650b5e06a4ee\u0026#34;, \u0026#34;managedDeviceName\u0026#34;: \u0026#34;CFD-brad-HNFI4\u0026#34;, \u0026#34;aadDeviceId\u0026#34;: \u0026#34;db5913da-e353-49d7-9570-0f2d7f13b51a\u0026#34;, \u0026#34;gracePeriodEndDateTime\u0026#34;: null, \u0026#34;provisioningType\u0026#34;: \u0026#34;shared\u0026#34; } But you may have noticed that this endpoint does not include any storage information, therefore you will need to iterate through each item and match the managedDeviceId value to Id from the deviceManagement/managedDevices endpoint.\nPowerShell example using Microsoft.Graph SDK # The following PowerShell script lists every Cloud PC in the tenant with its free / total storage in GB and a percent-free figure. It uses the Microsoft Graph PowerShell SDK and the v1.0 endpoint.\n# Requires: Install-Module Microsoft.Graph -Scope CurrentUser Connect-MgGraph -Scopes \u0026#39;DeviceManagementManagedDevices.Read.All\u0026#39; # Pull every managedDevice whose model starts with \u0026#34;Cloud PC\u0026#34; $cpcs = Get-MgDeviceManagementManagedDevice -All -Property * | Where-Object { $_.Model -like \u0026#39;Cloud PC*\u0026#39; } $cpcs | ForEach-Object { $totalGB = [math]::Round($_.TotalStorageSpaceInBytes / 1GB, 2) $freeGB = [math]::Round($_.FreeStorageSpaceInBytes / 1GB, 2) $pctFree = if ($totalGB -gt 0) { [math]::Round(($freeGB / $totalGB) * 100, 1) } else { 0 } [pscustomobject]@{ DeviceName = $_.DeviceName UPN = $_.UserPrincipalName Model = $_.Model TotalGB = $totalGB FreeGB = $freeGB PctFree = $pctFree LastSyncUtc = $_.LastSyncDateTime } } | Sort-Object PctFree | Format-Table -AutoSize Results would look like the following:\nDeviceName UPN Model TotalGB FreeGB PctFree LastSyncUtc ---------- --- ----- ------- ------ ------- ----------- CFD-brad-HNFI4 brad@windowsfromanywhere.com Cloud PC Frontline 4vCPU/16GB/128GB 127.45 88.90 69.80 5/14/2026 7:58:34 PM CFS-Q4L0XGCNSTR Cloud PC Frontline Shared 4vCPU/16GB/128GB 127.45 92.85 72.90 5/15/2026 4:42:12 AM CPC-brad-VO992 brad@windowsfromanywhere.com Cloud PC Enterprise 8vCPU/32GB/256GB 255.45 207.52 81.20 5/14/2026 8:01:37 PM Note Flex Shared with User experience sync enabled devices will not yield accurate results since the user profiles are wiped and then loaded on at login.\nThe lastSyncDateTime column is critical: a Cloud PC that hasn\u0026rsquo;t checked in for a week will show stale storage values. Filter or flag rows whose last sync is older than the customer\u0026rsquo;s reporting tolerance.\nRequired delegated or application permission: DeviceManagementManagedDevices.Read.All.\nHow fresh is the data? # Path Freshness Notes Graph managedDevices Last Intune check-in (~8 hr default for Windows) Force a Sync to refresh; honour lastSyncDateTime Per-user disk projection on Windows 365 Frontline / Flex Shared Cloud PCs # Important The Graph managedDevices approach above answers \u0026ldquo;how full is this Cloud PC right now?\u0026rdquo; It does not answer \u0026ldquo;how big is user X\u0026rsquo;s footprint when they sign in to a shared Cloud PC?\u0026rdquo; On Windows 365 Flex Shared (the SKU formerly known as Frontline shared), the OS volume is a moving target: per windows 365 flex snapshot based reset the disk reverts to a known-good snapshot at sign-out, so any free-space reading is bound to whichever user is currently signed in and is wiped before the next user starts. Per-user visibility on a shared Cloud PC requires a different pipeline.\nConceptual model — what a \u0026ldquo;per-user\u0026rdquo; disk reading means here # A user\u0026rsquo;s effective on-disk consumption when they sign in to a Flex Shared Cloud PC is the sum of three things, none of which freeStorageSpaceInBytes measures on its own:\nThe base OS image footprint — fixed per provisioning policy. Whatever the gallery image plus admin-installed apps consume on a freshly snapshot-reset OS volume. This is the floor for every user on every Cloud PC in the policy. A 128 GB OS disk that boots to the snapshot at 52 GB used has 76 GB headroom before the user logs in. The per-user persistence footprint — what [[cloud-pc-flex-user-experience-sync|User Experience Sync]] (UES) re-attaches at sign-in, drawn from Microsoft-managed pooled storage. This is the only longitudinal per-user value the platform exposes natively. When attached, its contents are projected into C:\\Users\\\u0026lt;upn\u0026gt; and count against the OS volume. Session-time growth — temp files, browser cache, OneDrive hydration of Files On-Demand placeholders, app caches, downloads. This is volatile and disappears on the next snapshot reset, but determines the peak disk pressure during a session. Anything redirected off-box — KFM-redirected Desktop / Documents / Pictures pointing at the user\u0026rsquo;s OneDrive, Edge sync data, Outlook OST stored in User Experience Sync (UES) (or excluded entirely) — does not consume CPC OS-volume capacity at sign-in, but it does drive hydration traffic and may briefly land on disk if the user opens those files. UES explicitly excludes AppData\\Local\\Packages\\*\\AC, SystemAppData, LocalCache, TempState, the identity broker caches, and other non-roamable data, so the persistence container is a settings + user files footprint, not a full profile clone.\nWarning [[cloud-pc-flex-user-experience-sync|UES]] is not [[fslogix-profile-containers|FSLogix]]. The W365 Flex Shared profile model is Microsoft-managed pooled storage attached by the platform; there is no SMB share, no %username%_%sid%.vhdx to enumerate, and no FSLogix container to mount. Direct migration from FSLogix to UES is explicitly not supported. FSLogix remains the [[azure-virtual-desktop|AVD]] multi-session pattern — relevant for parity conversations and for customers who run BYOI configurations, but not for stock W365 Flex Shared. The \u0026ldquo;enumerate VHDX files in the profile share\u0026rdquo; approach customers ask about is an AVD/FSLogix recipe; on W365 the equivalent surface is the UES Graph endpoints below.\nApproach 1 — UES per-user storage via Microsoft Graph (canonical) # The Intune admin center exposes UES per-user storage at Devices → Provision Cloud PCs → Provisioning policies → (policy) → User Storage tab. The same data is available programmatically through two beta Graph endpoints under the policy assignment:\nEndpoint Returns …/cloudPCUserSettingsPersistence/retrieveUserSettingsPersistenceProfileUsage(configurationId='{id}') Pool aggregates: totalAllocatedStorageInGB, usedStorageInGB, remainingAvailableStorageInGB. …/cloudPCUserSettingsPersistence/retrieveUserSettingsPersistenceProfiles(configurationId='{id}') Per-user profiles: userPrincipalName, profileSizeInGB, lastProfileAttachedDateTime, status (connected / notConnected / deleting). profileSizeInGB is the maximum allocated size for the user (the tier picked at policy creation: 4 / 8 / 16 / 32 / 64 GB), not the in-use bytes. The platform does not currently surface a per-user used figure on the persistence profile object — the only \u0026ldquo;used\u0026rdquo; value is the policy-pool aggregate. That is a real gap for capacity planning at the user level; the documented workaround is to inspect C:\\Users\\\u0026lt;upn\u0026gt; size from inside an active session (Approach 4 below) and treat the persistence-tier value as the ceiling.\nBoth endpoints require CloudPC.Read.All and live under /beta. The gracePeriodEndDateTime on cloudPCUserSettingsPersistenceDetail is the cut-off after which the platform auto-evicts the oldest-last-attached profile when the pool is over its limit — useful as a \u0026ldquo;who\u0026rsquo;s about to be auto-cleaned?\u0026rdquo; signal.\n# Requires: Install-Module Microsoft.Graph.Beta -Scope CurrentUser Connect-MgGraph -Scopes \u0026#39;CloudPC.Read.All\u0026#39; $policyId = \u0026#39;\u0026lt;provisioning-policy-id\u0026gt;\u0026#39; $assignmentId = \u0026#39;\u0026lt;assignment-id\u0026gt;\u0026#39; $configId = \u0026#39;\u0026lt;persistence-configuration-id\u0026gt;\u0026#39; # from cloudPCUserSettingsPersistenceDetail $profilesUri = \u0026#34;https://graph.microsoft.com/beta/deviceManagement/virtualEndpoint/\u0026#34; + \u0026#34;provisioningPolicies/$policyId/assignments/$assignmentId/\u0026#34; + \u0026#34;cloudPCUserSettingsPersistence/retrieveUserSettingsPersistenceProfiles\u0026#34; + \u0026#34;(configurationId=\u0026#39;$configId\u0026#39;)\u0026#34; $profiles = (Invoke-MgGraphRequest -Method GET -Uri $profilesUri).value $profiles | Select-Object userPrincipalName, profileSizeInGB, status, @{n=\u0026#39;LastAttached\u0026#39;;e={$_.lastProfileAttachedDateTime}} | Sort-Object LastAttached -Descending | Export-Csv .\\flex-shared-ues-profiles.csv -NoTypeInformation Pair this with the alert rule Windows 365 Flex Cloud PC User Experience Sync Storage Limits under Tenant administration → Cloud PC Alerts so admins are notified before the pool hits its tolerance window.\nApproach 2 — OneDrive quota per user via Graph # Because Flex Shared deployments overwhelmingly pair UES with OneDrive Known Folder Move (UES does not retain Packages\\*\\LocalCache-style caches and the customer guidance is to push Desktop / Documents / Pictures to OneDrive), a meaningful chunk of \u0026ldquo;user data\u0026rdquo; lives off-CPC. Two Graph paths surface it per user:\n# Per-user, real-time Get-MgUserDrive -UserId user@contoso.com | Select-Object @{n=\u0026#39;UPN\u0026#39;;e={\u0026#39;user@contoso.com\u0026#39;}}, @{n=\u0026#39;UsedGB\u0026#39;;e={[math]::Round($_.Quota.Used/1GB,2)}}, @{n=\u0026#39;TotalGB\u0026#39;;e={[math]::Round($_.Quota.Total/1GB,2)}} # Tenant-wide CSV (D7 / D30 / D90 / D180 periods) GET https://graph.microsoft.com/v1.0/reports/getOneDriveUsageAccountDetail(period=\u0026#39;D30\u0026#39;) The CSV returns Owner Principal Name, Storage Used (Byte), Storage Allocated (Byte), File Count, and Last Activity Date — joinable on UPN against the UES profile list to produce a per-user \u0026ldquo;where their data actually lives\u0026rdquo; view.\nApproach 3 — Sign-in correlation via cloudPcAuditEvent + connectivity history # To attribute a particular OS-disk free-space reading to a specific user session, you need a timeline of who was signed in to which Cloud PC when. Two surfaces:\ncloudPcAuditEvent (Graph v1.0) at /deviceManagement/virtualEndpoint/auditEvents — records administrative and lifecycle activities (provision, reprovision, restore, snapshot reset). Useful for marking the boundary at which the OS disk was reset to baseline. [[cloud-pc-connectivity-history-report|User connectivity history report]] — Cloud PC user start/finish connection activities, surfaced in the Intune admin centre under Devices → Cloud PC performance. This is the closest the platform comes to a \u0026ldquo;who was signed in to this CPC at time T?\u0026rdquo; feed for Flex Shared. Joining the connectivity history (user, start, end, Cloud PC ID) to Graph managedDevices.lastSyncDateTime plus the storage values lets you attribute that snapshot of freeStorageSpaceInBytes to that user\u0026rsquo;s session — provided the Intune check-in landed during their connected window.\nApproach 4 — In-session telemetry (KQL) # For customers who ship Cloud PC Perf counters to Log Analytics via the Azure Monitor Agent, DeviceLogonEvents (Defender for Endpoint advanced hunting) joined with the LogicalDisk free-space sample at the same minute attributes the disk reading to the signed-in user:\nlet logons = DeviceLogonEvents | where ActionType == \u0026#34;LogonSuccess\u0026#34; and LogonType in (\u0026#34;Interactive\u0026#34;,\u0026#34;RemoteInteractive\u0026#34;) | project Computer = DeviceName, AccountUpn, LogonTime = Timestamp; let disk = Perf | where ObjectName == \u0026#34;LogicalDisk\u0026#34; and CounterName == \u0026#34;Free Megabytes\u0026#34; and InstanceName == \u0026#34;C:\u0026#34; | project Computer, FreeMB = CounterValue, TimeGenerated; disk | join kind=inner (logons) on Computer | where TimeGenerated between (LogonTime .. LogonTime + 8h) | summarize MinFreeMB = min(FreeMB), MaxFreeMB = max(FreeMB) by Computer, AccountUpn, LogonTime | order by LogonTime desc This is the only path that produces an honest \u0026ldquo;user X drove the disk down to N MB free during their session.\u0026rdquo; It requires AMA + a DCR shipping LogicalDisk(*)\\Free Megabytes and Defender for Endpoint onboarding — see [[microsoft-defender-for-endpoint-on-cloud-pc|MDE on Cloud PC]] for the prereqs.\nApproach 5 — In-session inspection from a remediation script # This is the [[intune-proactive-remediations|Intune Remediations]] path — paired detection + remediation PowerShell scripts shipped through the Intune Management Extension and harvested back via the report or Graph deviceRunStates.\nA scheduled remediation script that runs in the user context on the active Cloud PC can size C:\\Users\\\u0026lt;upn\u0026gt; directly and write the result to the Remediations report. This is the most direct measurement of the user\u0026rsquo;s actual on-disk footprint during a session, but it requires (a) the user to be signed in when the script runs and (b) acceptance that the result is wiped at the next snapshot reset.\n# Detection script — emits per-user used GB for the currently signed-in user $upn = (Get-CimInstance Win32_ComputerSystem).UserName $path = \u0026#34;C:\\Users\\$($env:USERNAME)\u0026#34; $used = (Get-ChildItem $path -Recurse -Force -ErrorAction SilentlyContinue | Measure-Object Length -Sum).Sum \u0026#34;$upn,$([math]::Round($used/1GB,2))\u0026#34; exit 0 Combined per-user projection model # To answer Bradley\u0026rsquo;s framing question — \u0026ldquo;if user X connects to this shared CPC, what does their disk footprint look like?\u0026rdquo; — combine the three independent signals into a projected on-disk consumption value:\nProjectedUsedGB(user) ≈ BaseImageGB(policy) + UES.profileSizeInGB(user) # ceiling, not in-use + ExpectedSessionGrowthGB(user) # rolling avg from Approach 4 + OneDriveHydrationGB(user, files-on-demand cache) ProjectedFreeGB(user) = TotalStorageSpaceInBytes(policy) / 1GB - ProjectedUsedGB(user) In script form, joining Approach 1 and Approach 2 with a fixed base-image figure for the policy:\n# Pseudocode — assumes $profiles from Approach 1 and a $baseImageGB constant per policy $baseImageGB = 52 # measured once on a freshly snapshot-reset Cloud PC for this policy $projection = foreach ($p in $profiles) { $od = Get-MgUserDrive -UserId $p.userPrincipalName -ErrorAction SilentlyContinue [pscustomobject]@{ UPN = $p.userPrincipalName UESCeilingGB = $p.profileSizeInGB OneDriveUsedGB = if ($od) { [math]::Round($od.Quota.Used/1GB,2) } else { 0 } LastAttached = $p.lastProfileAttachedDateTime ProjectedMaxOnDiskGB = $baseImageGB + $p.profileSizeInGB } } $projection | Sort-Object ProjectedMaxOnDiskGB -Descending | Format-Table The result is a ceiling projection — what the OS volume could show in-use if the user fills their UES allotment and pulls a chunk of their OneDrive into the local Files On-Demand cache. Combine with Approach 4\u0026rsquo;s rolling average for a realistic working figure.\nLimitations specific to the Frontline / Flex Shared model # profileSizeInGB is allocation, not usage. The Graph endpoint exposes the tier, not bytes consumed inside the container. For \u0026ldquo;how full is user X\u0026rsquo;s UES storage?\u0026rdquo; the only first-party answer today is the in-session Get-ChildItem C:\\Users\\\u0026lt;upn\u0026gt; measurement; the User Storage tab in Intune likewise shows tier, not in-use. Pool-level visibility is good, per-user used-bytes is not. usedStorageInGB at the pool level is accurate (it backs the alert rule), but it does not decompose to per-user. No cross-policy aggregation. UES pools are scoped per policy assignment. A user on two policies (rare but possible) has two independent containers, neither of which sees the other. Concurrent users on different CPCs in the same pool. Flex Shared is one-user-per-CPC, but a pool of N CPCs can have N users active simultaneously, each with their own UES profile attached on a different VM. Per-user projections must be computed individually; the policy-pool aggregate does not tell you which CPC any given user landed on. Snapshot-reset breaks longitudinal disk trends. A freeStorageSpaceInBytes series on a Flex Shared CPC sawtooths around the snapshot-reset boundary, not the user-session boundary. Use cloudPcAuditEvent for reset events to segment the series. OneDrive Files On-Demand can hydrate unpredictably. A user who opens a 30 GB folder pulls placeholders into local cache; the same user on the next session may show a clean cache. KFM size from Approach 2 is the cloud size, not the currently hydrated on the CPC size. UES excludes the most volatile profile elements. The Packages\\*\\AC / LocalCache / TempState exclusions mean Edge / Teams / Outlook search index growth is a session-time concern but not a UES growth concern. That\u0026rsquo;s good for storage planning and bad for predicting peak in-session disk pressure. Beta endpoints. cloudPCUserSettingsPersistence* lives under /beta and is subject to change. Pin a snapshot of the documented response shape in your tooling and re-verify quarterly. Sov-cloud availability. The persistence endpoints are documented as global service only — not available in US Gov L4 / L5 (DOD) / China-21Vianet at time of writing. Customers in those clouds need a different reporting plan (likely Approach 4 + Approach 5 only). Limitations and gotchas # No native W365 disk report. Setting customer expectations matters — there is no Cloud PC-specific tile to point at. Lead with Graph.\nfreeStorageSpaceInBytes defaults to 0. Per the Graph spec, the default value is 0 if the device has not reported. Treat any zero you see as \u0026ldquo;unknown,\u0026rdquo; not \u0026ldquo;full.\u0026rdquo; Filter rows where lastSyncDateTime is null or where both total and free are zero.\nOS volume only. Both Graph properties measure the system drive. Additional data disks (rare on Cloud PC, more common on AVD-style configurations — see [[avd-os-disk-types]] for context) are not represented.\nSync latency. A user filling their Cloud PC in the last hour will not show the new value until the next Intune check-in. Force a Sync via Intune or a Graph syncDevice action when investigating an active incident.\nRequires Intune enrollment. Cloud PCs that fail to enroll in Intune (rare, usually a provisioning policy + identity issue — see [[cloud-pc-provisioning-errors]]) emit no managedDevice record and therefore no storage values.\nFlex Shared resets the disk. [[windows-365-flex|Windows 365 Flex]] in [[windows-365-flex-shared-mode|shared mode]] runs the [[windows-365-flex-snapshot-based-reset|snapshot-based reset]] on user sign-out, so free-space on a shared-mode Cloud PC reflects only the active session\u0026rsquo;s footprint, not cumulative user storage. Reporting against shared Flex Cloud PCs answers \u0026ldquo;is this session\u0026rsquo;s disk healthy right now?\u0026rdquo;, not \u0026ldquo;is this user storing too much?\u0026rdquo;\nResize doesn\u0026rsquo;t move data. A [[cloud-pc-resize|resize]] that grows the SKU also grows the OS disk. A Cloud PC that was full at 64 GB will report ample free space immediately after resize to 128 GB; trend dashboards spanning the resize need to normalize against totalStorageSpaceInBytes, not absolute free GB.\nFrontline → Flex naming drift. Some Intune surfaces still label shared-mode Cloud PCs as \u0026ldquo;Frontline shared.\u0026rdquo; See [[cloud-pc-frontline-to-flex-rebrand]].\nPrivacy. freeStorageSpaceInBytes is treated as device telemetry, not user-content metadata, but reporting it alongside userPrincipalName does associate a personal usage pattern with an identified user. Apply the customer\u0026rsquo;s normal endpoint-monitoring data-handling rules.\nSources # managedDevice resource type — Microsoft Graph v1.0 windowsManagedDevice resource type — Microsoft Graph v1.0 Cloud PC utilization report — Microsoft Learn Cloud PC Resource performance report — Microsoft Learn DeviceInfo table — Microsoft Defender XDR advanced hunting Use remediations in Microsoft Intune — Microsoft Learn Install the Microsoft Graph PowerShell SDK — Microsoft Learn User Experience Sync for Flex Shared — Microsoft Learn cloudPCUserSettingsPersistenceDetail (beta) — Microsoft Graph cloudPCUserSettingsPersistenceProfile (beta) — Microsoft Graph cloudPCUserSettingsPersistenceUsageResult (beta) — Microsoft Graph retrieveUserSettingsPersistenceProfiles (beta) — Microsoft Graph retrieveUserSettingsPersistenceProfileUsage (beta) — Microsoft Graph Snapshot-based reset for Flex shared Cloud PCs — Microsoft Learn reportRoot: getOneDriveUsageAccountDetail — Microsoft Graph v1.0 cloudPcAuditEvent resource type — Microsoft Graph v1.0 Get Windows 365 audit logs — Microsoft Learn ","date":"15 May 2026","externalUrl":null,"permalink":"/posts/hello-world/","section":"Posts","summary":"Report on Cloud PC free and used disk space","title":"Windows 365 Disk Utilization Reporting","type":"posts"},{"content":"","date":"15 May 2026","externalUrl":null,"permalink":"/","section":"Windows From Anywhere","summary":"","title":"Windows From Anywhere","type":"page"},{"content":"My name is Bradley Wyatt; I am a former 6x Dual Microsoft Most Valuable Professional (MVP) in Microsoft Azure and Micrsoft 365. I am currently a Senior Solutions Engineer at Microsoft.\nThe opinions expressed on this site are not necessarily reflective of the opinions of my employer or of any other companies or employers featured on this website. See my disclaimer page for more information.\nFind me # GitHub: bwya77 LinkedIn: connect with me Email: contact me ","externalUrl":null,"permalink":"/about/","section":"Windows From Anywhere","summary":"About Bradley Wyatt","title":"About","type":"page"},{"content":"","externalUrl":null,"permalink":"/categories/automation/","section":"Categories","summary":"","title":"Automation","type":"categories"},{"content":"","externalUrl":null,"permalink":"/categories/avd/","section":"Categories","summary":"","title":"Azure Virtual Desktop","type":"categories"},{"content":" Personal opinions only # Windows From Anywhere is a personal blog written and maintained by Bradley Wyatt in his individual capacity.\nThe author is currently employed by Microsoft Corporation. Despite covering Microsoft technologies — including Windows 365, Azure Virtual Desktop, Intune, and Entra — nothing on this site is an official Microsoft communication, statement, recommendation, or position. Posts are not reviewed, approved, sponsored, or endorsed by Microsoft.\nViews, opinions, and any errors expressed here are solely the author\u0026rsquo;s own. They do not reflect those of Microsoft, any past or future employer, any client, or any other organization the author is affiliated with.\nUse at your own risk # You are 100% responsible for your own IT environment — your infrastructure, applications, services, configurations, scripts, and documentation. The owners, authors, and contributors of Windows From Anywhere assume no liability and no responsibility for any damage, loss, downtime, security incident, data exposure, or other consequence resulting from use of the information on this site.\nIndependently verify anything you read here against authoritative sources, and always test changes in a non-production environment before deploying to production.\nNo warranty # All content is provided \u0026ldquo;as is\u0026rdquo;, without warranty of any kind, express or implied, including but not limited to warranties of accuracy, completeness, fitness for a particular purpose, or non-infringement.\nSoftware versions, product names, pricing, licensing terms, and feature availability change frequently. Information that was correct at time of writing may be outdated by the time you read it. Always confirm against official Microsoft documentation at https://learn.microsoft.com.\nTrademarks # Microsoft, Windows, Windows 365, Azure, Intune, Entra, and other product names referenced on this site are trademarks of Microsoft Corporation or their respective owners. Use of these names is for identification and editorial purposes only.\nThird-party links # This site may link to third-party websites and resources. Those links are provided for convenience only — the author does not control, endorse, or assume responsibility for their content, accuracy, or practices.\nContact # Questions about this disclaimer? Reach out at brad@windowsfromanywhere.com.\n","externalUrl":null,"permalink":"/disclaimer/","section":"Windows From Anywhere","summary":"Disclaimer for Windows From Anywhere","title":"Disclaimer","type":"page"},{"content":"","externalUrl":null,"permalink":"/categories/entra/","section":"Categories","summary":"","title":"Entra","type":"categories"},{"content":"","externalUrl":null,"permalink":"/categories/intune/","section":"Categories","summary":"","title":"Intune","type":"categories"},{"content":"","externalUrl":null,"permalink":"/categories/meta/","section":"Categories","summary":"","title":"Meta","type":"categories"},{"content":"","externalUrl":null,"permalink":"/categories/graph/","section":"Categories","summary":"","title":"Microsoft Graph","type":"categories"},{"content":"","externalUrl":null,"permalink":"/categories/powershell/","section":"Categories","summary":"","title":"PowerShell","type":"categories"},{"content":"","externalUrl":null,"permalink":"/categories/security/","section":"Categories","summary":"","title":"Security","type":"categories"}]