Public/Show-W365CloudApp.ps1
|
function Show-W365CloudApp { [CmdletBinding()] [OutputType('W365CLI.CloudApp')] param( [ValidateSet('All','Ready','Failed')] [string]$Status = 'All', [switch]$Browse ) begin { Import-W365CliWindowsCloudPC } process { $statusChoice = $Status $items = @(Get-W365CloudAppData -Status $statusChoice | Sort-Object LastPublishedDateTime -Descending) if ($items.Count -eq 0) { Write-Warning 'No cloud apps were returned.' return } $columnHeader = '{0} {1} {2} {3} {4}' -f (Format-W365CliText -Text 'Status' -Width 12), (Format-W365CliText -Text 'Name' -Width 52), (Format-W365CliText -Text 'Publisher' -Width 24), (Format-W365CliText -Text 'Published' -Width 22), (Format-W365CliText -Text 'Added' -Width 22) $title = if ($statusChoice -eq 'All') { 'Windows 365 cloud apps' } else { "Windows 365 cloud apps - $statusChoice" } Select-W365CliObject -InputObject $items -Title $title -DisplayProperties @( 'DisplayName', 'AppStatus', 'Publisher', 'LastPublishedDateTime', 'AddedDateTime' ) -FilterProperties @( 'DisplayName', 'AppStatus', 'AppType', 'Publisher', 'Version', 'DiscoveredAppName' ) -LabelScript { param($App) '{0} {1} {2} {3} {4}' -f (Format-W365CliText -Text $App.AppStatus -Width 12), (Format-W365CliText -Text $App.DisplayName -Width 52), (Format-W365CliText -Text $App.Publisher -Width 24), (Format-W365CliText -Text $App.LastPublishedDateTime -Width 22), (Format-W365CliText -Text $App.AddedDateTime -Width 22) } -DetailScript { param($App) @( "Name: $($App.DisplayName)" "Status: $($App.AppStatus)" "Type: $($App.AppType)" "Publisher: $($App.Publisher)" "Version: $($App.Version)" "Discovered app: $($App.DiscoveredAppName)" "Added: $($App.AddedDateTime)" "Published: $($App.LastPublishedDateTime)" "Description: $($App.Description)" "Cloud app ID: $($App.Id)" ) } -ActionScript { param($App, $Action) Invoke-W365CloudAppAction -CloudApp $App -Action $Action } -ActionLabelsScript { param($App) $isReady = $App.AppStatus -eq 'ready' $isPublished = $App.AppStatus -eq 'published' @( [pscustomobject]@{ Label = 'Publish'; Action = 'Publish'; Disabled = (-not $isReady); Reason = if ($isReady) { $null } else { "status is $($App.AppStatus)" } } [pscustomobject]@{ Label = 'Unpublish'; Action = 'Unpublish'; Disabled = (-not $isPublished); Reason = if ($isPublished) { $null } else { "status is $($App.AppStatus)" } } ) } -SummaryScript { param( [object[]]$AllItems, [object[]]$VisibleItems, [string]$Filter, [int]$SelectedIndex ) $statusSummary = @( $AllItems | Group-Object -Property AppStatus | 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)))" "Status: $statusSummary" $(if ($Filter) { "Search: $Filter" } else { 'Search: none' }) ) } -RefreshScript { @(Get-W365CloudAppData -Status $statusChoice | Sort-Object LastPublishedDateTime -Descending) } -ColumnHeader $columnHeader -PageSize 18 -ViewOnly:$Browse -Breadcrumb @('W365CLI','Cloud Apps',"$statusChoice") } end { } } |