Public/Show-W365Usage.ps1
|
function Show-W365Usage { [CmdletBinding()] [OutputType('WindowsCloudPC.CloudPCUsage')] param([switch]$Browse) begin { Import-W365CliWindowsCloudPC } process { Clear-Host Write-Host '' Write-Host 'Loading Cloud PC usage...' -ForegroundColor Cyan Write-Host 'This can take a while because real-time status, connectivity history, and Intune inventory may be queried.' -ForegroundColor DarkGray $items = @(Get-W365UsageData) Clear-Host if ($items.Count -eq 0) { Write-Warning 'No usage rows were returned.'; return } $columnHeader = '{0} {1} {2} {3} {4} {5}' -f (Format-W365CliText -Text 'Cloud PC' -Width 34), (Format-W365CliText -Text 'Usage' -Width 12), (Format-W365CliText -Text 'Sign-in' -Width 14), (Format-W365CliText -Text 'Days idle' -Width 10), (Format-W365CliText -Text 'Current user' -Width 34), (Format-W365CliText -Text 'Last active' -Width 22) Select-W365CliObject -InputObject $items -Title 'Windows 365 Cloud PC usage' -DisplayProperties @( 'CloudPcName','UsageStatus','SignInStatus','DaysSinceLastSignIn','CurrentUserUpn','LastActiveTime' ) -FilterProperties @( 'CloudPcName','ProvisioningType','ProvisioningPolicyName','UsageStatus','SignInStatus','AssignedUserUpn','CurrentUserUpn' ) -LabelScript { param($Usage) '{0} {1} {2} {3} {4} {5}' -f (Format-W365CliText -Text $Usage.CloudPcName -Width 34), (Format-W365CliText -Text $Usage.UsageStatus -Width 12), (Format-W365CliText -Text $Usage.SignInStatus -Width 14), (Format-W365CliText -Text $Usage.DaysSinceLastSignIn -Width 10), (Format-W365CliText -Text $Usage.CurrentUserUpn -Width 34), (Format-W365CliText -Text $Usage.LastActiveTime -Width 22) } -DetailScript { param($Usage) $Usage.PSObject.Properties | Where-Object Name -notlike 'Raw*' | ForEach-Object { "{0}: {1}" -f $_.Name, $_.Value } } -ActionScript { param($Usage, $Action) $cloudPc = Resolve-W365CloudPCFromRow -InputObject $Usage if (-not $cloudPc) { Write-Warning 'Could not resolve this usage row back to a Cloud PC.' [Console]::ReadKey($true) | Out-Null return } Invoke-W365CloudPCAction -CloudPC $cloudPc -Action $Action } -ActionLabelsScript { param($Usage) $cloudPc = Resolve-W365CloudPCFromRow -InputObject $Usage if ($cloudPc) { Get-W365CloudPCActionItem -CloudPC $cloudPc } else { @( [pscustomobject]@{ Label = 'Cloud PC actions unavailable'; Action = 'None'; Disabled = $true; Reason = 'could not resolve Cloud PC' } ) } } -SummaryScript { param([object[]]$AllItems,[object[]]$VisibleItems,[string]$Filter,[int]$SelectedIndex) $usageSummary = @($AllItems | Group-Object UsageStatus | Sort-Object Name | ForEach-Object { '{0}: {1}' -f $(if ($_.Name) { $_.Name } else { 'Unknown' }), $_.Count }) -join ' | ' @("Total: $($AllItems.Count) | Visible: $($VisibleItems.Count) | Selected: $([math]::Min($SelectedIndex + 1, [math]::Max($VisibleItems.Count, 1)))","Usage: $usageSummary",$(if ($Filter) { "Search: $Filter" } else { 'Search: none' })) } -RefreshScript { Clear-Host Write-Host '' Write-Host 'Refreshing Cloud PC usage...' -ForegroundColor Cyan $refreshed = @(Get-W365UsageData) Clear-Host $refreshed } -ColumnHeader $columnHeader -PageSize 18 -ViewOnly:$Browse -Breadcrumb @('W365CLI','Reports','Usage') } } |