IntuneManagement 4.0.0-beta1

This commit is contained in:
Mikael Karlsson
2026-09-23 19:13:09 +10:00
commit 7869619510
892 changed files with 577109 additions and 0 deletions
@@ -0,0 +1,145 @@
# Bulk Import form.
# Split out of IntuneManagerUIWPF.ps1 on 2026-06-03 to match the Avalonia tree's
# per-feature layout (architecture rule R9 — keep the WPF shell from growing further).
function Show-GraphBulkImportForm
{
$script:bulkImportForm = $script:UIProvider.GetXamlObject(($script:AppUIRootFolder + "\Xaml\BulkImportForm.xaml"), $true)
if(-not $script:bulkImportForm) { return }
$script:dgObjectsToImport = $script:bulkImportForm.FindName("dgObjectsToImport")
$importSettings = [IntuneManagerImportSettings]::new()
$script:bulkImportForm.DataContext = $importSettings
$script:UIProvider.SetXamlProperty($script:bulkImportForm, "txtImportPath", "Text", $importSettings.ImportFolder)
$script:UIProvider.SetXamlProperty($script:bulkImportForm, "chkImportAssignments", "IsChecked", $importSettings.ImportAssignments)
$script:UIProvider.SetXamlProperty($script:bulkImportForm, "chkImportScopes", "IsChecked", $importSettings.ImportScopeTags)
$script:UIProvider.SetXamlProperty($script:bulkImportForm, "chkReplaceDependencyIDs", "IsChecked", $importSettings.ReplaceDependencyIDs)
$script:UIProvider.SetXamlProperty($script:bulkImportForm, "cbImportType", "ItemsSource", $script:IntuneManagerImportOptions)
$script:UIProvider.SetXamlProperty($script:bulkImportForm, "cbImportType", "SelectedValue", $importSettings.ImportType)
$script:UIProvider.SetXamlProperty($script:bulkImportForm, "lblImportType", "Visibility", "Visible")
$script:UIProvider.SetXamlProperty($script:bulkImportForm, "cbImportType", "Visibility", "Visible")
$script:importObjects = @()
foreach($intuneGroup in $script:IntuneGroups)
{
if(-not $intuneGroup.Title) { continue }
if($intuneGroup.ShowButtons -is [Object[]] -and $intuneGroup.ShowButtons -notcontains "Import") { continue }
$script:importObjects += New-Object PSObject -Property @{
Title = $intuneGroup.Title
Selected = (?? $intuneGroup.BulkImport $true)
ObjectGroup = $intuneGroup
}
$intuneGroup.PolicyTypes | Add-IntuneManagerImportUIExtensions -Form $script:bulkImportForm
}
$column = Get-GridCheckboxColumn "Selected"
$script:dgObjectsToImport.Columns.Add($column)
$column.Header.IsChecked = $true
$column.Header.add_Click({
foreach($Item in $script:dgObjectsToImport.ItemsSource)
{
$Item.Selected = $this.IsChecked
}
$script:dgObjectsToImport.Items.Refresh()
})
$binding = [System.Windows.Data.Binding]::new("Title")
$column = [System.Windows.Controls.DataGridTextColumn]::new()
$column.Header = "Object type"
$column.IsReadOnly = $true
$column.Binding = $binding
$script:dgObjectsToImport.Columns.Add($column)
$script:dgObjectsToImport.ItemsSource = $script:importObjects
if($importSettings.ImportFolder)
{
$migrationInfo, $sameTenant = Get-MigrationTableInfo $importSettings.ImportFolder $script:OrganizationId
$script:UIProvider.SetXamlProperty($script:bulkImportForm, "chkReplaceDependencyIDs", "IsEnabled", ($sameTenant -eq $false))
$script:UIProvider.SetXamlProperty($script:bulkImportForm, "chkReplaceDependencyIDs", "IsChecked", ($sameTenant -eq $false))
$script:UIProvider.SetXamlProperty($script:bulkImportForm, "lblMigrationTableInfo", "Content", $migrationInfo)
}
$script:UIProvider.AddXamlEvent($script:bulkImportForm, "browseImportPath", "add_click", {
$folder = Get-Folder ($script:UIProvider.GetXamlProperty($script:bulkImportForm, "txtImportPath", "Text")) "Select root folder for import"
if($folder)
{
$script:UIProvider.SetXamlProperty($script:bulkImportForm, "txtImportPath", "Text", $folder)
$script:bulkImportForm.DataContext.ImportFolder = $folder
$migrationInfo, $sameTenant = Get-MigrationTableInfo $folder $script:OrganizationId
$script:UIProvider.SetXamlProperty($script:bulkImportForm, "chkReplaceDependencyIDs", "IsEnabled", ($sameTenant -eq $false))
$script:UIProvider.SetXamlProperty($script:bulkImportForm, "chkReplaceDependencyIDs", "IsChecked", ($sameTenant -eq $false))
$script:UIProvider.SetXamlProperty($script:bulkImportForm, "lblMigrationTableInfo", "Content", $migrationInfo)
}
})
$script:UIProvider.AddXamlEvent($script:bulkImportForm, "btnClose", "add_click", {
$script:bulkImportForm = $null
Show-ModalObject
})
$script:UIProvider.AddXamlEvent($script:bulkImportForm, "btnImport", "add_click", {
$importFolder = Expand-FileName ($script:UIProvider.GetXamlProperty($script:bulkImportForm, "txtImportPath", "Text"))
if(-not [IO.Directory]::Exists($importFolder))
{
$script:UIProvider.ShowMessageBox("Import folder not found:`n$importFolder", "Error", "OK", "Error")
return
}
$selectedGroups = @($script:importObjects | Where-Object Selected -eq $true)
if($selectedGroups.Count -eq 0)
{
$script:UIProvider.ShowMessageBox("No object types selected.", "Error", "OK", "Error")
return
}
Save-SettingStoreValue "" "LastUsedRoot" $importFolder
$importType = $script:UIProvider.GetXamlProperty($script:bulkImportForm, "cbImportType", "SelectedValue")
$nameFilter = ($script:UIProvider.GetXamlProperty($script:bulkImportForm, "txtImportNameFilter", "Text")).Trim()
# The UI is a thin caller of the public driver (R10) — the same import
# runs headless via Start-GraphBulkImport, which also persists the
# checkbox settings (the import pipeline reads them via Get-SettingValue)
# and honours the ClearCacheBeforeExportImport setting.
Write-Status "Bulk import" -Block
try
{
$summary = Start-GraphBulkImport -ImportFolder $importFolder -Filter $nameFilter `
-PolicyGroup @($selectedGroups | ForEach-Object { $_.ObjectGroup.ID }) `
-ImportAssignments ([bool]($script:UIProvider.GetXamlProperty($script:bulkImportForm, "chkImportAssignments", "IsChecked"))) `
-ImportScopeTags ([bool]($script:UIProvider.GetXamlProperty($script:bulkImportForm, "chkImportScopes", "IsChecked"))) `
-ReplaceDependencyIDs ([bool]($script:UIProvider.GetXamlProperty($script:bulkImportForm, "chkReplaceDependencyIDs", "IsChecked"))) `
-ImportType $importType
$unknownNote = Get-IntuneUnknownSelectorSummary $summary.UnknownSelectors
if($summary.Imported -eq 0)
{
$msg = "No objects were imported.`nVerify the import folder and exported files."
if($unknownNote) { $msg += "`n`n$unknownNote" }
$script:UIProvider.ShowMessageBox($msg, "Import", "OK", "Warning")
}
else
{
# Success shows no dialog, so a group id that matched nothing gets its own.
if($unknownNote) { $script:UIProvider.ShowMessageBox($unknownNote, "Import", "OK", "Warning") | Out-Null }
Invoke-IntuneActivateObject $script:IntuneManagerSelectedObject | Out-Null
}
}
catch
{
Write-LogError "Bulk import failed" $_.Exception
$script:UIProvider.ShowMessageBox("Bulk import failed:`n`n$($_.Exception.Message)", "Import", "OK", "Error") | Out-Null
}
Write-Status ""
})
$script:UIProvider.ShowModalForm("Bulk Import", $script:bulkImportForm, $true)
}