mirror of
https://github.com/EvotecIT/GPOZaurr.git
synced 2026-07-26 20:00:09 +00:00
Compare commits
26 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 3320b26bd4 | |||
| ec91c69673 | |||
| 31e9b3b4d3 | |||
| d7eedc97b9 | |||
| 42d3ba67dc | |||
| cdc9c1cbc5 | |||
| de28c53842 | |||
| be0be57994 | |||
| 652f553e71 | |||
| 5d2a4725f1 | |||
| 4081a5ead1 | |||
| 796c69de37 | |||
| 9929d827f5 | |||
| 4781b91e23 | |||
| 1ca78cf5f5 | |||
| 768e32cf7e | |||
| 0d43c4e809 | |||
| ac4a9bb43d | |||
| 0abde822f5 | |||
| bf3ec81ea6 | |||
| c0d1f4de1c | |||
| 65719b8c4c | |||
| 096e6983c6 | |||
| ea4ef03e4f | |||
| 61ca7fede4 | |||
| 5cc0db1031 |
@@ -1,5 +1,4 @@
|
||||
Clear-Host
|
||||
Import-Module "C:\Users\przemyslaw.klys\OneDrive - Evotec\Support\GitHub\PSPublishModule\PSPublishModule.psd1" -Force
|
||||
|
||||
$Configuration = @{
|
||||
Information = @{
|
||||
@@ -267,7 +266,7 @@ $Configuration = @{
|
||||
RefreshPSD1Only = $false
|
||||
}
|
||||
BuildDocumentation = @{
|
||||
Enable = $false # enables documentation processing
|
||||
Enable = $true # enables documentation processing
|
||||
StartClean = $true # always starts clean
|
||||
UpdateWhenNew = $true # always updates right after new
|
||||
}
|
||||
@@ -277,10 +276,10 @@ $Configuration = @{
|
||||
Verbose = $false
|
||||
}
|
||||
PublishModule = @{ # requires Enable to be on to process all of that
|
||||
Enabled = $true
|
||||
Enabled = $false
|
||||
Prerelease = ''
|
||||
RequireForce = $false
|
||||
GitHub = $true
|
||||
GitHub = $false
|
||||
}
|
||||
}
|
||||
}
|
||||
+12
-1
@@ -1,7 +1,18 @@
|
||||
# GPOZaurr Release History
|
||||
|
||||
## 0.0.152
|
||||
- ℹ️ Improved `Invoke-GPOZaurr` - disable deprecated reports if user doesn't ask for them but asks for all reports to be generated. Those reports are now disabled by default: GPOPermissionsAdministrative,GPOPermissionsRead,GPOPermissionsRoot,GPOPermissionsUnknown
|
||||
- ℹ️ Improved `Invoke-GPOZaurr` SplitReports functionality to start creating HTML reports every report
|
||||
- Add `Export-GPOZaurrContent` to simplify quick export of all XML/HTML reports from GPO
|
||||
|
||||
## 0.0.151 - 2022.07.26
|
||||
- ℹ️ Improved `Invoke-GPOZaurr` by adding `SplitReports` functionality. This will allow you to split the reports into multiple files with a single request.
|
||||
- ℹ️ Improved `Get-GPOZaurrInheritance` with some error handling
|
||||
|
||||
## 0.0.150 - 2021.12.06
|
||||
- ℹ️ Improves `GPOUpdates` report from `Invoke-GPOZaurr` - additional property
|
||||
## 0.0.149 - 2021.12.05
|
||||
- ☑ Improved docs
|
||||
- ℹ️ Improved docs
|
||||
## 0.0.148 - 2021.12.05
|
||||
- ☑ Improved `Invoke-GPOZaurr` - type `GPOOrganizationalUnit` - excludes default redirected computers/users OUs [#30](https://github.com/EvotecIT/GPOZaurr/issues/30)
|
||||
- ☑ Improved `Get-GPOZaurrOrganizationalUnit` - excludes default redirected computers/users OUs as per [#30](https://github.com/EvotecIT/GPOZaurr/issues/30)
|
||||
|
||||
@@ -0,0 +1,73 @@
|
||||
---
|
||||
external help file: GPOZaurr-help.xml
|
||||
Module Name: GPOZaurr
|
||||
online version:
|
||||
schema: 2.0.0
|
||||
---
|
||||
|
||||
# Export-GPOZaurrContent
|
||||
|
||||
## SYNOPSIS
|
||||
Saves GPOs to XML or HTML files.
|
||||
|
||||
## SYNTAX
|
||||
|
||||
```
|
||||
Export-GPOZaurrContent [-FolderOutput] <String> [[-ReportType] <String>] [<CommonParameters>]
|
||||
```
|
||||
|
||||
## DESCRIPTION
|
||||
Saves GPOs to XML or HTML files.
|
||||
|
||||
## EXAMPLES
|
||||
|
||||
### EXAMPLE 1
|
||||
```
|
||||
An example
|
||||
```
|
||||
|
||||
## PARAMETERS
|
||||
|
||||
### -FolderOutput
|
||||
The folder where the GPOs will be saved.
|
||||
|
||||
```yaml
|
||||
Type: String
|
||||
Parameter Sets: (All)
|
||||
Aliases: Path
|
||||
|
||||
Required: True
|
||||
Position: 1
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -ReportType
|
||||
The type of report to generate.
|
||||
Valid values are XML or HTML.
|
||||
Default is XML.
|
||||
|
||||
```yaml
|
||||
Type: String
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
Position: 2
|
||||
Default value: XML
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### CommonParameters
|
||||
This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
|
||||
|
||||
## INPUTS
|
||||
|
||||
## OUTPUTS
|
||||
|
||||
## NOTES
|
||||
General notes
|
||||
|
||||
## RELATED LINKS
|
||||
+105
-103
@@ -8,7 +8,7 @@ schema: 2.0.0
|
||||
# Get-GPOZaurrUpdates
|
||||
|
||||
## SYNOPSIS
|
||||
{{ Fill in the Synopsis }}
|
||||
Gets the list of GPOs created or updated in the last X number of days.
|
||||
|
||||
## SYNTAX
|
||||
|
||||
@@ -26,113 +26,24 @@ Get-GPOZaurrUpdates [-Forest <String>] [-ExcludeDomains <String[]>] [-IncludeDom
|
||||
```
|
||||
|
||||
## DESCRIPTION
|
||||
{{ Fill in the Description }}
|
||||
Gets the list of GPOs created or updated in the last X number of days.
|
||||
|
||||
## EXAMPLES
|
||||
|
||||
### Example 1
|
||||
```powershell
|
||||
PS C:\> {{ Add example code here }}
|
||||
### EXAMPLE 1
|
||||
```
|
||||
Get-GPOZaurrUpdates -DateRange Last14Days -DateProperty WhenCreated, WhenChanged -Verbose -IncludeDomains 'ad.evotec.pl' | Format-List
|
||||
```
|
||||
|
||||
{{ Add example description here }}
|
||||
### EXAMPLE 2
|
||||
```
|
||||
Get-GPOZaurrUpdates -DateRange Last14Days -DateProperty WhenCreated -Verbose | Format-Table
|
||||
```
|
||||
|
||||
## PARAMETERS
|
||||
|
||||
### -DateFrom
|
||||
{{ Fill DateFrom Description }}
|
||||
|
||||
```yaml
|
||||
Type: DateTime
|
||||
Parameter Sets: Dates
|
||||
Aliases:
|
||||
|
||||
Required: True
|
||||
Position: Named
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -DateProperty
|
||||
{{ Fill DateProperty Description }}
|
||||
|
||||
```yaml
|
||||
Type: String[]
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
Accepted values: WhenCreated, WhenChanged
|
||||
|
||||
Required: False
|
||||
Position: Named
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -DateRange
|
||||
{{ Fill DateRange Description }}
|
||||
|
||||
```yaml
|
||||
Type: String
|
||||
Parameter Sets: DateRange
|
||||
Aliases:
|
||||
Accepted values: PastHour, CurrentHour, PastDay, CurrentDay, PastMonth, CurrentMonth, PastQuarter, CurrentQuarter, Last14Days, Last21Days, Last30Days, Last7Days, Last3Days, Last1Days
|
||||
|
||||
Required: True
|
||||
Position: Named
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -DateTo
|
||||
{{ Fill DateTo Description }}
|
||||
|
||||
```yaml
|
||||
Type: DateTime
|
||||
Parameter Sets: Dates
|
||||
Aliases:
|
||||
|
||||
Required: True
|
||||
Position: Named
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -ExcludeDomains
|
||||
{{ Fill ExcludeDomains Description }}
|
||||
|
||||
```yaml
|
||||
Type: String[]
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
Position: Named
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -ExtendedForestInformation
|
||||
{{ Fill ExtendedForestInformation Description }}
|
||||
|
||||
```yaml
|
||||
Type: IDictionary
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
Position: Named
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -Forest
|
||||
{{ Fill Forest Description }}
|
||||
Target different Forest, by default current forest is used
|
||||
|
||||
```yaml
|
||||
Type: String
|
||||
@@ -146,8 +57,24 @@ Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -ExcludeDomains
|
||||
Exclude domain from search, by default whole forest is scanned
|
||||
|
||||
```yaml
|
||||
Type: String[]
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
Position: Named
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -IncludeDomains
|
||||
{{ Fill IncludeDomains Description }}
|
||||
Include only specific domains, by default whole forest is scanned
|
||||
ą
|
||||
|
||||
```yaml
|
||||
Type: String[]
|
||||
@@ -161,16 +88,91 @@ Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -DateFrom
|
||||
Provide a date from which to start the search, by default the last X days are used
|
||||
|
||||
```yaml
|
||||
Type: DateTime
|
||||
Parameter Sets: Dates
|
||||
Aliases:
|
||||
|
||||
Required: True
|
||||
Position: Named
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -DateTo
|
||||
Provide a date to which to end the search, by default the last X days are used
|
||||
|
||||
```yaml
|
||||
Type: DateTime
|
||||
Parameter Sets: Dates
|
||||
Aliases:
|
||||
|
||||
Required: True
|
||||
Position: Named
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -DateRange
|
||||
Provide a date range to search for, by default the last X days are used
|
||||
|
||||
```yaml
|
||||
Type: String
|
||||
Parameter Sets: DateRange
|
||||
Aliases:
|
||||
|
||||
Required: True
|
||||
Position: Named
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -DateProperty
|
||||
Choose a date property.
|
||||
It can be WhenCreated or WhenChanged or both.
|
||||
By default whenCreated is used for comparison purposes
|
||||
|
||||
```yaml
|
||||
Type: String[]
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
Position: Named
|
||||
Default value: WhenCreated
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -ExtendedForestInformation
|
||||
Ability to provide Forest Information from another command to speed up processing
|
||||
|
||||
```yaml
|
||||
Type: IDictionary
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
Position: Named
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### CommonParameters
|
||||
This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
|
||||
|
||||
## INPUTS
|
||||
|
||||
### None
|
||||
|
||||
## OUTPUTS
|
||||
|
||||
### System.Object
|
||||
## NOTES
|
||||
General notes
|
||||
|
||||
## RELATED LINKS
|
||||
|
||||
+17
-1
@@ -15,7 +15,7 @@ Single cmdlet that provides 360 degree overview of Group Policies in Active Dire
|
||||
```
|
||||
Invoke-GPOZaurr [[-Exclusions] <Object>] [-FilePath <String>] [[-Type] <String[]>] [-PassThru] [-HideHTML]
|
||||
[-HideSteps] [-ShowError] [-ShowWarning] [-Forest <String>] [-ExcludeDomains <String[]>]
|
||||
[-IncludeDomains <String[]>] [-Online] [<CommonParameters>]
|
||||
[-IncludeDomains <String[]>] [-Online] [-SplitReports] [<CommonParameters>]
|
||||
```
|
||||
|
||||
## DESCRIPTION
|
||||
@@ -224,6 +224,22 @@ Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -SplitReports
|
||||
Split report into multiple files, one for each report.
|
||||
This can be useful for large domains with huge reports.
|
||||
|
||||
```yaml
|
||||
Type: SwitchParameter
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
Position: Named
|
||||
Default value: False
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### CommonParameters
|
||||
This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
|
||||
|
||||
|
||||
+4
-1
@@ -26,6 +26,9 @@ Provides Backup functionality to Group Policies
|
||||
### [ConvertFrom-CSExtension](ConvertFrom-CSExtension.md)
|
||||
{{ Fill in the Synopsis }}
|
||||
|
||||
### [Export-GPOZaurrContent](Export-GPOZaurrContent.md)
|
||||
Saves GPOs to XML or HTML files.
|
||||
|
||||
### [Find-CSExtension](Find-CSExtension.md)
|
||||
{{ Fill in the Synopsis }}
|
||||
|
||||
@@ -106,7 +109,7 @@ Detects Group Policy missing Authenticated Users permission while not having hig
|
||||
Gets DFSR information from the SYSVOL DFSR
|
||||
|
||||
### [Get-GPOZaurrUpdates](Get-GPOZaurrUpdates.md)
|
||||
{{ Fill in the Synopsis }}
|
||||
Gets the list of GPOs created or updated in the last X number of days.
|
||||
|
||||
### [Get-GPOZaurrWMI](Get-GPOZaurrWMI.md)
|
||||
Get Group Policy WMI filter
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
# This gets the same thing as earlier examples
|
||||
# with a difference where one entry per gpo and all settings for that GPO is stored under settings property.
|
||||
$Output = Invoke-GPOZaurrContent -SingleObject -Verbose
|
||||
$Output = Invoke-GPOZaurrContent -Verbose #-SingleObject -Verbose
|
||||
$Output | Format-Table
|
||||
$Output.Reports.RegistrySettings | Format-Table *
|
||||
$Output.Reports.RegistrySettings[0].Settings | Format-Table *
|
||||
@@ -1,4 +1,4 @@
|
||||
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
|
||||
|
||||
$Output = Invoke-GPOZaurrContent -Verbose -OutputType HTML, Object -Open -GPOPath "C:\Support\GitHub\GpoZaurr\Ignore\NewExamples" ##-Type LocalGroups
|
||||
$Output = Invoke-GPOZaurrContent -SingleObject -Verbose -OutputType HTML, Object -Open -GPOPath "C:\Users\przemyslaw.klys\OneDrive - Evotec\Desktop\Test"
|
||||
$Output | Format-Table
|
||||
@@ -1,3 +1,3 @@
|
||||
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
|
||||
|
||||
Invoke-GPOZaurr -Type GPOUpdates -Online -Verbose #-IncludeDomains 'ad.evotec.pl'
|
||||
Invoke-GPOZaurr -Online -Verbose -FilePath $PSScriptRoot\Reports\GPOZaurr.html -SplitReports
|
||||
@@ -0,0 +1,3 @@
|
||||
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
|
||||
|
||||
Export-GPOZaurrContent -FolderOutput $PSScriptRoot\ExportedXML -ReportType XML
|
||||
+6
-6
@@ -4,11 +4,11 @@
|
||||
CmdletsToExport = @()
|
||||
CompanyName = 'Evotec'
|
||||
CompatiblePSEditions = @('Desktop')
|
||||
Copyright = '(c) 2011 - 2021 Przemyslaw Klys @ Evotec. All rights reserved.'
|
||||
Copyright = '(c) 2011 - 2022 Przemyslaw Klys @ Evotec. All rights reserved.'
|
||||
Description = 'Group Policy Eater is a PowerShell module that aims to gather information about Group Policies but also allows fixing issues that you may find in them.'
|
||||
FunctionsToExport = @('Add-GPOPermission', 'Add-GPOZaurrPermission', 'Backup-GPOZaurr', 'Clear-GPOZaurrSysvolDFSR', 'ConvertFrom-CSExtension', 'Find-CSExtension', 'Get-GPOZaurr', 'Get-GPOZaurrAD', 'Get-GPOZaurrBackupInformation', 'Get-GPOZaurrBroken', 'Get-GPOZaurrBrokenLink', 'Get-GPOZaurrDictionary', 'Get-GPOZaurrDuplicateObject', 'Get-GPOZaurrFiles', 'Get-GPOZaurrFilesPolicyDefinition', 'Get-GPOZaurrFolders', 'Get-GPOZaurrInheritance', 'Get-GPOZaurrLegacyFiles', 'Get-GPOZaurrLink', 'Get-GPOZaurrLinkSummary', 'Get-GPOZaurrNetLogon', 'Get-GPOZaurrOrganizationalUnit', 'Get-GPOZaurrOwner', 'Get-GPOZaurrPassword', 'Get-GPOZaurrPermission', 'Get-GPOZaurrPermissionAnalysis', 'Get-GPOZaurrPermissionConsistency', 'Get-GPOZaurrPermissionIssue', 'Get-GPOZaurrPermissionRoot', 'Get-GPOZaurrPermissionSummary', 'Get-GPOZaurrSysvolDFSR', 'Get-GPOZaurrUpdates', 'Get-GPOZaurrWMI', 'Invoke-GPOZaurr', 'Invoke-GPOZaurrContent', 'Invoke-GPOZaurrPermission', 'Invoke-GPOZaurrSupport', 'New-GPOZaurrWMI', 'Optimize-GPOZaurr', 'Remove-GPOPermission', 'Remove-GPOZaurr', 'Remove-GPOZaurrBroken', 'Remove-GPOZaurrDuplicateObject', 'Remove-GPOZaurrFolders', 'Remove-GPOZaurrLegacyFiles', 'Remove-GPOZaurrLinkEmptyOU', 'Remove-GPOZaurrPermission', 'Remove-GPOZaurrWMI', 'Repair-GPOZaurrBrokenLink', 'Repair-GPOZaurrNetLogonOwner', 'Repair-GPOZaurrPermission', 'Repair-GPOZaurrPermissionConsistency', 'Restore-GPOZaurr', 'Save-GPOZaurrFiles', 'Set-GPOOwner', 'Set-GPOZaurrOwner', 'Set-GPOZaurrStatus', 'Skip-GroupPolicy')
|
||||
FunctionsToExport = @('Add-GPOPermission', 'Add-GPOZaurrPermission', 'Backup-GPOZaurr', 'Clear-GPOZaurrSysvolDFSR', 'ConvertFrom-CSExtension', 'Export-GPOZaurrContent', 'Find-CSExtension', 'Get-GPOZaurr', 'Get-GPOZaurrAD', 'Get-GPOZaurrBackupInformation', 'Get-GPOZaurrBroken', 'Get-GPOZaurrBrokenLink', 'Get-GPOZaurrDictionary', 'Get-GPOZaurrDuplicateObject', 'Get-GPOZaurrFiles', 'Get-GPOZaurrFilesPolicyDefinition', 'Get-GPOZaurrFolders', 'Get-GPOZaurrInheritance', 'Get-GPOZaurrLegacyFiles', 'Get-GPOZaurrLink', 'Get-GPOZaurrLinkSummary', 'Get-GPOZaurrNetLogon', 'Get-GPOZaurrOrganizationalUnit', 'Get-GPOZaurrOwner', 'Get-GPOZaurrPassword', 'Get-GPOZaurrPermission', 'Get-GPOZaurrPermissionAnalysis', 'Get-GPOZaurrPermissionConsistency', 'Get-GPOZaurrPermissionIssue', 'Get-GPOZaurrPermissionRoot', 'Get-GPOZaurrPermissionSummary', 'Get-GPOZaurrSysvolDFSR', 'Get-GPOZaurrUpdates', 'Get-GPOZaurrWMI', 'Invoke-GPOZaurr', 'Invoke-GPOZaurrContent', 'Invoke-GPOZaurrPermission', 'Invoke-GPOZaurrSupport', 'New-GPOZaurrWMI', 'Optimize-GPOZaurr', 'Remove-GPOPermission', 'Remove-GPOZaurr', 'Remove-GPOZaurrBroken', 'Remove-GPOZaurrDuplicateObject', 'Remove-GPOZaurrFolders', 'Remove-GPOZaurrLegacyFiles', 'Remove-GPOZaurrLinkEmptyOU', 'Remove-GPOZaurrPermission', 'Remove-GPOZaurrWMI', 'Repair-GPOZaurrBrokenLink', 'Repair-GPOZaurrNetLogonOwner', 'Repair-GPOZaurrPermission', 'Repair-GPOZaurrPermissionConsistency', 'Restore-GPOZaurr', 'Save-GPOZaurrFiles', 'Set-GPOOwner', 'Set-GPOZaurrOwner', 'Set-GPOZaurrStatus', 'Skip-GroupPolicy')
|
||||
GUID = 'f7d4c9e4-0298-4f51-ad77-e8e3febebbde'
|
||||
ModuleVersion = '0.0.149'
|
||||
ModuleVersion = '0.0.152'
|
||||
PowerShellVersion = '5.1'
|
||||
PrivateData = @{
|
||||
PSData = @{
|
||||
@@ -18,15 +18,15 @@
|
||||
}
|
||||
}
|
||||
RequiredModules = @(@{
|
||||
ModuleVersion = '0.0.214'
|
||||
ModuleVersion = '0.0.243'
|
||||
ModuleName = 'PSSharedGoods'
|
||||
Guid = 'ee272aa8-baaa-4edf-9f45-b6d6f7d844fe'
|
||||
}, @{
|
||||
ModuleVersion = '0.0.138'
|
||||
ModuleVersion = '0.0.149'
|
||||
ModuleName = 'ADEssentials'
|
||||
Guid = '9fc9fd61-7f11-4f4b-a527-084086f1905f'
|
||||
}, @{
|
||||
ModuleVersion = '0.0.163'
|
||||
ModuleVersion = '0.0.177'
|
||||
ModuleName = 'PSWriteHTML'
|
||||
Guid = 'a7bdf640-f5cb-4acf-9de0-365b322d245c'
|
||||
}, 'CimCmdlets', 'Microsoft.PowerShell.Management', 'Microsoft.PowerShell.Utility', 'Microsoft.PowerShell.Security')
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
$GPOZaurrPermissionsAdministrative = [ordered] @{
|
||||
Name = 'Group Policy Administrative Permissions'
|
||||
Enabled = $true
|
||||
Enabled = $false
|
||||
Action = $null
|
||||
Data = $null
|
||||
Execute = {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
$GPOZaurrPermissionsRead = [ordered] @{
|
||||
Name = 'Group Policy Authenticated Users Permissions'
|
||||
Enabled = $true
|
||||
Enabled = $false
|
||||
Action = $null
|
||||
Data = $null
|
||||
Execute = {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
$GPOZaurrPermissionsRoot = [ordered] @{
|
||||
Name = 'Group Policies Root Permissions'
|
||||
Enabled = $true
|
||||
Enabled = $false
|
||||
Action = $null
|
||||
Data = $null
|
||||
Execute = {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
$GPOZaurrPermissionsUnknown = [ordered] @{
|
||||
Name = 'Group Policy Unknown Permissions'
|
||||
Enabled = $true
|
||||
Enabled = $false
|
||||
Action = $null
|
||||
Data = $null
|
||||
Execute = {
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
function New-HTMLReportAll {
|
||||
[CmdletBinding()]
|
||||
param(
|
||||
[string] $FilePath,
|
||||
[switch] $Online,
|
||||
[switch] $HideHTML,
|
||||
[Array] $Type
|
||||
)
|
||||
# Standard reports as requested
|
||||
Write-Color -Text '[i]', '[HTML ] ', "Generating HTML report ($FilePath)" -Color Yellow, DarkGray, Yellow
|
||||
New-HTML -Author 'Przemysław Kłys @ Evotec' -TitleText 'GPOZaurr Report' {
|
||||
New-HTMLTabStyle -BorderRadius 0px -TextTransform capitalize -BackgroundColorActive SlateGrey
|
||||
New-HTMLSectionStyle -BorderRadius 0px -HeaderBackGroundColor Grey -RemoveShadow
|
||||
New-HTMLPanelStyle -BorderRadius 0px
|
||||
New-HTMLTableOption -DataStore JavaScript -BoolAsString -ArrayJoinString ', ' -ArrayJoin
|
||||
|
||||
New-HTMLHeader {
|
||||
New-HTMLSection -Invisible {
|
||||
New-HTMLSection {
|
||||
New-HTMLText -Text "Report generated on $(Get-Date)" -Color Blue
|
||||
} -JustifyContent flex-start -Invisible
|
||||
New-HTMLSection {
|
||||
New-HTMLText -Text "GPOZaurr - $($Script:Reporting['Version'])" -Color Blue
|
||||
} -JustifyContent flex-end -Invisible
|
||||
}
|
||||
}
|
||||
|
||||
if ($Type.Count -eq 1) {
|
||||
foreach ($T in $Script:GPOConfiguration.Keys) {
|
||||
if ($Script:GPOConfiguration[$T].Enabled -eq $true) {
|
||||
if ($Script:GPOConfiguration[$T]['Summary']) {
|
||||
$Script:Reporting[$T]['Summary'] = Invoke-Command -ScriptBlock $Script:GPOConfiguration[$T]['Summary']
|
||||
}
|
||||
& $Script:GPOConfiguration[$T]['Solution']
|
||||
}
|
||||
}
|
||||
} else {
|
||||
foreach ($T in $Script:GPOConfiguration.Keys) {
|
||||
if ($Script:GPOConfiguration[$T].Enabled -eq $true) {
|
||||
if ($Script:GPOConfiguration[$T]['Summary']) {
|
||||
$Script:Reporting[$T]['Summary'] = Invoke-Command -ScriptBlock $Script:GPOConfiguration[$T]['Summary']
|
||||
}
|
||||
New-HTMLTab -Name $Script:GPOConfiguration[$T]['Name'] {
|
||||
& $Script:GPOConfiguration[$T]['Solution']
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} -Online:$Online.IsPresent -ShowHTML:(-not $HideHTML) -FilePath $FilePath
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
function New-HTMLReportWithSplit {
|
||||
[cmdletBinding()]
|
||||
param(
|
||||
[string] $FilePath,
|
||||
[switch] $Online,
|
||||
[switch] $HideHTML,
|
||||
[string] $CurrentReport
|
||||
)
|
||||
|
||||
# Split reports into multiple files for easier viewing
|
||||
$DateName = $(Get-Date -f yyyy-MM-dd_HHmmss)
|
||||
$FileName = [io.path]::GetFileNameWithoutExtension($FilePath)
|
||||
$DirectoryName = [io.path]::GetDirectoryName($FilePath)
|
||||
foreach ($T in $Script:GPOConfiguration.Keys) {
|
||||
$NewFileName = $FileName + '_' + $T + "_" + $DateName + '.html'
|
||||
$FilePath = [io.path]::Combine($DirectoryName, $NewFileName)
|
||||
|
||||
# we execute only if enabled and current report not given which means there's a single report to run
|
||||
# or if current report is given and it matches the current report type which works for split reprots
|
||||
if ($Script:GPOConfiguration[$T].Enabled -eq $true -and ((-not $CurrentReport) -or ($CurrentReport -and $CurrentReport -eq $T))) {
|
||||
Write-Color -Text '[i]', '[HTML ] ', "Generating HTML report ($FilePath) for $T with split reports" -Color Yellow, DarkGray, Yellow
|
||||
New-HTML -Author 'Przemysław Kłys' -TitleText 'GPOZaurr Report' {
|
||||
New-HTMLTabStyle -BorderRadius 0px -TextTransform capitalize -BackgroundColorActive SlateGrey
|
||||
New-HTMLSectionStyle -BorderRadius 0px -HeaderBackGroundColor Grey -RemoveShadow
|
||||
New-HTMLPanelStyle -BorderRadius 0px
|
||||
New-HTMLTableOption -DataStore JavaScript -BoolAsString -ArrayJoinString ', ' -ArrayJoin
|
||||
|
||||
New-HTMLHeader {
|
||||
New-HTMLSection -Invisible {
|
||||
New-HTMLSection {
|
||||
New-HTMLText -Text "Report generated on $(Get-Date)" -Color Blue
|
||||
} -JustifyContent flex-start -Invisible
|
||||
New-HTMLSection {
|
||||
New-HTMLText -Text "GPOZaurr - $($Script:Reporting['Version'])" -Color Blue
|
||||
} -JustifyContent flex-end -Invisible
|
||||
}
|
||||
}
|
||||
|
||||
# if ($Type.Count -eq 1) {
|
||||
# foreach ($T in $Script:GPOConfiguration.Keys) {
|
||||
# if ($Script:GPOConfiguration[$T].Enabled -eq $true) {
|
||||
# if ($Script:GPOConfiguration[$T]['Summary']) {
|
||||
# $Script:Reporting[$T]['Summary'] = Invoke-Command -ScriptBlock $Script:GPOConfiguration[$T]['Summary']
|
||||
# }
|
||||
# & $Script:GPOConfiguration[$T]['Solution']
|
||||
# }
|
||||
# }
|
||||
# } else {
|
||||
|
||||
if ($Script:GPOConfiguration[$T]['Summary']) {
|
||||
$Script:Reporting[$T]['Summary'] = Invoke-Command -ScriptBlock $Script:GPOConfiguration[$T]['Summary']
|
||||
}
|
||||
New-HTMLTab -Name $Script:GPOConfiguration[$T]['Name'] {
|
||||
& $Script:GPOConfiguration[$T]['Solution']
|
||||
}
|
||||
|
||||
# }
|
||||
} -Online:$Online.IsPresent -ShowHTML:(-not $HideHTML) -FilePath $FilePath
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
function Export-GPOZaurrContent {
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Saves GPOs to XML or HTML files.
|
||||
|
||||
.DESCRIPTION
|
||||
Saves GPOs to XML or HTML files.
|
||||
|
||||
.PARAMETER FolderOutput
|
||||
The folder where the GPOs will be saved.
|
||||
|
||||
.PARAMETER ReportType
|
||||
The type of report to generate. Valid values are XML or HTML. Default is XML.
|
||||
|
||||
.EXAMPLE
|
||||
An example
|
||||
|
||||
.NOTES
|
||||
General notes
|
||||
#>
|
||||
[CmdletBinding()]
|
||||
param(
|
||||
[Parameter(Mandatory)][alias('Path')][string] $FolderOutput,
|
||||
[ValidateSet('XML', 'HTML')][string] $ReportType = 'XML'
|
||||
)
|
||||
if ($FolderOutput) {
|
||||
if (-not (Test-Path -LiteralPath $FolderOutput)) {
|
||||
$null = New-Item -Path $FolderOutput -ItemType Directory -Force
|
||||
}
|
||||
$Forest = Get-ADForest
|
||||
$Count = 0
|
||||
foreach ($Domain in $Forest.Domains) {
|
||||
$GPOs = Get-GPO -All -Domain $Domain
|
||||
foreach ($GPO in $GPOS) {
|
||||
$Count++
|
||||
Write-Verbose -Message "Export-GPOZaurr - Exporting ($Count / $($GPOs.Count)) - $($GPO.DisplayName) to $ReportTypeF"
|
||||
$Name = "$($GPO.DomainName)_$($GPO.Id)_$($GPO.DisplayName).xml".Replace(" ", "_").Replace("|", "_")
|
||||
$FullName = [io.path]::Combine($GPOOutput, $Name)
|
||||
Get-GPOReport -Guid $GPO.Id -Domain $GPO.DomainName -ReportType $ReportType -Path $FullName
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -68,7 +68,12 @@
|
||||
DomainName = ConvertFrom-DistinguishedName -ToDomainCN -DistinguishedName $OU.DistinguishedName
|
||||
}
|
||||
if ($InheritanceInformation.BlockedInheritance -and $IncludeGroupPoliciesForBlockedObjects.IsPresent) {
|
||||
$GPInheritance = Get-GPInheritance -Target $OU.distinguishedName
|
||||
try {
|
||||
$GPInheritance = Get-GPInheritance -Target $OU.distinguishedName -ErrorAction Stop
|
||||
} catch {
|
||||
Write-Warning -Message "Get-GPOZaurrInheritance - Can't get GPInheritance for $($OU.distinguishedName). Error: $($_.Exception.Message)"
|
||||
continue
|
||||
}
|
||||
$ActiveGroupPolicies = foreach ($GPO in $GPInheritance.InheritedGpoLinks) {
|
||||
[PSCustomObject] @{
|
||||
OrganizationalUnit = $OU.canonicalName
|
||||
|
||||
@@ -126,6 +126,7 @@
|
||||
}
|
||||
[PSCustomObject] @{
|
||||
DisplayName = $GPO.DisplayName
|
||||
GUID = ConvertFrom-DistinguishedName -DistinguishedName $GPO.GPODistinguishedName
|
||||
DomainName = $GPO.DomainName
|
||||
Owner = $GPO.Owner
|
||||
OwnerName = $Owner.Name
|
||||
|
||||
+14
-40
@@ -46,6 +46,9 @@
|
||||
.PARAMETER Online
|
||||
Forces report to use online resources in HTML (using CDN most of the time), by default it is run offline, and inlines all CSS/JS code.
|
||||
|
||||
.PARAMETER SplitReports
|
||||
Split report into multiple files, one for each report. This can be useful for large domains with huge reports.
|
||||
|
||||
.EXAMPLE
|
||||
Invoke-GPOZaurr
|
||||
|
||||
@@ -71,7 +74,8 @@
|
||||
[alias('ForestName')][string] $Forest,
|
||||
[string[]] $ExcludeDomains,
|
||||
[alias('Domain', 'Domains')][string[]] $IncludeDomains,
|
||||
[switch] $Online
|
||||
[switch] $Online,
|
||||
[switch] $SplitReports
|
||||
)
|
||||
Reset-GPOZaurrStatus # This makes sure types are at it's proper status
|
||||
|
||||
@@ -181,6 +185,10 @@
|
||||
$TimeEndGPOList = Stop-TimeLog -Time $TimeLogGPOList -Option OneLiner
|
||||
$Script:Reporting[$T]['Time'] = $TimeEndGPOList
|
||||
Write-Color -Text '[i]', '[End ] ', $($Script:GPOConfiguration[$T]['Name']), " [Time to execute: $TimeEndGPOList]" -Color Yellow, DarkGray, Yellow, DarkGray
|
||||
|
||||
if ($SplitReports) {
|
||||
New-HTMLReportWithSplit -FilePath $FilePath -Online:$Online -HideHTML:$HideHTML -CurrentReport $T
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -189,46 +197,12 @@
|
||||
if (-not $FilePath) {
|
||||
$FilePath = Get-FileName -Extension 'html' -Temporary
|
||||
}
|
||||
Write-Color -Text '[i]', '[HTML ] ', "Generating HTML report ($FilePath)" -Color Yellow, DarkGray, Yellow
|
||||
New-HTML -Author 'Przemysław Kłys' -TitleText 'GPOZaurr Report' {
|
||||
New-HTMLTabStyle -BorderRadius 0px -TextTransform capitalize -BackgroundColorActive SlateGrey
|
||||
New-HTMLSectionStyle -BorderRadius 0px -HeaderBackGroundColor Grey -RemoveShadow
|
||||
New-HTMLPanelStyle -BorderRadius 0px
|
||||
New-HTMLTableOption -DataStore JavaScript -BoolAsString -ArrayJoinString ', ' -ArrayJoin
|
||||
if ($Type.Count -gt 1 -and -not $SplitReports) {
|
||||
New-HTMLReportWithSplit -FilePath $FilePath -Online:$Online -HideHTML:$HideHTML
|
||||
} else {
|
||||
New-HTMLReportAll -FilePath $FilePath -Online:$Online -HideHTML:$HideHTML -Type $Type
|
||||
}
|
||||
|
||||
New-HTMLHeader {
|
||||
New-HTMLSection -Invisible {
|
||||
New-HTMLSection {
|
||||
New-HTMLText -Text "Report generated on $(Get-Date)" -Color Blue
|
||||
} -JustifyContent flex-start -Invisible
|
||||
New-HTMLSection {
|
||||
New-HTMLText -Text "GPOZaurr - $($Script:Reporting['Version'])" -Color Blue
|
||||
} -JustifyContent flex-end -Invisible
|
||||
}
|
||||
}
|
||||
|
||||
if ($Type.Count -eq 1) {
|
||||
foreach ($T in $Script:GPOConfiguration.Keys) {
|
||||
if ($Script:GPOConfiguration[$T].Enabled -eq $true) {
|
||||
if ($Script:GPOConfiguration[$T]['Summary']) {
|
||||
$Script:Reporting[$T]['Summary'] = Invoke-Command -ScriptBlock $Script:GPOConfiguration[$T]['Summary']
|
||||
}
|
||||
& $Script:GPOConfiguration[$T]['Solution']
|
||||
}
|
||||
}
|
||||
} else {
|
||||
foreach ($T in $Script:GPOConfiguration.Keys) {
|
||||
if ($Script:GPOConfiguration[$T].Enabled -eq $true) {
|
||||
if ($Script:GPOConfiguration[$T]['Summary']) {
|
||||
$Script:Reporting[$T]['Summary'] = Invoke-Command -ScriptBlock $Script:GPOConfiguration[$T]['Summary']
|
||||
}
|
||||
New-HTMLTab -Name $Script:GPOConfiguration[$T]['Name'] {
|
||||
& $Script:GPOConfiguration[$T]['Solution']
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} -Online:$Online.IsPresent -ShowHTML:(-not $HideHTML) -FilePath $FilePath
|
||||
$TimeLogEndHTML = Stop-TimeLog -Time $TimeLogHTML -Option OneLiner
|
||||
Write-Color -Text '[i]', '[HTML ] ', 'Generating HTML report', " [Time to execute: $TimeLogEndHTML]" -Color Yellow, DarkGray, Yellow, DarkGray
|
||||
if ($PassThru) {
|
||||
|
||||
Reference in New Issue
Block a user