agentid/Get-SponsorsAndOwners.ps1

<#
.SYNOPSIS
Internal function to prompt for and validate sponsors and owners

.DESCRIPTION
Prompts the user for sponsor and owner information when not provided,
ensuring at least one sponsor or owner is specified

.PARAMETER SponsorUserIds
Array of user IDs to set as sponsors

.PARAMETER SponsorGroupIds
Array of group IDs to set as sponsors

.PARAMETER OwnerUserIds
Array of user IDs to set as owners

.OUTPUTS
Hashtable with SponsorUserIds, SponsorGroupIds, and OwnerUserIds arrays
#>

function Get-SponsorsAndOwners {
    [CmdletBinding()]
    param (
        [string[]]$SponsorUserIds,
        [string[]]$SponsorGroupIds,
        [string[]]$OwnerUserIds
    )

    # Check if at least one owner or sponsor is provided, if not prompt for them
    $hasSponsorsOrOwners = (($SponsorUserIds -and $SponsorUserIds.Count -gt 0) -or
        ($SponsorGroupIds -and $SponsorGroupIds.Count -gt 0) -or
        ($OwnerUserIds -and $OwnerUserIds.Count -gt 0))

    if (-not $hasSponsorsOrOwners) {
        # Prompt for sponsor users
        $sponsorUserInput = Read-Host "Enter sponsor user IDs (comma-separated, or press Enter to skip)"
        if ($sponsorUserInput -and $sponsorUserInput.Trim() -ne "") {
            $SponsorUserIds = $sponsorUserInput.Split(',') | ForEach-Object { $_.Trim() } | Where-Object { $_ -ne "" }
        }

        # Prompt for sponsor groups
        $sponsorGroupInput = Read-Host "Enter sponsor group IDs (comma-separated, or press Enter to skip)"
        if ($sponsorGroupInput -and $sponsorGroupInput.Trim() -ne "") {
            $SponsorGroupIds = $sponsorGroupInput.Split(',') | ForEach-Object { $_.Trim() } | Where-Object { $_ -ne "" }
        }

        # Prompt for owner users if no sponsors provided
        if ((-not $SponsorUserIds -or $SponsorUserIds.Count -eq 0) -and
            (-not $SponsorGroupIds -or $SponsorGroupIds.Count -eq 0)) {
            do {
                $ownerUserInput = Read-Host "Enter owner user IDs (comma-separated, required since no sponsors provided)"
                if ($ownerUserInput -and $ownerUserInput.Trim() -ne "") {
                    $OwnerUserIds = $ownerUserInput.Split(',') | ForEach-Object { $_.Trim() } | Where-Object { $_ -ne "" }
                }
            } while (-not $OwnerUserIds -or $OwnerUserIds.Count -eq 0)
        }
        else {
            # Optional owners if sponsors are already provided
            $ownerUserInput = Read-Host "Enter owner user IDs (comma-separated, or press Enter to skip)"
            if ($ownerUserInput -and $ownerUserInput.Trim() -ne "") {
                $OwnerUserIds = $ownerUserInput.Split(',') | ForEach-Object { $_.Trim() } | Where-Object { $_ -ne "" }
            }
        }
    }

    return @{
        SponsorUserIds  = $SponsorUserIds
        SponsorGroupIds = $SponsorGroupIds
        OwnerUserIds    = $OwnerUserIds
    }
}