Public/Get-GPSetting.ps1
function Get-GPSetting { [CmdLetBinding()] param( [ValidateNotNullOrEmpty()] [Microsoft.GroupPolicy.Gpo[]]$GroupPolicy, [ValidateSet('ExtensionType','Script','DriveMapSetting','SecuritySetting','RegistrySetting','FolderRedirectionSetting')] [String]$Type='ExtensionType' ) begin { $Timer = [System.Diagnostics.Stopwatch]::StartNew() } process { foreach ($GPO in $GroupPolicy) { Write-Verbose -Message "Generating XML report to parse $Type data for GPO $($GPO.DisplayName)" [xml]$GpoXml = $GPO.GenerateReport('Xml') $GpoName = $GpoXml.GPO.Name $CreatedTime = $GpoXml.GPO.CreatedTime $ModifiedTime = $GpoXml.GPO.ModifiedTime switch ($Type) { 'ExtensionType' { foreach ($Extension in $GpoXml.GPO.Computer.ExtensionData.Extension) { [PsCustomObject]@{ Name = $GpoName ConfigurationGroup = 'Computer' CreatedTime = $CreatedTime ModifiedTime = $ModifiedTime ExtensionType = $Extension.Type.Split(":")[1] } } foreach ($Extension in $GpoXml.GPO.User.ExtensionData.Extension) { [PsCustomObject]@{ Name = $GpoName ConfigurationGroup = 'User' CreatedTime = $CreatedTime ModifiedTime = $ModifiedTime ExtensionType = $Extension.Type.Split(":")[1] } } } 'Script' { foreach ($Script in $Gpoxml.GPO.Computer.ExtensionData.Extension.Script ) { if ($Script) { [PsCustomObject]@{ Name = $GpoName ConfigurationGroup = 'Computer' CreatedTime = $CreatedTime ModifiedTime = $ModifiedTime Script = $Script.Command Type = $Script.Type Parameters = $Script.Parameters Order = $Script.Order PSRunOrder = $Script.RunOrder } } } foreach ($Script in $Gpoxml.GPO.User.ExtensionData.Extension.Script ) { if ($Script) { [PsCustomObject]@{ Name = $GpoName ConfigurationGroup = 'User' CreatedTime = $CreatedTime ModifiedTime = $ModifiedTime Script = $Script.Command Type = $Script.Type Parameters = $Script.Parameters Order = $Script.Order PSRunOrder = $Script.RunOrder } } } } 'DriveMapSetting' { foreach ($DriveMapping in $Gpoxml.GPO.Computer.ExtensionData.Extension.DriveMapSettings.Drive.properties ) { if ($DriveMapping) { [PsCustomObject]@{ Name = $GpoName ConfigurationGroup = 'Computer' CreatedTime = $CreatedTime ModifiedTime = $ModifiedTime DriveAction = $DriveMapping.action ThisDrive = $DriveMapping.thisDrive AllDrives = $DriveMapping.allDrives UserName = $DriveMapping.userName Path = $DriveMapping.path Persistent = $DriveMapping.persistent UseLetter = $DriveMapping.useLetter DriveLetter = $DriveMapping.letter } } } foreach ($DriveMapping in $Gpoxml.GPO.User.ExtensionData.Extension.DriveMapSettings.Drive.properties ) { if ($DriveMapping) { [PsCustomObject]@{ Name = $GpoName ConfigurationGroup = 'User' CreatedTime = $CreatedTime ModifiedTime = $ModifiedTime DriveAction = $DriveMapping.action ThisDrive = $DriveMapping.thisDrive AllDrives = $DriveMapping.allDrives UserName = $DriveMapping.userName Path = $DriveMapping.path Persistent = $DriveMapping.persistent UseLetter = $DriveMapping.useLetter DriveLetter = $DriveMapping.letter } } } } 'SecuritySetting' { foreach ($SecuritySetting in $Gpoxml.GPO.Computer.ExtensionData.Extension.SecurityOptions ) { if ($SecuritySetting) { [PsCustomObject]@{ Name = $GpoName ConfigurationGroup = 'Computer' CreatedTime = $CreatedTime ModifiedTime = $ModifiedTime KeyName = $SecuritySetting.KeyName SettingNumber = $SecuritySetting.SettingNumber Display = $SecuritySetting.Display.Name Units = $SecuritySetting.Display.Units } } } foreach ($SecuritySetting in $Gpoxml.GPO.User.ExtensionData.Extension.SecurityOptions ) { if ($SecuritySetting) { [PsCustomObject]@{ Name = $GpoName ConfigurationGroup = 'User' CreatedTime = $CreatedTime ModifiedTime = $ModifiedTime KeyName = $SecuritySetting.KeyName SettingNumber = $SecuritySetting.SettingNumber Display = $SecuritySetting.Display.Name Units = $SecuritySetting.Display.Units } } } } 'RegistrySetting' { foreach ($RegistrySetting in $Gpoxml.Computer.ExtensionData.Extension.Policy ) { if ($RegistrySetting) { $GPORegistrySettingsInfo += [PsCustomObject]@{ Name = $GpoName ConfigurationGroup = 'Computer' CreatedTime = $CreatedTime ModifiedTime = $ModifiedTime PolicyName = $RegistrySetting.Name State = $RegistrySetting.State Supported = $RegistrySetting.Supported } } } foreach ($RegistrySetting in $Gpoxml.User.ExtensionData.Extension.Policy ) { if ($RegistrySetting) { $GPORegistrySettingsInfo += [PsCustomObject]@{ Name = $GpoName ConfigurationGroup = 'User' CreatedTime = $CreatedTime ModifiedTime = $ModifiedTime PolicyName = $RegistrySetting.Name State = $RegistrySetting.State Supported = $RegistrySetting.Supported } } } } 'FolderRedirectionSetting' { try { $KnownFolders = Get-GPKnownFolderId -ErrorAction Stop foreach ($FolderRedirectionSetting in $Gpoxml.Computer.ExtensionData.Extension.Folder ) { if ($FolderRedirectionSetting) { $GPOFolderRedirectionSettingsInfo += [PsCustomObject]@{ Name = $GpoName ConfigurationGroup = 'Computer' CreatedTime = $CreatedTime ModifiedTime = $ModifiedTime Id = $FolderRedirectionSetting.Id DisplayName = $KnownFolders | Where-Object {$_.GUID -eq $FolderRedirectionSetting.Id} | Select-Object -ExpandProperty DisplayName FolderType = $KnownFolders | Where-Object {$_.GUID -eq $FolderRedirectionSetting.Id} | Select-Object -ExpandProperty FolderType DefaultPath = $KnownFolders | Where-Object {$_.GUID -eq $FolderRedirectionSetting.Id} | Select-Object -ExpandProperty DefaultPath DestinationPath = $FolderRedirectionSetting.Location.DestinationPath } } } foreach ($FolderRedirectionSetting in $Gpoxml.User.ExtensionData.Extension.Folder ) { if ($FolderRedirectionSetting) { $GPOFolderRedirectionSettingsInfo += [PsCustomObject]@{ Name = $GpoName ConfigurationGroup = 'User' CreatedTime = $CreatedTime ModifiedTime = $ModifiedTime Id = $FolderRedirectionSetting.Id DisplayName = $KnownFolders | Where-Object {$_.GUID -eq $FolderRedirectionSetting.Id} | Select-Object -ExpandProperty DisplayName FolderType = $KnownFolders | Where-Object {$_.GUID -eq $FolderRedirectionSetting.Id} | Select-Object -ExpandProperty FolderType DefaultPath = $KnownFolders | Where-Object {$_.GUID -eq $FolderRedirectionSetting.Id} | Select-Object -ExpandProperty DefaultPath DestinationPath = $FolderRedirectionSetting.Location.DestinationPath } } } } catch { Write-Warning -Message 'Unable to obtain list of KnownFolders.' } } } # end switch } # end foreach loop } end { Write-Verbose -Message "Completed in $([system.String]::Format("{0}d {1:00}h:{2:00}m:{3:00}s.{4:00}", $Timer.Elapsed.Days, $Timer.Elapsed.Hours, $Timer.Elapsed.Minutes, $Timer.Elapsed.Seconds, $Timer.Elapsed.Milliseconds / 10))" } } |