Private/_Menus.ps1
# _Menus.ps1 function Invoke-Menu() { Param( [Parameter(Mandatory = $True)][String]$MenuTitle, [Parameter(Mandatory = $True)][array]$MenuOptions ) if ($MenuOptions.Count -gt 0) { $MaxValue = $MenuOptions.Count - 1 } else { $MaxValue = 0 } $Selection = 0 $EnterPressed = $False $Filter = "" $MasterMenuList = $MenuOptions if (!$VerbosePreference -eq "Continue") { Clear-Host } While ($EnterPressed -eq $False) { Write-Host "$MenuTitle" if ($Filter.Length -gt 0) { $MenuOptions = $MasterMenuList | Where-Object { $_ -match $Filter } } else { $MenuOptions = $MasterMenuList } For ($i = 0; $i -le $MaxValue; $i++) { If ($i -eq $Selection) { Write-Host -BackgroundColor Cyan -ForegroundColor Black "[ $($MenuOptions[$i]) ]" } Else { Write-Host " $($MenuOptions[$i]) " } } $KeyInput = $host.ui.rawui.readkey("NoEcho,IncludeKeyDown").virtualkeycode Switch ($KeyInput) { 13 { $EnterPressed = $True $Selection = $MasterMenuList.IndexOf($MenuOptions[$selection]) Return $Selection if (!$VerbosePreference -eq "Continue") { Clear-Host } break } 38 { If ($Selection -eq 0) { $Selection = $MaxValue } Else { $Selection -= 1 } if (!$VerbosePreference -eq "Continue") { Clear-Host } break } 40 { If ($Selection -eq $MaxValue) { $Selection = 0 } Else { $Selection += 1 } if (!$VerbosePreference -eq "Continue") { Clear-Host } break } 8 { if ($Filter.Length -gt 0) { $Filter = $Filter.Substring(0, $Filter.Length - 1) if (!$VerbosePreference -eq "Continue") { Clear-Host } } else { $Filter = "" if (!$VerbosePreference -eq "Continue") { Clear-Host } } } Default { $Filter += [char]$KeyInput if (!$VerbosePreference -eq "Continue") { Clear-Host } } } } } function Get-MainMenu { param ( ) Set-ToolVariables Set-ProjectVariables if (!$global:devops_projectFile) { $Title = "Power Platform DevOps (No Project Selected)" } else { $Title = "Power Platform DevOps ( $global:devops_OrgName | $global:devops_gitRepo )" Set-Location $global:devops_projectLocation } $global:devops_message = @" Welcome to the Power Platform DevOps tool. version: $global:devops_version (latest available version: $latestVersion) tenant id: $global:devops_TenantID azure subscription: $global:devops_selectedSubscriptionName ($global:devops_selectedSubscription) client id: $global:devops_ClientID azure keyvault: $global:devops_AzureKeyVault "@ [console]::ForegroundColor = "White" if (!$VerbosePreference -eq "Continue") { Clear-Host } Write-Host $global:devops_logo -ForegroundColor Magenta Write-Host $global:devops_message -ForegroundColor White $Repeater = "=" * $Title.Length Write-Host "================ $Title ================" -ForegroundColor White Write-Host "1: Run Pre-requisite checks (Install / Update)." -ForegroundColor (Set-ColourOption $global:devops_configFile.PreReqsComplete) if (($global:devops_configFile.PreReqsComplete -eq "True")) { if (!$global:devops_projectFile.ProjectAdded) { $project = $false Write-Host "2: Create a New Project or Select an Existing One" -ForegroundColor (Set-ColourOption ($project)) } else { $project = $global:devops_projectFile.ProjectAdded Write-Host "2: Create a New Project or Select an Existing One" -ForegroundColor (Set-ColourOption ($project)) Write-Host "3: Configure Source Control ($global:devops_DevOpsProduct) (Org: $global:devops_OrgName | Project: $global:devops_ProjectName | Repo: $global:devops_gitRepo)" -ForegroundColor (Set-ColourOption $global:devops_projectFile.SourceControlConfigured) if ($global:devops_projectFile.SourceControlConfigured -eq "True") { if ($global:devops_ClientID -eq "") { Write-Host "3a: Configure Service Principal (Recommended)" -ForegroundColor Yellow } Write-Host "4: Configure Continuous Deployment (CI/CD Environment: $($global:devops_projectFile.CICDEnvironmentName) | CI/CD URL: $($global:devops_projectFile.CICDEnvironmentURL))" -ForegroundColor (Set-ColourOption $global:devops_projectFile.CICDEnvironmentName) Write-Host "B: Git [B]ranch Management (Branch: $global:devops_Branch)" -ForegroundColor Cyan Write-Host "S: Commit and [S]ync changes to Source Control" -ForegroundColor Cyan Write-Host "V: [V]iew current change log for Source Control" -ForegroundColor Cyan } if (!$global:devops_isDocker -or ($host.Name -match 'Visual Studio Code Host')) { Write-Host "O: [O]pen Project in Visual Studio" -ForegroundColor Cyan Write-Host "D: Open Project in Visual Studio Co[D]e" -ForegroundColor Cyan } Write-Host "A: [A]dd Dataverse Solutions" -ForegroundColor Cyan if ($global:devops_DataverseSolutionsAdded) { Write-Host "M: [M]anage Dataverse Solutions (Export, Unpack, Config Data)" -ForegroundColor Cyan } if ($global:devops_projectFile.CICDEnvironmentName -ne "False") { Write-Host "T: Add Additional Deployment Environment [T]arget" -ForegroundColor Cyan } } } Write-Host "C: Advanced [C]onfiguration Management" -ForegroundColor Yellow if ($global:devops_projectFile.CICDEnvironmentName) { Write-Host "R: [R]un Pipeline Deployment" -ForegroundColor Yellow } Write-Host "U: Check for [U]pdates to Capgemini.PowerPlatform.DevOps" -ForegroundColor Yellow Write-Host "Q: Press 'Q' to quit." -ForegroundColor White Write-Host "=================$Repeater=================" -ForegroundColor White Write-Host "" Write-Host "* (White items still need to be completed)" -ForegroundColor White Write-Host "* (Green items are successful)" -ForegroundColor Green Write-Host "* (Red items have Errors)" -ForegroundColor Red Write-Host "* (Purple items are optional)" -ForegroundColor Magenta Write-Host "* (Blue Items are used for Day-to-Day ALM)" -ForegroundColor Cyan Write-Host "" if ($latestVersion -gt $global:devops_version) { Write-Host "There is a newer version available, please run Update-Module Capgemini.PowerPlatform.DevOps to update" -ForegroundColor Yellow Write-Host "" } } function Get-ConfigMenu { param ( ) $Title = "Power Platform DevOps ($global:devops_projectTitle)" [console]::ForegroundColor = "White" if (!$VerbosePreference -eq "Continue") { Clear-Host } Write-Host $global:devops_logo -ForegroundColor Magenta $Repeater = "=" * $Title.Length Write-Host "================ $Title ================" -ForegroundColor White Write-Host "G: Edit [G]lobal Config File" -ForegroundColor Yellow if ($global:devops_projectFile) { if ($null -ne $global:devops_AzureKeyVault) { $KeyVaultLine = "A: Setup [A]zure KeyVault (currently: $global:devops_AzureKeyVault)" } else { $KeyVaultLine = "A: Setup [A]zure KeyVault" } if ($null -ne $global:devops_ClientID) { $ServicePrincipalLine = "C: [C]onfigure Service Principal (currently: $global:devops_ClientID)" } else { $ServicePrincipalLine = "C: [C]onfigure Service Principal" } Write-Host "P: Edit [P]roject Config File" -ForegroundColor Yellow Write-Host $KeyVaultLine -ForegroundColor Cyan Write-Host $ServicePrincipalLine -ForegroundColor Cyan Write-Host "L: Change Dataverse [L]ogin Account" -ForegroundColor Cyan Write-Host "R: [R]efresh Git Access Token" -ForegroundColor Yellow Write-Host "D: [D]elete Git Auth Config Header (Advanced)" -ForegroundColor Yellow } Write-Host "U: [U]pdate Tooling to latest versions" -ForegroundColor Yellow Write-Host "Z: Clear A[Z]ure Account Cache (Advanced)" -ForegroundColor Yellow Write-Host "Q: Press 'Q' to return to Main Menu." -ForegroundColor White Write-Host "=================$Repeater=================" -ForegroundColor White Write-Host "" } function Get-SolutionMenu { param ( [string]$SolutionName = '' ) [string]$Title = "Dataverse Solution Management ($SolutionName)" [console]::ForegroundColor = "White" if (!$VerbosePreference -eq "Continue") { Clear-Host } Write-Host $global:devops_logo -ForegroundColor Magenta $Repeater = "=" * $Title.Length Write-Host "================ $Title ================" -ForegroundColor White Write-Host "E: [E]xport & Unpack Solution" -ForegroundColor Cyan Write-Host "C: [C]onfiguration Data Create/Edit" -ForegroundColor Yellow Write-Host "D: Export Configuration [D]ata" -ForegroundColor Cyan Write-Host "G: [G]enerate Types" -ForegroundColor Cyan Write-Host "P: Deploy [P]lugins" -ForegroundColor Cyan Write-Host "W: Deploy [W]eb Resources" -ForegroundColor Cyan Write-Host "Q: Press 'Q' to return to Main Menu." -ForegroundColor White Write-Host "=================$Repeater=================" -ForegroundColor White Write-Host "" } function Get-BranchMenu { [string]$Title = "Git Branch Management" [console]::ForegroundColor = "White" if (!$VerbosePreference -eq "Continue") { Clear-Host } Write-Host $global:devops_logo -ForegroundColor Magenta $Repeater = "=" * $Title.Length Write-Host "================ $Title ================" -ForegroundColor White Write-Host "S: [S]elect Branch" -ForegroundColor Cyan Write-Host "C: [C]reate New Branch" -ForegroundColor Yellow Write-Host "U: [U]pdate from another branch" -ForegroundColor Yellow Write-Host "P: [P]ush branch upstream" -ForegroundColor Yellow Write-Host "L: Pull [L]atest changes from remote" -ForegroundColor Yellow Write-Host "Q: Press 'Q' to return to Main Menu." -ForegroundColor White Write-Host "=================$Repeater=================" -ForegroundColor White Write-Host "" } function Get-ToolingMenu { [string]$Title = "Tooling Management" [console]::ForegroundColor = "White" if (!$VerbosePreference -eq "Continue") { Clear-Host } Write-Host $global:devops_logo -ForegroundColor Magenta $Repeater = "=" * $Title.Length Write-Host "================ $Title ================" -ForegroundColor White Write-Host "P: [P]ower Apps CLI" -ForegroundColor Yellow Write-Host "X: [X]rmContext" -ForegroundColor Yellow Write-Host "D: Xrm[D]efinitelyTyped" -ForegroundColor Yellow Write-Host "C: [C]onfiguration Migration Utility" -ForegroundColor Yellow Write-Host "Q: Press 'Q' to return to Main Menu." -ForegroundColor White Write-Host "=================$Repeater=================" -ForegroundColor White Write-Host "" } function Show-SolutionMenu { param ( [string]$SolutionName = '' ) Get-SolutionMenu -SolutionName $SolutionName $solutionSelection = Read-Host "Selection" try { switch ($solutionSelection) { 'E' { try { Invoke-ExportSolution -StartPath $global:devops_projectLocation -SelectedSolution $selectedSolution } catch { Write-Error $_ pause } } 'C' { try { Install-ConfigMigration Write-Host "Launching Configuration Migration Utility..." Write-Host "Please make sure to save the Schema file in $global:devops_projectLocation\$SolutionName\ReferenceData\schema.xml" -ForegroundColor Yellow Write-Host "This path has been placed in your Clipboard to Paste in the Save File Dialog" Set-Clipboard -Value "$global:devops_projectLocation\$SolutionName\ReferenceData\schema.xml" . $env:APPDATA\Capgemini.PowerPlatform.DevOps\ConfigMigration\DataMigrationUtility.exe pause } catch { Write-Error $_ pause } } 'D' { try { Get-ExportDataValid } catch { Write-Error $_ pause } } 'G' { Get-EarlyTypes -StartPath $global:devops_projectLocation -SelectedSolution $selectedSolution } 'P' { try { $CurrentLocation = Get-Location Set-Location $global:devops_projectLocation\$selectedSolution\spkl\ . .\deploy-plugins.bat pause Set-Location $CurrentLocation } catch { Write-Host $_ pause } } 'W' { try { $CurrentLocation = Get-Location Set-Location $global:devops_projectLocation\$selectedSolution\spkl\ . .\deploy-webresources.bat Set-Location $CurrentLocation pause } catch { Write-Host $_ pause } }'Q' { return } } } catch { Write-Host $_ pause } } |