mirror of
https://github.com/Micke-K/IntuneManagement.git
synced 2026-09-28 19:05:38 +02:00
101 lines
4.4 KiB
PowerShell
101 lines
4.4 KiB
PowerShell
# Bulk Copy form (ported from the original project's Copy extension).
|
|
# Thin WPF wrapper around the public Start-GraphBulkCopy driver — the UI only
|
|
# collects the two name patterns and the selected policy types (R10).
|
|
|
|
function Show-GraphBulkCopyForm
|
|
{
|
|
$script:bulkCopyForm = $script:UIProvider.GetXamlObject(($script:AppUIRootFolder + "\Xaml\BulkCopy.xaml"), $true)
|
|
if(-not $script:bulkCopyForm) { return }
|
|
|
|
$script:dgBulkCopyObjects = $script:bulkCopyForm.FindName("dgBulkCopyObjects")
|
|
|
|
$script:UIProvider.SetXamlProperty($script:bulkCopyForm, "txtCopyFromPattern", "Text", (Get-SettingStoreValue "Copy" "CopyFromPattern"))
|
|
$script:UIProvider.SetXamlProperty($script:bulkCopyForm, "txtCopyToPattern", "Text", (Get-SettingStoreValue "Copy" "CopyToPattern"))
|
|
|
|
# Rows are policy TYPES (matching the original Bulk Copy, which listed every
|
|
# type in the active view), all selected by default.
|
|
$script:copyObjects = @()
|
|
foreach($intuneType in $script:IntuneTypes)
|
|
{
|
|
if(-not $intuneType.Title) { continue }
|
|
if($intuneType.ShowButtons -is [Object[]] -and $intuneType.ShowButtons -notcontains "Copy") { continue }
|
|
|
|
$script:copyObjects += New-Object PSObject -Property @{
|
|
Title = $intuneType.Title
|
|
Selected = $true
|
|
ObjectType = $intuneType
|
|
}
|
|
}
|
|
$script:copyObjects = @($script:copyObjects | Sort-Object -Property Title)
|
|
|
|
$column = Get-GridCheckboxColumn "Selected"
|
|
$script:dgBulkCopyObjects.Columns.Add($column)
|
|
$column.Header.IsChecked = $true
|
|
$column.Header.add_Click({
|
|
foreach($Item in $script:dgBulkCopyObjects.ItemsSource)
|
|
{
|
|
$Item.Selected = $this.IsChecked
|
|
}
|
|
$script:dgBulkCopyObjects.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:dgBulkCopyObjects.Columns.Add($column)
|
|
|
|
$script:dgBulkCopyObjects.ItemsSource = $script:copyObjects
|
|
|
|
$script:UIProvider.AddXamlEvent($script:bulkCopyForm, "btnClose", "add_click", {
|
|
$script:bulkCopyForm = $null
|
|
Show-ModalObject
|
|
})
|
|
|
|
$script:UIProvider.AddXamlEvent($script:bulkCopyForm, "btnStartCopy", "add_click", {
|
|
$copyFrom = ($script:UIProvider.GetXamlProperty($script:bulkCopyForm, "txtCopyFromPattern", "Text")).Trim()
|
|
$copyTo = ($script:UIProvider.GetXamlProperty($script:bulkCopyForm, "txtCopyToPattern", "Text")).Trim()
|
|
|
|
if(-not $copyFrom -or -not $copyTo)
|
|
{
|
|
$script:UIProvider.ShowMessageBox("Both name patterns must be specified", "Error", "OK", "Error")
|
|
return
|
|
}
|
|
|
|
$selectedTypes = @($script:copyObjects | Where-Object Selected -eq $true)
|
|
if($selectedTypes.Count -eq 0)
|
|
{
|
|
$script:UIProvider.ShowMessageBox("No object types selected.`n`nSelect the types you want to copy.", "Error", "OK", "Error")
|
|
return
|
|
}
|
|
|
|
Save-SettingStoreValue "Copy" "CopyFromPattern" $copyFrom
|
|
Save-SettingStoreValue "Copy" "CopyToPattern" $copyTo
|
|
|
|
Write-Status "Copy objects" -Block
|
|
try
|
|
{
|
|
$summary = Start-GraphBulkCopy -CopyFromPattern $copyFrom -CopyToPattern $copyTo `
|
|
-PolicyType @($selectedTypes | ForEach-Object { $_.ObjectType.Id })
|
|
Write-Status $null
|
|
$msg = ("Copied {0} object(s) across {1} type(s) ({2} skipped because the target name exists) in {3:hh\:mm\:ss}." -f `
|
|
$summary.Copied, $summary.Types, $summary.Skipped, $summary.Duration)
|
|
$unknownNote = Get-IntuneUnknownSelectorSummary $summary.UnknownSelectors
|
|
if($unknownNote) { $msg += "`n`n$unknownNote" }
|
|
$script:UIProvider.ShowMessageBox($msg, "Bulk Copy", "OK", "Information") | Out-Null
|
|
}
|
|
catch
|
|
{
|
|
Write-Status $null
|
|
Write-LogError "Bulk copy failed" $_.Exception
|
|
$script:UIProvider.ShowMessageBox("Bulk copy failed:`n`n$($_.Exception.Message)", "Bulk Copy", "OK", "Error") | Out-Null
|
|
}
|
|
|
|
# Refresh the current view so any copies in the active type show up.
|
|
Invoke-IntuneActivateObject $script:IntuneManagerSelectedObject | Out-Null
|
|
})
|
|
|
|
$script:UIProvider.ShowModalForm("Bulk Copy Objects", $script:bulkCopyForm, $true)
|
|
}
|