Compare commits

..

5 Commits

Author SHA1 Message Date
Przemyslaw Klys edd6dbdfa5 Update 2020-06-29 22:33:51 +02:00
Przemyslaw Klys 9e837d2218 Update WIP 2020-06-29 20:52:38 +02:00
Przemyslaw Klys 9030233e18 Removed dead code 2020-06-28 23:49:07 +02:00
Przemyslaw Klys d02396f591 update 2020-06-28 23:03:36 +02:00
Przemyslaw Klys efb1ddf056 Update 2020-06-28 23:03:00 +02:00
13 changed files with 267 additions and 110 deletions
@@ -1,22 +1,34 @@
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
# Use Save-GPOZaurrFiles -GPOPath $ENV:USERPROFILE\Desktop\GPOExport
$OutputNoTranslation = Invoke-GPOZaurr -GPOPath 'C:\Support\GitHub\GpoZaurr\Ignore\GPOExportTest' -NoTranslation
#$OutputNoTranslation = Invoke-GPOZaurr -GPOPath $Env:UserProfile\Desktop\GPOExport -NoTranslation
#$OutputNoTranslation = Invoke-GPOZaurr -GPOPath 'C:\Support\GitHub\GpoZaurr\Ignore\GPOExportTest' -NoTranslation
$OutputNoTranslation | Format-Table *
<#
New-HTML {
foreach ($GPOCategory in $OutputNoTranslation.Keys) {
New-HTMLTab -Name $GPOCategory {
if ($Output["$GPOCategory"] -is [System.Collections.IDictionary]) {
if ($OutputNoTranslation["$GPOCategory"] -is [System.Collections.IDictionary]) {
foreach ($GpoSettings in $OutputNoTranslation["$GPOCategory"].Keys) {
New-HTMLTab -Name $GpoSettings {
New-HTMLTable -DataTable $OutputNoTranslation[$GPOCategory][$GpoSettings] -ScrollX -DisablePaging -AllProperties -Title $Key
New-HTMLTable -DataTable $OutputNoTranslation[$GPOCategory][$GpoSettings] -ScrollX -DisablePaging -AllProperties -Title $GpoSettings
}
}
} else {
New-HTMLTable -DataTable $OutputNoTranslation[$GPOCategory] -ScrollX -DisablePaging -AllProperties -Title $Key
New-HTMLTable -DataTable $OutputNoTranslation[$GPOCategory] -ScrollX -DisablePaging -AllProperties -Title $GpoSettings
}
}
}
} -Online -ShowHTML -FilePath $Env:UserProfile\Desktop\OutputFromFindGPO-NoTranslationFromDisk.html
} -Online -ShowHTML -FilePath $Env:UserProfile\Desktop\OutputFromFindGPO-NoTranslationFromDisk.html
#>
foreach ($GPOCategory in $OutputNoTranslation.Keys) {
if ($OutputNoTranslation["$GPOCategory"] -is [System.Collections.IDictionary]) {
foreach ($GpoSettings in $OutputNoTranslation["$GPOCategory"].Keys) {
ConvertTo-Excel -DataTable $OutputNoTranslation[$GPOCategory][$GpoSettings] -AllProperties -ExcelWorkSheetName $GpoSettings -FilePath $Env:UserProfile\Desktop\Export\$GpoSettings.xlsx -AutoFilter -AutoFit
}
} else {
ConvertTo-Excel -DataTable $OutputNoTranslation[$GPOCategory][$GpoSettings] -AllProperties -ExcelWorkSheetName $GpoSettings -FilePath $Env:UserProfile\Desktop\Export\$GpoSettings.xlsx -AutoFilter -AutoFit
}
}
+36
View File
@@ -0,0 +1,36 @@
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
#Invoke-GPOZaurr -OutputType Excel, Object, HTML -Open | Format-Table
$Output = Invoke-GPOZaurr -GPOPath $Env:USERPROFILE\Desktop\GPOExport -NoTranslation #| Format-Table
#$Output.Count
<# 4073 files - 212MB / no translation
Days : 0
Hours : 0
Minutes : 0
Seconds : 51
Milliseconds : 756
Ticks : 517566534
TotalDays : 0,000599035340277778
TotalHours : 0,0143768481666667
TotalMinutes : 0,86261089
TotalSeconds : 51,7566534
TotalMilliseconds : 51756,6534
#>
<# 4073 files - 212MB / no translation / But with 2 diff types ($OutputByCategory / $OutputByGPO)
Days : 0
Hours : 0
Minutes : 0
Seconds : 53
Milliseconds : 246
Ticks : 532466109
TotalDays : 0,00061628021875
TotalHours : 0,01479072525
TotalMinutes : 0,887443515
TotalSeconds : 53,2466109
TotalMilliseconds : 53246,6109
#>
@@ -1,6 +1,7 @@
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
$Output = Invoke-GPOZaurr #-NoTranslation
$Output | Format-Table
New-HTML {
foreach ($GPOCategory in $Output.Keys) {
@@ -8,11 +9,11 @@ New-HTML {
if ($Output["$GPOCategory"] -is [System.Collections.IDictionary]) {
foreach ($GpoSettings in $Output["$GPOCategory"].Keys) {
New-HTMLTab -Name $GpoSettings {
New-HTMLTable -DataTable $Output[$GPOCategory][$GpoSettings] -ScrollX -DisablePaging -AllProperties -Title $Key
New-HTMLTable -DataTable $Output[$GPOCategory][$GpoSettings] -ScrollX -DisablePaging -AllProperties -Title $GpoSettings
}
}
} else {
New-HTMLTable -DataTable $Output[$GPOCategory] -ScrollX -DisablePaging -AllProperties -Title $Key
New-HTMLTable -DataTable $Output[$GPOCategory] -ScrollX -DisablePaging -AllProperties -Title $GpoSettings
}
}
}
@@ -1,6 +1,7 @@
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
$Output = Invoke-GPOZaurr -NoTranslation
$Output | Format-Table
New-HTML {
foreach ($GPOCategory in $Output.Keys) {
@@ -8,11 +9,11 @@ New-HTML {
if ($Output["$GPOCategory"] -is [System.Collections.IDictionary]) {
foreach ($GpoSettings in $Output["$GPOCategory"].Keys) {
New-HTMLTab -Name $GpoSettings {
New-HTMLTable -DataTable $Output[$GPOCategory][$GpoSettings] -ScrollX -DisablePaging -AllProperties -Title $Key
New-HTMLTable -DataTable $Output[$GPOCategory][$GpoSettings] -ScrollX -DisablePaging -AllProperties -Title $GpoSettings
}
}
} else {
New-HTMLTable -DataTable $Output[$GPOCategory] -ScrollX -DisablePaging -AllProperties -Title $Key
New-HTMLTable -DataTable $Output[$GPOCategory] -ScrollX -DisablePaging -AllProperties -Title $GpoSettings
}
}
}
@@ -11,11 +11,11 @@ New-HTML {
if ($Output["$GPOCategory"] -is [System.Collections.IDictionary]) {
foreach ($GpoSettings in $Output["$GPOCategory"].Keys) {
New-HTMLTab -Name $GpoSettings {
New-HTMLTable -DataTable $Output[$GPOCategory][$GpoSettings] -ScrollX -DisablePaging -AllProperties -Title $Key
New-HTMLTable -DataTable $Output[$GPOCategory][$GpoSettings] -ScrollX -DisablePaging -AllProperties -Title $GpoSettings
}
}
} else {
New-HTMLTable -DataTable $Output[$GPOCategory] -ScrollX -DisablePaging -AllProperties -Title $Key
New-HTMLTable -DataTable $Output[$GPOCategory] -ScrollX -DisablePaging -AllProperties -Title $GpoSettings
}
}
}
+1 -1
View File
@@ -7,7 +7,7 @@
Description = 'Group Policy Eater is a PowerShell module that aims to gather information about Group Policies but also allows easy fixing for issues that you may expect finding in them.'
FunctionsToExport = 'Add-GPOPermission', 'Add-GPOZaurrPermission', 'Backup-GPOZaurr', 'Get-GPOZaurr', 'Get-GPOZaurrAD', 'Get-GPOZaurrBackupInformation', 'Get-GPOZaurrFiles', 'Get-GPOZaurrLegacyFiles', 'Get-GPOZaurrLink', 'Get-GPOZaurrLinkSummary', 'Get-GPOZaurrOwner', 'Get-GPOZaurrPassword', 'Get-GPOZaurrPermission', 'Get-GPOZaurrPermissionConsistency', 'Get-GPOZaurrSysvol', 'Get-WMIFilter', 'Get-GPOZaurrWMI', 'Invoke-GPOZaurr', 'Invoke-GPOZaurrPermission', 'New-GPOZaurrWMI', 'Remove-GPOPermission', 'Remove-GPOZaurr', 'Remove-GPOZaurrLegacyFiles', 'Remove-GPOZaurrOrphanedSysvolFolders', 'Remove-GPOZaurrPermission', 'Remove-GPOZaurrWMI', 'Repair-GPOZaurrPermissionConsistency', 'Restore-GPOZaurr', 'Save-GPOZaurrFiles', 'Select-GPOTranslation', 'Set-GPOOwner', 'Set-GPOZaurrOwner'
GUID = 'f7d4c9e4-0298-4f51-ad77-e8e3febebbde'
ModuleVersion = '0.0.46'
ModuleVersion = '0.0.47'
PowerShellVersion = '5.1'
PrivateData = @{
PSData = @{
+35
View File
@@ -0,0 +1,35 @@
function ConvertTo-Audit {
[cmdletBinding()]
param(
[Array] $GPOList
)
foreach ($GPOEntry in $GPOList) {
$SuccessAttempts = try { [bool]::Parse($GPOEntry.SuccessAttempts) } catch { $null };
$FailureAttempts = try { [bool]::Parse($GPOEntry.FailureAttempts) } catch { $null };
if ($SuccessAttempts -and $FailureAttempts) {
$Setting = 'Success, Failure'
} elseif ($SuccessAttempts) {
$Setting = 'Success'
} elseif ($FailureAttempts) {
$Setting = 'Failure'
} else {
$Setting = 'No auditing'
}
$CreateGPO = [ordered]@{
DisplayName = $GPOEntry.DisplayName #: WO_SEC_NTLM_Auth_Level
DomainName = $GPOEntry.DomainName #: area1.local
GUID = $GPOEntry.GUID #: 364B095E-C7BF-4CC1-9BFA-393BD38975E5
GpoType = $GPOEntry.GpoType #: Computer
GpoCategory = $GPOEntry.GpoCategory #: SecuritySettings
GpoSettings = $GPOEntry.GpoSettings #: SecurityOptions
Policy = $GPOEntry.Name
Setting = $Setting
SuccessAttempts = $SuccessAttempts
FailureAttempts = $FailureAttempts
}
$CreateGPO['Linked'] = $GPOEntry.Linked #: True
$CreateGPO['LinksCount'] = $GPOEntry.LinksCount #: 1
$CreateGPO['Links'] = $GPOEntry.Links #: area1.local
[PSCustomObject] $CreateGPO
}
}
+37
View File
@@ -0,0 +1,37 @@
function ConvertTo-AuditAlternative {
[cmdletBinding()]
param(
[Array] $GPOList
)
foreach ($GPOEntry in $GPOList) {
$SuccessAttempts = try { [bool]::Parse($GPOEntry.SuccessAttempts) } catch { $null };
$FailureAttempts = try { [bool]::Parse($GPOEntry.FailureAttempts) } catch { $null };
if ($SuccessAttempts -and $FailureAttempts) {
$Setting = 'Success, Failure'
} elseif ($SuccessAttempts) {
$Setting = 'Success'
} elseif ($FailureAttempts) {
$Setting = 'Failure'
} else {
$Setting = 'No auditing'
}
$CreateGPO = [ordered]@{
DisplayName = $GPOEntry.DisplayName #: WO_SEC_NTLM_Auth_Level
DomainName = $GPOEntry.DomainName #: area1.local
GUID = $GPOEntry.GUID #: 364B095E-C7BF-4CC1-9BFA-393BD38975E5
GpoType = $GPOEntry.GpoType #: Computer
GpoCategory = $GPOEntry.GpoCategory #: SecuritySettings
GpoSettings = $GPOEntry.GpoSettings #: SecurityOptions
Policy = $GPOEntry.Name
Setting = $Setting
#SuccessAttempts = $SuccessAttempts
#FailureAttempts = $FailureAttempts
}
$CreateGPO['Linked'] = $GPOEntry.Linked #: True
$CreateGPO['LinksCount'] = $GPOEntry.LinksCount #: 1
$CreateGPO['Links'] = $GPOEntry.Links #: area1.local
[PSCustomObject] $CreateGPO
}
}
+32 -19
View File
@@ -10,26 +10,39 @@
foreach ($GpoType in @('User', 'Computer')) {
if ($GPOOutput.$GpoType.ExtensionData.Extension) {
foreach ($ExtensionType in $GPOOutput.$GpoType.ExtensionData.Extension) {
$GPOSettingTypeSplit = ($ExtensionType.type -split ':')
$KeysToLoop = $ExtensionType | Get-Member -MemberType Properties | Where-Object { $_.Name -notin 'type', $GPOSettingTypeSplit[0] }
foreach ($GpoSettings in $KeysToLoop.Name) {
foreach ($Key in $ExtensionType.$GpoSettings) {
$Template = [ordered] @{
DisplayName = $GPO.DisplayName
DomainName = $GPO.DomainName
GUID = $GPO.Guid
GpoType = $GpoType
GpoCategory = $GPOSettingTypeSplit[1]
GpoSettings = $GpoSettings
# It's possible that one of the ExtensionType records has value null. Weird but happend.
if ($ExtensionType) {
$GPOSettingTypeSplit = ($ExtensionType.type -split ':')
try {
$KeysToLoop = $ExtensionType | Get-Member -MemberType Properties -ErrorAction Stop | Where-Object { $_.Name -notin 'type', $GPOSettingTypeSplit[0] }
} catch {
Write-Warning "Get-XMLStandard - things went sideways $($_.Exception.Message)"
continue
}
foreach ($GpoSettings in $KeysToLoop.Name) {
foreach ($Key in $ExtensionType.$GpoSettings) {
$Template = [ordered] @{
DisplayName = $GPO.DisplayName
DomainName = $GPO.DomainName
GUID = $GPO.Guid
GpoType = $GpoType
GpoCategory = $GPOSettingTypeSplit[1]
GpoSettings = $GpoSettings
}
try {
$Properties = ($Key | Get-Member -MemberType Properties -ErrorAction Stop).Name
} catch {
Write-Warning "Get-XMLStandard - things went sideways 1 $($_.Exception.Message)"
$Properties = $null
}
foreach ($Property in $Properties) {
$Template["$Property"] = $Key.$Property
}
$Template['Linked'] = $LinksInformation.Linked
$Template['LinksCount'] = $LinksInformation.LinksCount
$Template['Links'] = $LinksInformation.Links
[PSCustomObject] $Template
}
$Properties = ($Key | Get-Member -MemberType Properties).Name
foreach ($Property in $Properties) {
$Template["$Property"] = $Key.$Property
}
$Template['Linked'] = $LinksInformation.Linked
$Template['LinksCount'] = $LinksInformation.LinksCount
$Template['Links'] = $LinksInformation.Links
[PSCustomObject] $Template
}
}
}
+16
View File
@@ -7,6 +7,22 @@
ConvertTo-AccountPolicies -GPOList $GPOList
}
}
Audit = [ordered] @{
Category = 'SecuritySettings'
Settings = 'Audit'
#GPOPath = 'Computer Configuration -> Policies -> Windows Settings -> Security Settings -> Account Policies'
Code = {
ConvertTo-Audit -GPOList $GPOList
}
}
AuditAlternative = [ordered] @{
Category = 'SecuritySettings'
Settings = 'Audit'
#GPOPath = 'Computer Configuration -> Policies -> Windows Settings -> Security Settings -> Account Policies'
Code = {
ConvertTo-AuditAlternative -GPOList $GPOList
}
}
Autologon = [ordered] @{
Category = 'RegistrySettings'
Settings = 'RegistrySettings'
+1 -1
View File
@@ -52,7 +52,7 @@
$DomainCN = ConvertFrom-DistinguishedName -DistinguishedName $_.DistinguishedName -ToDomainCN
$GUID = $_.Name -replace '{' -replace '}'
if (($GUID).Length -ne 36) {
Write-Warning "Get-GPOZaurrAD - GPO GUID ($($($GUID -join ' '))) is incorrect. Skipping $($_.DisplayName) / Domain: $($DomainCN)"
Write-Warning "Get-GPOZaurrAD - GPO GUID ($($($GUID.Replace("`n",' ')))) is incorrect. Skipping $($_.DisplayName) / Domain: $($DomainCN)"
} else {
$Output = [ordered]@{ }
$Output['DisplayName'] = $_.DisplayName
+80 -77
View File
@@ -19,9 +19,22 @@
[Parameter(ParameterSetName = 'Default')]
[Parameter(ParameterSetName = 'Local')]
[string] $Splitter = [System.Environment]::NewLine,
[Parameter(ParameterSetName = 'Default')]
[Parameter(ParameterSetName = 'Local')]
[switch] $FullObjects,
[ValidateSet('HTML', 'Object')][string] $OutputType = 'Object'
[Parameter(ParameterSetName = 'Default')]
[Parameter(ParameterSetName = 'Local')]
[ValidateSet('HTML', 'Object', 'Excel')][string[]] $OutputType = 'Object',
[Parameter(ParameterSetName = 'Default')]
[Parameter(ParameterSetName = 'Local')]
[string] $OutputPath,
[Parameter(ParameterSetName = 'Default')]
[Parameter(ParameterSetName = 'Local')]
[switch] $Open
)
if ($Type.Count -eq 0) {
$Type = $Script:GPODitionary.Keys
@@ -56,31 +69,13 @@
[Array] $GPOs = Get-GPOZaurrAD -Forest $Forest -IncludeDomains $IncludeDomains -ExcludeDomains $ExcludeDomains -ExtendedForestInformation $ExtendedForestInformation
}
$Output = [ordered] @{}
foreach ($T in $Type) {
# $Output[$T] = [System.Collections.Generic.List[PSCustomObject]]::new()
}
$OutputByGPO = [ordered] @{}
foreach ($GPO in $GPOs) {
if ($GPOPath) {
$GPOOutput = $GPO.GPOOutput
} else {
[xml] $GPOOutput = Get-GPOReport -Guid $GPO.GUID -Domain $GPO.DomainName -ReportType Xml
}
<#
[PSCustomobject] @{
DisplayName = $GPO.DisplayName
DomainName = $GPO.DomainName
ComputerEnabled = $GPOOutput.GPO.Computer.Enabled
ComputerEmpty = if ($GPOOutput.GPO.Computer.ExtensionData) { $false } else { $true }
ComputerPolicies = $GPOOutput.GPO.Computer.ExtensionData.Name -join ", "
UserEnabled = $GPOOutput.GPO.User.Enabled
UserEmpty = if ($GPOOutput.GPO.User.ExtensionData) { $false } else { $true }
UserPolicies = $GPOOutput.GPO.User.ExtensionData.Name -join ", "
}
#>
#$GPOStoredTypes = Get-XMLGPOTypes -GPOOutput $GPOOutput.GPO
[Array] $Data = Get-XMLStandard -GPO $GPO -GPOOutput $GPOOutput.GPO -Splitter $Splitter -FullObjects:$FullObjects
foreach ($D in $Data) {
if (-not $Output["$($D.GpoCategory)"]) {
@@ -90,68 +85,20 @@
$Output["$($D.GpoCategory)"]["$($D.GpoSettings)"] = [System.Collections.Generic.List[PSCustomObject]]::new()
}
$Output["$($D.GpoCategory)"]["$($D.GpoSettings)"].Add($D)
}
<#
continue
if ($Type -contains 'RegistrySettings') {
[Array] $Data = Get-XMLRegistrySettings -GPO $GPO -GPOOutput $GPOOutput.GPO -Splitter $Splitter -FullObjects:$FullObjects
foreach ($D in $Data) {
$Output['RegistrySettings'].Add($D)
if (-not $OutputByGPO["$($D.DomainName)"]) {
$OutputByGPO["$($D.DomainName)"] = [ordered] @{}
}
}
if ($Type -contains 'RegistryPolicies') {
[Array] $Data = Get-XMLRegistryPolicies -GPO $GPO -GPOOutput $GPOOutput.GPO -Splitter $Splitter -FullObjects:$FullObjects
foreach ($D in $Data) {
$Output['RegistryPolicies'].Add($D)
if (-not $OutputByGPO[$D.DomainName][$D.DisplayName]) {
$OutputByGPO[$D.DomainName][$D.DisplayName] = [System.Collections.Generic.List[PSCustomObject]]::new()
}
$OutputByGPO[$D.DomainName][$D.DisplayName].Add($D)
}
if ($Type -contains 'LocalUsersAndGroups') {
[Array] $Data = Get-XMLLocalUserGroups -GPO $GPO -GPOOutput $GPOOutput.GPO -Splitter $Splitter -FullObjects:$FullObjects
foreach ($D in $Data) {
$Output['LocalUsersAndGroups'].Add($D)
}
}
if ($Type -contains 'AutoLogon') {
[Array] $Data = Get-XMLAutologon -GPO $GPO -GPOOutput $GPOOutput.GPO -Splitter $Splitter -FullObjects:$FullObjects
foreach ($D in $Data) {
$Output['AutoLogon'].Add($D)
}
}
if ($Type -contains 'Scripts') {
[Array] $Data = Get-XMLScripts -GPO $GPO -GPOOutput $GPOOutput.GPO -Splitter $Splitter -FullObjects:$FullObjects
foreach ($D in $Data) {
$Output['Scripts'].Add($D)
}
}
if ($Type -contains 'SoftwareInstallation') {
[Array] $Data = Get-XMLSoftwareInstallation -GPO $GPO -GPOOutput $GPOOutput.GPO -Splitter $Splitter -FullObjects:$FullObjects
foreach ($D in $Data) {
$Output['SoftwareInstallation'].Add($D)
}
}
if ($Type -contains 'SecurityOptions') {
[Array] $Data = Get-XMLSecurityOptions -GPO $GPO -GPOOutput $GPOOutput.GPO -Splitter $Splitter -FullObjects:$FullObjects
foreach ($D in $Data) {
$Output['SecurityOptions'].Add($D)
}
}
if ($Type -contains 'Account') {
[Array] $Data = Get-XMLAccount -GPO $GPO -GPOOutput $GPOOutput.GPO -Splitter $Splitter -FullObjects:$FullObjects
foreach ($D in $Data) {
$Output['Account'].Add($D)
}
}
if ($Type -contains 'SystemServices') {
[Array] $Data = Get-XMLSystemServices -GPO $GPO -GPOOutput $GPOOutput.GPO -Splitter $Splitter -FullObjects:$FullObjects
foreach ($D in $Data) {
$Output['SystemServices'].Add($D)
}
}
#>
}
if ($NoTranslation) {
$Output
if ($OutputType -contains 'Object') {
$OutputByGPO
}
} else {
$TranslatedOutput = [ordered] @{}
foreach ($Report in $Type) {
@@ -168,7 +115,63 @@
$TranslatedOutput[$Report] = Invoke-GPOTranslation -InputData $Output -Category $Category -Settings $Settings -Report $Report
#}
}
$TranslatedOutput
if ($OutputType -contains 'Object') {
$TranslatedOutput
}
}
if ($NoTranslation) {
$SingleSource = $OutputType
} else {
$SingleSource = $TranslatedOutput
}
if ($OutputPath) {
$FolderPath = $OutputPath
} else {
$FolderPath = [io.path]::GetTempPath()
}
if ($OutputType -contains 'HTML') {
$FilePathHTML = [io.path]::Combine($FolderPath, "GPOZaurr-Summary-$((Get-Date).ToString('yyyy-MM-dd_HH_mm_ss')).html")
Write-Warning "Invoke-GPOZaurr - $FilePathHTML"
New-HTML {
foreach ($GPOCategory in $SingleSource.Keys) {
New-HTMLTab -Name $GPOCategory {
if ($SingleSource["$GPOCategory"] -is [System.Collections.IDictionary]) {
foreach ($GpoSettings in $SingleSource["$GPOCategory"].Keys) {
New-HTMLTab -Name $GpoSettings {
if ($SingleSource[$GPOCategory][$GpoSettings].Count -gt 0) {
New-HTMLTable -DataTable $SingleSource[$GPOCategory][$GpoSettings] -ScrollX -DisablePaging -AllProperties -Title $GpoSettings
}
}
}
} else {
if ($SingleSource[$GPOCategory].Count -gt 0) {
New-HTMLTable -DataTable $SingleSource[$GPOCategory] -ScrollX -DisablePaging -AllProperties -Title $GpoSettings
}
}
}
}
} -Online -ShowHTML:$Open.IsPresent -FilePath $FilePathHTML
}
if ($OutputType -contains 'Excel') {
$FilePathExcel = [io.path]::Combine($FolderPath, "GPOZaurr-Summary-$((Get-Date).ToString('yyyy-MM-dd_HH_mm_ss')).xlsx")
Write-Warning "Invoke-GPOZaurr - $FilePathExcel"
foreach ($GPOCategory in $SingleSource.Keys) {
if ($SingleSource["$GPOCategory"] -is [System.Collections.IDictionary]) {
foreach ($GpoSettings in $SingleSource["$GPOCategory"].Keys) {
if ($SingleSource[$GPOCategory][$GpoSettings].Count -gt 0) {
ConvertTo-Excel -DataTable $SingleSource[$GPOCategory][$GpoSettings] -AllProperties -ExcelWorkSheetName $GpoSettings -FilePath $FilePathExcel -AutoFilter -AutoFit -Option Rename
}
}
} else {
if ($SingleSource[$GPOCategory].Count -gt 0) {
ConvertTo-Excel -DataTable $SingleSource[$GPOCategory] -AllProperties -ExcelWorkSheetName $GPOCategory -FilePath $FilePathExcel -AutoFilter -AutoFit -Option Rename
}
}
}
if ($Open) {
Invoke-Item -Path $FilePathExcel
}
}
}
+3
View File
@@ -39,6 +39,9 @@ That's it. Whenever there's a new version, you run the command, and you can enjo
## Changelog
- 0.0.47 - 29.06.2020
- Update to `Get-GPOZaurrAD` for better error reporting
- Updates to `Invoke-GPOZaurr` - still work in progress
- 0.0.46 - 28.06.2020
- Additional protection for `Get-GPOZaurrAD` for CNF duplicates
- Update to `Save-GPOZaurrFiles`