mirror of
https://github.com/Micke-K/IntuneManagement.git
synced 2026-09-28 19:05:38 +02:00
146 lines
7.6 KiB
PowerShell
146 lines
7.6 KiB
PowerShell
# 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)
|
|
}
|
|
|