Public/Start-P1TenantManager.ps1

function Start-P1TenantManager {

[void][System.Reflection.Assembly]::LoadWithPartialName('presentationframework')

[xml]$xaml = Get-Content "$PSScriptRoot\MainWindow.xaml"

$reader=(New-Object System.Xml.XmlNodeReader $xaml)
try {
    $Form=[Windows.Markup.XamlReader]::Load( $reader )
} catch {
    Write-Host "Unable to load Windows.Markup.XamlReader. Double-check syntax and ensure .net is installed."
}

# Store Form Objects In PowerShell
$xaml.SelectNodes("//*[@Name]") | %{Set-Variable -Name ($_.Name) -Value $Form.FindName($_.Name)}

# Close event
$btnExit.Add_Click({$form.Close()})

# Test click event
$btnTest.Add_Click({
    $features = Test-P1Prerequisites
    $prereqDataGrid.ItemsSource = @($features)
})

# Add missing click event
$btnAddMissing.Add_Click({
    $prereqDataGrid.ItemsSource = $null
    $features = Test-P1Prerequisites -Install
    $prereqDataGrid.ItemsSource = @($features)
})

# Test click event
$btnLoad.Add_Click({
    $packages = Get-P1Packages
    $itemsSource = @()
    foreach ($package in $packages) {
        $installedPackage = Get-Package $package.Name
        if ($installedPackage -ne $null) {
            $installedVersion = $installedPackage.Version
        } else {
            $installedVersion = $null
        }
        
        [PSCustomObject]$item = @{
            Name = $package.Name;
            Version = $package.Version;
            InstalledVersion = $installedVersion;
            Install = $false;
        }
        $itemsSource += $item
    }
    $packagesDataGrid.ItemsSource = $itemsSource
})

# Install click event
$btnInstall.Add_Click({
    $itemsSource = $packagesDataGrid.ItemsSource
    foreach ($package in ($itemsSource | Where-Object Install -eq $true)) {
        Install-P1Package $package.Name
    }
})


$Form.ShowDialog() | out-null    
}