mirror of
https://github.com/Micke-K/IntuneManagement.git
synced 2026-09-28 19:05:38 +02:00
IntuneManagement 4.0.0-beta1
This commit is contained in:
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user