3.2.1
This commit is contained in:
249
Extensions/IntuneAssignments.psm1
Normal file
249
Extensions/IntuneAssignments.psm1
Normal file
@@ -0,0 +1,249 @@
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Module for listing Intune assignments
|
||||
|
||||
.DESCRIPTION
|
||||
|
||||
.NOTES
|
||||
Author: Mikael Karlsson
|
||||
#>
|
||||
function Get-ModuleVersion
|
||||
{
|
||||
'1.0.0'
|
||||
}
|
||||
|
||||
function Invoke-InitializeModule
|
||||
{
|
||||
Add-EMToolsViewItem (New-Object PSObject -Property @{
|
||||
Title = "Intune Assignments"
|
||||
Id = "IntuneAssignments"
|
||||
ViewID = "EMTools"
|
||||
Permissons=@("DeviceManagementConfiguration.ReadWrite.All")
|
||||
Icon="DeviceConfiguration"
|
||||
ShowViewItem = { Show-EMToolsIntuneAssignments }
|
||||
})
|
||||
}
|
||||
|
||||
function Show-EMToolsIntuneAssignments
|
||||
{
|
||||
if(-not $script:frmIntuneAssignments)
|
||||
{
|
||||
$script:frmIntuneAssignments = Get-XamlObject ($global:AppRootFolder + "\Xaml\EndpointManagerToolsIntuneAssignments.xaml") #-AddVariables
|
||||
|
||||
if(-not $script:frmIntuneAssignments) { return }
|
||||
|
||||
Add-XamlEvent $script:frmIntuneAssignments "btnBrowseIntuneAssignmentsExportPath" "add_click" ({
|
||||
$folder = Get-Folder (Get-XamlProperty $script:frmIntuneAssignments "txtIntuneAssignmentsExportPath" "Text") "Select root folder for exported files"
|
||||
if($folder)
|
||||
{
|
||||
Set-XamlProperty $script:frmIntuneAssignments "txtIntuneAssignmentsExportPath" "Text" $folder
|
||||
}
|
||||
})
|
||||
|
||||
Add-XamlEvent $script:frmIntuneAssignments "btnGetIntuneAssignments" "add_click" ({
|
||||
$folder = Get-XamlProperty $script:frmIntuneAssignments "txtIntuneAssignmentsExportPath" "Text"
|
||||
if($folder)
|
||||
{
|
||||
Write-Status "Get Intune Assignments"
|
||||
Get-EMIntuneAssignments $folder
|
||||
Write-Status ""
|
||||
}
|
||||
})
|
||||
|
||||
Add-XamlEvent $script:frmIntuneAssignments "btnIntuneAssignmentsCopy" "add_click" ({
|
||||
$script:objAssignments | Select Name, Type, IncludedString, ExcludedString | ConvertTo-Csv -NoTypeInformation | Set-Clipboard
|
||||
})
|
||||
|
||||
Add-XamlEvent $script:frmIntuneAssignments "btnIntuneAssignmentsSave" "add_click" ({
|
||||
|
||||
$dlgSave = New-Object -Typename System.Windows.Forms.SaveFileDialog
|
||||
#$dlgSave.InitialDirectory = Get-SettingValue "IntuneRootFolder" $env:Temp
|
||||
$dlgSave.FileName = $obj.FileName
|
||||
$sf.DefaultExt = "*.csv"
|
||||
$sf.Filter = "CSV (*.csv)|*.csv|All files (*.*)| *.*"
|
||||
if($dlgSave.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK -and $dlgSave.Filename)
|
||||
{
|
||||
$script:objAssignments | Select Name, Type, IncludedString, ExcludedString | ConvertTo-Csv -NoTypeInformation | Out-File -LiteralPath $dlgSave.Filename -Encoding UTF8 -Force
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
$global:grdToolsMain.Children.Clear()
|
||||
$global:grdToolsMain.Children.Add($frmIntuneAssignments)
|
||||
}
|
||||
|
||||
function Get-EMIntuneAssignmentInfo
|
||||
{
|
||||
param($rootDir)
|
||||
|
||||
Write-Status "Gather Export Information"
|
||||
|
||||
$path = "$rootDir\Groups"
|
||||
|
||||
$script:htGroups = @{}
|
||||
|
||||
foreach($file in (Get-Item -path "$path\*.json"))
|
||||
{
|
||||
$graphObj = (ConvertFrom-Json (Get-Content -LiteralPath $file.FullName -Raw))
|
||||
$htGroups.Add($graphObj.Id, $graphObj)
|
||||
}
|
||||
|
||||
$script:fileArr = @()
|
||||
|
||||
foreach($path in [IO.Directory]::EnumerateDirectories($rootDir))
|
||||
{
|
||||
if($path -eq "$rootDir\Groups") { continue }
|
||||
|
||||
foreach($file in (Get-Item -path "$path\*.json" -Exclude @("*_settings.json","*_assignments.json")))
|
||||
{
|
||||
$graphObj = (ConvertFrom-Json (Get-Content -LiteralPath $file.FullName -Raw))
|
||||
|
||||
$obj = New-Object PSObject -Property @{
|
||||
FileName = $file.Name
|
||||
FileInfo = $file
|
||||
Selected = $SelectedStatus
|
||||
Object = $graphObj
|
||||
}
|
||||
|
||||
$script:fileArr += $obj
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function Get-EMIntuneAssignments
|
||||
{
|
||||
param($folder)
|
||||
|
||||
Set-XamlProperty $script:frmIntuneAssignments "dgIntuneAssignments" "ItemsSource" $null
|
||||
|
||||
$folderDI = [IO.DirectoryInfo]$folder
|
||||
if(-not $folderDI.Exists) { return }
|
||||
|
||||
Get-EMIntuneAssignmentInfo $folder
|
||||
|
||||
Write-Status "Collect exported assignments"
|
||||
|
||||
$script:objAssignments = @()
|
||||
|
||||
foreach($fileObj in $script:fileArr)
|
||||
{
|
||||
$obj = New-Object PSObject -Property @{
|
||||
Object = $fileObj.Object
|
||||
Name = $fileObj.Object.DisplayName
|
||||
Type = $null
|
||||
Included = $null
|
||||
Excluded = $null
|
||||
IncludedString = ""
|
||||
ExcludedString = ""
|
||||
}
|
||||
$obj.Included = @()
|
||||
$obj.Excluded = @()
|
||||
if($fileObj.Object.'@OData.Type')
|
||||
{
|
||||
$obj.Type = $fileObj.Object.'@OData.Type'.Split('.')[-1]
|
||||
}
|
||||
else
|
||||
{
|
||||
$obj.Type = $file.Directory.Parent.Name
|
||||
}
|
||||
|
||||
foreach($assignment in $fileObj.Object.assignments)
|
||||
{
|
||||
$assignmentObj = $null
|
||||
$included = $true
|
||||
|
||||
if($assignment.target.'@odata.type' -eq "#microsoft.graph.groupAssignmentTarget" -or
|
||||
$assignment.target.'@odata.type' -eq "#microsoft.graph.exclusionGroupAssignmentTarget")
|
||||
{
|
||||
if($script:htGroups.ContainsKey($assignment.target.groupId))
|
||||
{
|
||||
$assignmentObj = $script:htGroups[$assignment.target.groupId].displayName
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Warning "Could not find a group with ID $($assignment.target.groupId)"
|
||||
}
|
||||
$included = $assignment.target.'@odata.type' -eq "#microsoft.graph.groupAssignmentTarget"
|
||||
}
|
||||
elseif($assignment.target.'@odata.type' -eq "#microsoft.graph.allDevicesAssignmentTarget")
|
||||
{
|
||||
$assignmentObj = "All Devices"
|
||||
}
|
||||
elseif($assignment.target.'@odata.type' -eq "#microsoft.graph.allLicensedUsersAssignmentTarget")
|
||||
{
|
||||
$assignmentObj = "All Users"
|
||||
}
|
||||
|
||||
if($included)
|
||||
{
|
||||
$obj.Included += $assignmentObj
|
||||
}
|
||||
else
|
||||
{
|
||||
$obj.Excluded += $assignmentObj
|
||||
}
|
||||
}
|
||||
$obj.IncludedString = $obj.Included -join ";"
|
||||
$obj.ExcludedString = $obj.Excluded -join ";"
|
||||
|
||||
$script:objAssignments += $obj
|
||||
}
|
||||
|
||||
Add-XamlEvent $script:frmIntuneAssignments "txtIntuneAssignmentsFilter" "Add_LostFocus" ({
|
||||
Invoke-IntueAssignmentFilterBoxChanged $this
|
||||
})
|
||||
|
||||
Add-XamlEvent $script:frmIntuneAssignments "txtIntuneAssignmentsFilter" "Add_GotFocus" ({
|
||||
if($this.Tag -eq "1" -and $this.Text -eq "Filter") { $this.Text = "" }
|
||||
Invoke-IntueAssignmentFilterBoxChanged $this ($script:frmIntuneAssignments.FindName("dgIntuneAssignments"))
|
||||
})
|
||||
|
||||
Add-XamlEvent $script:frmIntuneAssignments "txtIntuneAssignmentsFilter" "Add_TextChanged" ({
|
||||
Invoke-IntueAssignmentFilterBoxChanged $this ($script:frmIntuneAssignments.FindName("dgIntuneAssignments"))
|
||||
})
|
||||
|
||||
Invoke-IntueAssignmentFilterBoxChanged ($script:frmIntuneAssignments.FindName("txtIntuneAssignmentsFilter")) ($script:frmIntuneAssignments.FindName("dgIntuneAssignments"))
|
||||
|
||||
$ocList = [System.Collections.ObjectModel.ObservableCollection[object]]::new(@($script:objAssignments))
|
||||
|
||||
Set-XamlProperty $script:frmIntuneAssignments "dgIntuneAssignments" "ItemsSource" ([System.Windows.Data.CollectionViewSource]::GetDefaultView($ocList))
|
||||
}
|
||||
|
||||
function Invoke-IntueAssignmentFilterBoxChanged
|
||||
{
|
||||
param($txtBox, $dgObject)
|
||||
|
||||
$filter = $null
|
||||
|
||||
if($txtBox.Text.Trim() -eq "" -and $txtBox.IsFocused -eq $false)
|
||||
{
|
||||
$txtBox.FontStyle = "Italic"
|
||||
$txtBox.Tag = 1
|
||||
$txtBox.Text = "Filter"
|
||||
$txtBox.Foreground="Lightgray"
|
||||
}
|
||||
else
|
||||
{
|
||||
if($txtBox.Tag -eq "1" -and $txtBox.Text -eq "Filter" -and $txtBox.IsFocused -eq $false) { return }
|
||||
$txtBox.FontStyle = "Normal"
|
||||
$txtBox.Tag = $null
|
||||
$txtBox.Foreground="Black"
|
||||
$txtBox.Background="White"
|
||||
|
||||
if($txtBox.Text)
|
||||
{
|
||||
$filter = {
|
||||
param ($item)
|
||||
|
||||
return ( $item.Name -match [regex]::Escape($txtBox.Text) -or $item.IncludedString -match [regex]::Escape($txtBox.Text) -or $item.ExcludedString -match [regex]::Escape($txtBox.Text) )
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if($dgObject.ItemsSource -is [System.Windows.Data.ListCollectionView])
|
||||
{
|
||||
# This causes odd behaviour with focus e.g. and item has to be clicked twice to be selected
|
||||
$dgObject.ItemsSource.Filter = $filter
|
||||
$dgObject.ItemsSource.Refresh()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user