Public/Show-W365ProvisioningPolicy.ps1
|
function Show-W365ProvisioningPolicy { [CmdletBinding()] [OutputType('WindowsCloudPC.ProvisioningPolicy')] param( [switch]$Browse ) begin { Import-W365CliWindowsCloudPC } process { $policies = @(Get-CloudPCProvisioningPolicy | Sort-Object DisplayName) if ($policies.Count -eq 0) { Write-Warning 'No provisioning policies were returned.' return } $title = if ($Browse) { 'Windows 365 provisioning policies' } else { 'Pick a Windows 365 provisioning policy' } $columnHeader = '{0} {1} {2} {3} {4} {5}' -f (Format-W365CliText -Text 'Name' -Width 40), (Format-W365CliText -Text 'Type' -Width 12), (Format-W365CliText -Text 'Image' -Width 28), (Format-W365CliText -Text 'Join' -Width 16), (Format-W365CliText -Text 'SSO' -Width 5), (Format-W365CliText -Text 'Groups' -Width 28) Select-W365CliObject -InputObject $policies -Title $title -DisplayProperties @( 'DisplayName', 'ProvisioningType', 'ImageDisplayName', 'DomainJoinTypes', 'AssignedGroupNames' ) -FilterProperties @( 'DisplayName', 'Description', 'ProvisioningType', 'ImageDisplayName', 'ImageType', 'DomainJoinTypes', 'CloudPcNamingTemplate', 'CloudPcGroupDisplayName', 'AssignedGroupNames' ) -LabelScript { param($Policy) $groups = @($Policy.AssignedGroupNames) -join ', ' '{0} {1} {2} {3} {4} {5}' -f (Format-W365CliText -Text $Policy.DisplayName -Width 40), (Format-W365CliText -Text $Policy.ProvisioningType -Width 12), (Format-W365CliText -Text $Policy.ImageDisplayName -Width 28), (Format-W365CliText -Text $Policy.DomainJoinTypes -Width 16), (Format-W365CliText -Text $Policy.EnableSingleSignOn -Width 5), (Format-W365CliText -Text $groups -Width 28) } -DetailScript { param($Policy) @( "Name: $($Policy.DisplayName)" "Description: $($Policy.Description)" "Provisioning type: $($Policy.ProvisioningType)" "Image: $($Policy.ImageDisplayName)" "Image type: $($Policy.ImageType)" "Domain join: $($Policy.DomainJoinTypes)" "Single sign-on: $($Policy.EnableSingleSignOn)" "Local admin enabled: $($Policy.LocalAdminEnabled)" "Naming template: $($Policy.CloudPcNamingTemplate)" "Cloud PC group: $($Policy.CloudPcGroupDisplayName)" "Managed by: $($Policy.ManagedBy)" "Grace period hours: $($Policy.GracePeriodInHours)" "Assigned groups: $(@($Policy.AssignedGroupNames) -join ', ')" "Policy ID: $($Policy.Id)" ) } -ActionScript { param($Policy, $Action) Invoke-W365ProvisioningPolicyAction -Policy $Policy -Action $Action } -ActionLabels @( 'View Cloud PCs', 'Export', 'Create copy', 'Reprovision policy Cloud PCs', 'Delete' ) -SummaryScript { param( [object[]]$AllItems, [object[]]$VisibleItems, [string]$Filter, [int]$SelectedIndex ) $typeSummary = @( $AllItems | Group-Object -Property ProvisioningType | Sort-Object Name | ForEach-Object { '{0}: {1}' -f $(if ($_.Name) { $_.Name } else { 'Unknown' }), $_.Count } ) -join ' | ' $joinSummary = @( $AllItems | Group-Object -Property DomainJoinTypes | 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)))" "Types: $typeSummary" "Join: $joinSummary" $(if ($Filter) { "Search: $Filter" } else { 'Search: none' }) ) } -RefreshScript { @(Get-CloudPCProvisioningPolicy | Sort-Object DisplayName) } -ColumnHeader $columnHeader -PageSize 18 -ViewOnly:$Browse -Breadcrumb @('W365CLI','Provisioning','Provisioning policies') } end { } } |