Public/Show-W365OrganizationSetting.ps1

function Show-W365OrganizationSetting {
    [CmdletBinding()]
    [OutputType('WindowsCloudPC.OrganizationSetting')]
    param(
        [switch]$Browse
    )

    begin {
        Import-W365CliWindowsCloudPC
    }

    process {
        $items = @(Get-CloudPCOrganizationSetting)
        if ($items.Count -eq 0) {
            Write-Warning 'No organization settings were returned.'
            return
        }

        Select-W365CliObject -InputObject $items -Title 'Windows 365 organization settings' -DisplayProperties @(
            'OsVersion',
            'UserAccountType',
            'MEMAutoEnrollEnabled',
            'SingleSignOnEnabled',
            'WindowsLanguage'
        ) -FilterProperties @(
            'OsVersion',
            'UserAccountType',
            'WindowsLanguage'
        ) -LabelScript {
            param($Setting)

            'OS: {0} | User: {1} | MEM auto-enroll: {2} | SSO: {3} | Language: {4}' -f
                $Setting.OsVersion,
                $Setting.UserAccountType,
                $Setting.MEMAutoEnrollEnabled,
                $Setting.SingleSignOnEnabled,
                $Setting.WindowsLanguage
        } -DetailScript {
            param($Setting)

            @(
                "Default OS version: $($Setting.OsVersion)"
                "Default user account: $($Setting.UserAccountType)"
                "MEM auto-enroll: $($Setting.MEMAutoEnrollEnabled)"
                "Single sign-on: $($Setting.SingleSignOnEnabled)"
                "Windows language: $($Setting.WindowsLanguage)"
                "Organization setting ID: $($Setting.Id)"
            )
        } -ActionScript {
            param($Setting, $Action)
            if ($Action -ne 'Update settings') { return }
            $osChoice = Read-W365CliChoice -Prompt 'Default OS version' -Choices @('Keep current','Windows 11','Windows 10') -AllowBack
            if ($osChoice -lt 0) { return }
            $accountChoice = Read-W365CliChoice -Prompt 'Default user account type' -Choices @('Keep current','Standard user','Administrator') -AllowBack
            if ($accountChoice -lt 0) { return }
            $memChoice = Read-W365CliChoice -Prompt 'MEM auto-enrollment' -Choices @('Keep current','Enabled','Disabled') -AllowBack
            if ($memChoice -lt 0) { return }
            $ssoChoice = Read-W365CliChoice -Prompt 'Single sign-on' -Choices @('Keep current','Enabled','Disabled') -AllowBack
            if ($ssoChoice -lt 0) { return }
            $language = Read-Host "Windows language [$($Setting.WindowsLanguage)]"
            $params = @{ PassThru = $true }
            if ($osChoice -eq 1) { $params.OsVersion = 'windows11' } elseif ($osChoice -eq 2) { $params.OsVersion = 'windows10' }
            if ($accountChoice -eq 1) { $params.UserAccountType = 'standardUser' } elseif ($accountChoice -eq 2) { $params.UserAccountType = 'administrator' }
            if ($memChoice -eq 1) { $params.EnableMEMAutoEnroll = $true } elseif ($memChoice -eq 2) { $params.EnableMEMAutoEnroll = $false }
            if ($ssoChoice -eq 1) { $params.EnableSingleSignOn = $true } elseif ($ssoChoice -eq 2) { $params.EnableSingleSignOn = $false }
            if (-not [string]::IsNullOrWhiteSpace($language)) { $params.WindowsLanguage = $language }
            if ($params.Count -eq 1) {
                Write-Warning 'No setting changes selected.'
                [Console]::ReadKey($true) | Out-Null
                return
            }
            Invoke-W365CloudPCConfirmedAction -CloudPC ([pscustomobject]@{ Name = 'Windows 365 organization settings' }) -ActionName 'Update' -TargetType 'organization settings' -Context @{ Params = $params } -PreviewScript {
                param($Target, $Context)
                $updateParams = $Context.Params
                Update-CloudPCOrganizationSetting @updateParams -WhatIf
            } -SubmitScript {
                param($Target, $Context)
                $updateParams = $Context.Params
                Update-CloudPCOrganizationSetting @updateParams -Force
            }
        } -ActionLabels @(
            'Update settings'
        ) -SummaryScript {
            param(
                [object[]]$AllItems,
                [object[]]$VisibleItems,
                [string]$Filter,
                [int]$SelectedIndex
            )

            @(
                "Total: $($AllItems.Count) | Visible: $($VisibleItems.Count)"
                $(if ($Filter) { "Search: $Filter" } else { 'Search: none' })
            )
        } -RefreshScript {
            @(Get-CloudPCOrganizationSetting)
        } -PageSize 3 -ViewOnly:$Browse -Breadcrumb @('W365CLI','Tenant settings','Organization settings')
    }

    end { }
}