mirror of
https://github.com/EvotecIT/GPOZaurr.git
synced 2026-07-26 11:49:17 +00:00
Compare commits
108 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 | |||
| d748afda1d | |||
| 9165f23f1b | |||
| 1c700cd27c | |||
| a566d4716a | |||
| 196163cc1f | |||
| a546a023ff | |||
| f5a38b4351 | |||
| 9c668ac869 | |||
| a50dd3cc9a | |||
| 45be7cd432 | |||
| cab639239f | |||
| 5a578278d0 | |||
| 408c4a5530 | |||
| 40905c67ec | |||
| cf8c687e57 | |||
| 580ef74486 | |||
| ebecd56dff | |||
| d5700d873a | |||
| 89c216bb55 | |||
| fe2ff87120 | |||
| 0c756b6f0d | |||
| 3dc5dc7be4 | |||
| d75172e6b1 | |||
| ee12a4f619 | |||
| c96c8285bf | |||
| 8c3ed61142 | |||
| 2934acafeb | |||
| 7203b7f544 | |||
| d22e79b657 | |||
| e07c2dae9a | |||
| 8b1b225ce1 | |||
| 1a54d62b2e | |||
| 352ddc18f3 | |||
| 017007d8c9 | |||
| 4803d3e183 | |||
| 92fcb80005 | |||
| 4985a114dc | |||
| 3ad4a92c66 | |||
| e78db61695 | |||
| 781e95d042 | |||
| 4e1f35f433 | |||
| 74eb14753e | |||
| 1a7bb0273f | |||
| 65eea07b6f | |||
| fe917d70b0 | |||
| 9786186a59 | |||
| b6fc7a676b | |||
| 46e6815314 | |||
| b3e9ddeb64 | |||
| e5f67d8f2e | |||
| 24f81647fa | |||
| cdeb2b4a2d | |||
| f7cf18500d | |||
| 1becfbca60 | |||
| 82c21edcc2 | |||
| e56cf3bde3 | |||
| 996139ab4a | |||
| 5590e3bf31 | |||
| 9db54b338b | |||
| e79d95c0fd | |||
| 8c1f95b1b8 | |||
| 4d9f1e7fba | |||
| 88fb1651a9 | |||
| 9696fb0cab | |||
| bb77785ea8 | |||
| 168919d7d9 | |||
| 5effe5face | |||
| 6d15363caa | |||
| 6c62a11767 | |||
| 61bfe5bd4d | |||
| 5043767e8d | |||
| e4ecafaea5 | |||
| 154e3428e6 | |||
| a6c2ac1226 | |||
| 2b0a395abc | |||
| 04b7242bde | |||
| 48af562bfd | |||
| a5d447b28c | |||
| e649a489bc | |||
| bf3cfb8d21 | |||
| f250453536 | |||
| 34902ab6d8 |
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
+503
@@ -0,0 +1,503 @@
|
||||
# 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
|
||||
## 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.147 - 2021.12.03
|
||||
- 📃 Updates documentation
|
||||
## 0.0.146 - 2021.11.02
|
||||
- ℹ️ Improves `GPOUpdates` report from `Invoke-GPOZaurr` - should be 7 days, not 14 days
|
||||
## 0.0.145 - 2021.11.02
|
||||
- ℹ️ Improves `GPOUpdates` report from `Invoke-GPOZaurr` by fixing conditional formatting
|
||||
## 0.0.144 - 2021.10.24
|
||||
- ℹ️ Improves `Get-GPOZaurrUpdates`
|
||||
- Adds `GPOUpdates` report to `Invoke-GPOZaurr`
|
||||
## 0.0.143 - 2021.10.19
|
||||
- ℹ️ Improves `Get-GPOZaurrUpdates` with more verbose messages
|
||||
## 0.0.142 - 2021.10.18
|
||||
- 🐛 Fixes `Get-GPOZaurrUpdates` when GPO is not linked
|
||||
## 0.0.141 - 2021.10.17
|
||||
- 🛑 Removed property from `Get-GPOZaurrAD` - `FunctionalityVersion`
|
||||
- ➕ Added property to `Get-GPOZaurrAD` - `Owner`
|
||||
- ➕ Added ability to choose date ranges for `Get-GPOZaurrAD`
|
||||
- ➕ Added `Get-GPOZaurrUpdates` which shows last gpos added to forest
|
||||
## 0.0.140 - 2021.08.24
|
||||
- ☑ Improved `Invoke-GPOZaurr` - type `GPOAnalysis` - added folder redirection type - [tnx PatrickOnGit](https://github.com/EvotecIT/GPOZaurr/pull/24)
|
||||
## 0.0.139 - 2021.08.19
|
||||
- ☑ Improved `Invoke-GPOZaurr` - type `GPOOrganizationalUnit` - adding RootLevel information
|
||||
## 0.0.138 - 2021.08.18
|
||||
- 🐛 Fix for exclusions using GUID with brackets for Invoke-GPOZaurr `GPOList` and related options
|
||||
## 0.0.137 - 2021.08.17
|
||||
- ☑ Improved `Invoke-GPOZaurr` - type `GPOOrganizationalUnit` - moving delete of OU as non-mandatory option
|
||||
## 0.0.136 - 2021.08.17
|
||||
- ☑ Improved wording
|
||||
## 0.0.135 - 2021.08.17
|
||||
- ☑ Improved exclusions
|
||||
## 0.0.134 - 2021.08.16
|
||||
- ☑ Improved exclusions for email use
|
||||
## 0.0.133 - 2021.08.16
|
||||
- ☑ Improved exclusions for email use
|
||||
## 0.0.132 - 2021.08.16
|
||||
- ☑ Improved exclusions for email use
|
||||
## 0.0.131 - 2021.08.16
|
||||
- ☑ Improved exclusions for email use
|
||||
## 0.0.130 - 2021.08.13
|
||||
- 💡 Updated HTML to new version of `PSWriteHTML` that fixes complains about `SearchBuilder` option
|
||||
- ☑ Improved `Invoke-GPOZaurr` - type `GPOOrganizationalUnit` with exclusions
|
||||
|
||||
```powershell
|
||||
Invoke-GPOZaurr -Type GPOOrganizationalUnit -Online -FilePath $PSScriptRoot\Reports\GPOZaurrOU.html -Exclusions @(
|
||||
'*OU=Production,DC=ad,DC=evotec,DC=pl'
|
||||
'*OU=Production,DC=ad,DC=evotec,DC=pl'
|
||||
'*DC=ad,DC=evotec,DC=pl'
|
||||
)
|
||||
```
|
||||
|
||||
- ☑ Improved `Get-GPOZaurrOrganizationalUnit` with exclusions
|
||||
|
||||
```powershell
|
||||
Get-GPOZaurrOrganizationalUnit -Verbose -ExcludeOrganizationalUnit @(
|
||||
'*,OU=Production,DC=ad,DC=evotec,DC=pl'
|
||||
) | Format-Table
|
||||
```
|
||||
|
||||
- ☑ Improved `Remove-GPOZaurrLinkEmptyOU` with exclusions
|
||||
|
||||
```powershell
|
||||
$Exclude = @(
|
||||
"OU=Groups,OU=Production,DC=ad,DC=evotec,DC=pl"
|
||||
"OU=Test \, OU,OU=ITR02,DC=ad,DC=evotec,DC=xyz"
|
||||
)
|
||||
|
||||
Remove-GPOZaurrLinkEmptyOU -Verbose -LimitProcessing 3 -WhatIf -ExcludeOrganizationalUnit $Exclude
|
||||
```
|
||||
|
||||
- ☑ Improved `Invoke-GPOZaurr` - type `GPOOwners` with exclusions
|
||||
|
||||
```powershell
|
||||
Invoke-GPOZaurr -FilePath $PSScriptRoot\Reports\GPOZaurrGPOOwners.html -Type GPOOwners -Online -Exclusions @(
|
||||
'EVOTEC\przemyslaw.klys'
|
||||
)
|
||||
```
|
||||
|
||||
- ☑ Improved `Set-GPOZaurrOwner` with exclusions/approved owners
|
||||
|
||||
```powershell
|
||||
Set-GPOZaurrOwner -Type All -Verbose -LimitProcessing 2 -WhatIf -IncludeDomains 'ad.evotec.xyz' -ApprovedOwner @(
|
||||
'EVOTEC\przemyslaw.klys'
|
||||
)
|
||||
```
|
||||
|
||||
- ☑ Improved `Get-GPOZaurrOwner` with exclusions/approved owners
|
||||
|
||||
```powershell
|
||||
$T = Get-GPOZaurrOwner -Verbose -IncludeSysvol -ApprovedOwner @('EVOTEC\przemyslaw.klys')
|
||||
$T | Format-Table *
|
||||
```
|
||||
|
||||
- ☑ Improved `Get-GPOZaurr` with exclusions and support for GUID, strings
|
||||
|
||||
```powershell
|
||||
$GPOS = Get-GPOZaurr -ExcludeGroupPolicies {
|
||||
Skip-GroupPolicy -Name 'de14_usr_std'
|
||||
Skip-GroupPolicy -Name 'de14_usr_std' -DomaiName 'ad.evotec.xyz'
|
||||
Skip-GroupPolicy -Name 'All | Trusted Websites' #-DomaiName 'ad.evotec.xyz'
|
||||
'{D39BF08A-87BF-4662-BFA0-E56240EBD5A2}'
|
||||
'COMPUTERS | Enable Sets'
|
||||
}
|
||||
$GPOS | Format-Table -AutoSize *
|
||||
```
|
||||
|
||||
- ☑ Improved `Invoke-GPOZaurr` with exclusions and support for GUID, strings
|
||||
|
||||
```powershell
|
||||
Invoke-GPOZaurr -Type GPOList -Exclusions {
|
||||
Skip-GroupPolicy -Name 'All | Trusted Websites' -DomaiName 'ad.evotec.xyz'
|
||||
'{D39BF08A-87BF-4662-BFA0-E56240EBD5A2}'
|
||||
'COMPUTERS | Enable Sets'
|
||||
}
|
||||
```
|
||||
|
||||
## 0.0.129 - 2021.08.06
|
||||
- Added `Get-GPOZaurrOrganizationalUnit` and added `GPOOrganizationalUnit` in `Invoke-GPOZaurr` (preview)
|
||||
- Added `Remove-GPOZaurrLinkEmptyOU` which allows removing links from Empty OUs (preview)
|
||||
- Small update to parameter sets for `Set-GPOZaurrOwner`
|
||||
## 0.0.128 - 2021.05.26
|
||||
- ☑ Improved `Invoke-GPOZaurrContent` - type `PublicKeyPoliciesCertificates` - added more certificate information
|
||||
- ☑ Improved `Invoke-GPOZaurr` - type `GPOAnalysis` - added more certificate information
|
||||
## 0.0.128 Alpha 1 - 2021.05.17
|
||||
- 🐛 Fixes errors when normalizing properties [#17](https://github.com/EvotecIT/GPOZaurr/issues/17)
|
||||
## 0.0.127 - 2021.04.15
|
||||
- ☑ Improved `Invoke-GPOZaurr`
|
||||
- ☑ Report `GPOList` - moved description closer to statuses
|
||||
- ☑ Improved `Get-GPOZaurr` - moved description closer to statuses
|
||||
## 0.0.126 - 2021.04.12
|
||||
- ☑ Improved `Invoke-GPOZaurr`
|
||||
- ☑ Report `GPOBlockedInheritance` - hidden DistinguishedName, fixed some small typos
|
||||
## 0.0.125 - 2021.04.11
|
||||
- ☑ Improved `Invoke-GPOZaurr`
|
||||
- ☑ Report `GPOBlockedInheritance` - small fixes
|
||||
## 0.0.124 - 2021.04.11
|
||||
- ☑ Added `SearchBuilder` to all tables
|
||||
- ☑ Automatically joins arrays in tables in `Invoke-GPOZaurr`
|
||||
- ☑ Improved `Get-GPOZaurrInheritance` with Exclusions and some help information
|
||||
- ☑ Improved `Invoke-GPOZaurr` with some Exclusions
|
||||
- ☑ Improved `Invoke-GPOZaurr`
|
||||
- 🔥 Report `GPOBlockedInheritance` - heavily improved functionality and data
|
||||
## 0.0.123 - 2021.03.21
|
||||
- ☑ Fixes `Get-GPOZaurrLinkSummary`
|
||||
## 0.0.122 - 2021.02.11
|
||||
- ☑ Improved `Invoke-GPOZaurr`
|
||||
- ☑ Report `GPOAnalysis` - added `WindowsFirewallRules`,`WindowsFirewallProfiles`,`WindowsFirewallConnectionSecurityAuthentication`,`WindowsFirewallConnectionSecurityRules`
|
||||
- ☑ Improved `Invoke-GPOZaurrContent` as mentioned above for `GPOAnalysis`
|
||||
## 0.0.121 - 2021.02.10
|
||||
- ☑ Improvement to `Get-GPOZaurr` - added description [#13](https://github.com/EvotecIT/GPOZaurr/issues/13)
|
||||
- ☑ Improvement to `Invoke-GPOZaurr -Type GPOList` - added description [#13](https://github.com/EvotecIT/GPOZaurr/issues/13)
|
||||
- ☑ Improved `Invoke-GPOZaurr`
|
||||
- ☑ Report GPOAnalysis - added `FolderRedirection`
|
||||
- ☑ Report GPOAnalysis - renamed `FolderRedirection` to `FolderRedirectionPolicy`
|
||||
- ☑ Improved `Invoke-GPOZaurrContent` as mentioned above for `GPOAnalysis`
|
||||
## 0.0.120 - 2021.02.10
|
||||
- ☑ Improvement to `Get-GPOZaurr` to warn if there is potential issue with EMPTY (which can happen on non-english system)
|
||||
- ☑ In such case GPOZaurr will asses EMPTY or not using old method which doesn't detect all EMPTY cases but shouldn't provide false positives
|
||||
## 0.0.119
|
||||
- Broken release - weird
|
||||
## 0.0.118 - 2021.02.09
|
||||
- ☑ Added information where the report is saved
|
||||
- ☑ Small improvement to `Get-GPOZaurr` to exlicitly define variable types
|
||||
## 0.0.117 - 2021.02.09
|
||||
- ☑ Small fix to `Get-GPOZaurr` to exclude GPOList.xml which is used in offline mode by `Save-GPOZaurrFiles`
|
||||
## 0.0.116 - 2021.02.08
|
||||
- ☑ Improved `Remove-GPOZaurrBroken` to handle ObjectClass problem, and removed reduntant check
|
||||
## 0.0.115 - 2021.02.07
|
||||
- ☑ Improved `Invoke-GPOZaurr`
|
||||
- ☑ `GPOList` - clarified some texts, changed 7 days to 30 days as default
|
||||
- ☑ `NetLogonPermissions` - fixed missing text
|
||||
- ☑ Fixes `Get-GPOZaurrNetLogon` error on empty Owner - [#9](https://github.com/EvotecIT/GPOZaurr/issues/9)
|
||||
## 0.0.114 - 2021.01.27
|
||||
- ☑ Improved `Invoke-GPOZaurr`
|
||||
- ☑ HTML now uses offline mode by default (no CDN) - increase in size of HTML up to 3MB
|
||||
- ☑ Using Online switch forces use of CDN - smaller files. For example `Invoke-GPOZaurr -Type GPOList -Online`
|
||||
- [ ] Improved `Invoke-GPOZaurrSupport`
|
||||
- ☑ HTML now uses offline mode by default (no CDN) - increase in size of HTML up to 3MB
|
||||
- ☑ Using Online switch forces use of CDN - smaller files. For example `Invoke-GPOZaurrSupport -Online`
|
||||
- ☑ Removed parameter Offline, added parameter Online
|
||||
- ☑ The cmdlet is not really production ready. It's work in progress
|
||||
## 0.0.113 - 2021.01.25
|
||||
- ☑ Improved `Invoke-GPOZaurr`
|
||||
- ☑ Report GPOAnalysis - added WindowsTimeService
|
||||
- ☑ Improved `Invoke-GPOZaurrContent`
|
||||
- ☑ Added `WindowsTimeService` type
|
||||
## 0.0.112 - 2021.01.25
|
||||
- ☑ Improved `Invoke-GPOZaurr`
|
||||
## 0.0.111 - 2021.01.24
|
||||
- ☑ Improved `Invoke-GPOZaurr`
|
||||
## 0.0.110 - 2021.01.22
|
||||
- ☑ Improved `Invoke-GPOZaurr`
|
||||
## 0.0.109 - 2021.01.11
|
||||
- ☑ Improved `Invoke-GPOZaurr`
|
||||
## 0.0.108 - 2021.01.11
|
||||
- ☑ Improved `Invoke-GPOZaurr`
|
||||
- ☑ Improved `GPOConsistency`
|
||||
## 0.0.107 - 2021.01.11
|
||||
- ☑ Improved `Invoke-GPOZaurr`
|
||||
## 0.0.106 - 2021.01.11
|
||||
- ☑ Improved `Invoke-GPOZaurrContent`
|
||||
## 0.0.105 - 2021.01.05
|
||||
- ☑ Improved `Get-GPOZaurr`
|
||||
- ☑ Improved report `GPOBrokenLink`
|
||||
## 0.0.104 - 2021.01.04
|
||||
- ☑ Improved `Get-GPOZaurrBrokenLink`
|
||||
- ☑ Improved `Repair-GPOZaurrBrokenLink`
|
||||
- ☑ Improved `Get-GPOZaurr`
|
||||
- ☑ Improved report `GPOBrokenLink`
|
||||
## 0.0.103 - 2021.01.04
|
||||
- ☑ Improved `Get-GPOZaurr`
|
||||
- ☑ Added new report `GPOBrokenLink`
|
||||
- ☑ Added `Get-GPOZaurrBrokenLink`
|
||||
- ☑ Added `Repair-GPOZaurrBrokenLink`
|
||||
## 0.0.102 - 2021.01.02
|
||||
- ☑ Improved `Get-GPOZaurrLink`
|
||||
- ☑ Supports all links across forest
|
||||
- ☑ Renamed Linked validate set from `Other` to `OrganizationalUnit`
|
||||
- ☑ Improved `Get-GPOZaurrLinkSummary`
|
||||
- ☑ Improved/BugFix `Get-GPOZaurr` to properly detect linked GPOs in sites/cross-domain
|
||||
- ☑ Improved `Invoke-GPOZaurrPermission`
|
||||
- ☑ Renamed Linked validate set from `Other` to `OrganizationalUnit`
|
||||
- ☑ Improved `Invoke-GPOZaurr`
|
||||
- ☑ Added `GPOLinks` basic list
|
||||
## 0.0.101 - 23.12.2020
|
||||
- ☑ Improved `Get-GPOZaurrBroken`
|
||||
- ☑ It now detects `ObjectClass Issue`
|
||||
- ☑ Heavily improved performance
|
||||
- ☑ Removed some useless properties for this particular cmdlet
|
||||
- ☑ All states: `Not available on SYSVOL`, `Not available in AD`, `Exists`, `Permissions Issue`, `ObjectClass Issue`
|
||||
- ☑ Improved help
|
||||
- ☑ Improved `Remove-GPOZaurrBroken`
|
||||
- ☑ It now deals with `ObjectClass Issue`
|
||||
- ☑ Heavily improved performance
|
||||
- ☑ Removed some useless properties for this particular cmdlet
|
||||
- ☑ Now requires manual type insert AD, SYSVOL or ObjectClass (or all of them). Before it was auto using AD/SYSVOL.
|
||||
- ☑ Improved help
|
||||
- ☑ Improved `Invoke-GPOZaurr`
|
||||
- ☑ Type `GPOList`
|
||||
- ☑ Renamed `GPOOrphans` to `GPOBroken`
|
||||
- ☑ Improved `GPOBroken` with `ObjectClass issue`
|
||||
## 0.0.100 - 21.12.2020
|
||||
- ☑ Improved `Invoke-GPOZaurr`
|
||||
- ☑ Type `GPOPermissionsRead`
|
||||
- ☑ Type `GPOPermissions`
|
||||
## 0.0.99 - 13.12.2020
|
||||
- ☑ Improved `Invoke-GPOZaurr`
|
||||
- ☑ Type `GPOList` - require GPO to be 7 days old for deletion to be proposed
|
||||
- ☑ Type `GPOPermissions` - one stop for permissions
|
||||
- ☑ Allows Steps to be chosen via their menu and out-of-order
|
||||
- ☑ Improved `Remove-GPOZaurr` - added `RequireDays` parameter to prevent deletion of just modified GPOs
|
||||
- ☑ Added `Get-GPOZaurrPermissionAnalysis`
|
||||
- ☑ Added `Repair-GPOZaurrPermission`
|
||||
## 0.0.98 - 10.12.2020
|
||||
- ☑ Improved `Invoke-GPOZaurr`
|
||||
- ☑ Type `GPOList` - fixed unexpected ending of cmdlet when error occurs (for example deleted GPO while script is running) which could impact results
|
||||
- ☑ Other types - small color adjustment
|
||||
- ☑ Fixed/Improved `Get-GPOZaurr` - fixed unexpected ending of cmdlet when error occurs (for example deleted GPO while script is running), improved code base
|
||||
- ☑ Improved `Invoke-GPOZaurrSupport`
|
||||
## 0.0.97 - 07.12.2020
|
||||
- ☑ Improved `Invoke-GPOZaurr`
|
||||
- ☑ Type `GPOList` - added more data, did small reorganization
|
||||
## 0.0.96 - 07.12.2020
|
||||
- ☑ Improved `Invoke-GPOZaurr`
|
||||
- ☑ Type `GPOList` - added more data, added Optimization Step
|
||||
- ☑ Added `Set-GPOZaurrStatus`
|
||||
- ☑ Added `Optimize-GPOZaurr`
|
||||
- ☑ Fixed `Invoke-GPOZaurrPermission` which would not remove permission due to internal changes earlier on
|
||||
- ☑ Small change to `Backup-GPOZaurr`
|
||||
- ☑ Added support for `Disabled`. It's now possbile to backup `All` (default), `Empty`,`Unlinked`,`Disabled` or a mix of them
|
||||
- ☑ Removed useless `GPOPath` parameter
|
||||
## 0.0.95 - 04.12.2020
|
||||
- ☑ Fix for too big int - [#4](https://github.com/EvotecIT/GPOZaurr/issues/4) - tnx neztach
|
||||
- ☑ Improved `Invoke-GPOZaurr`
|
||||
- ☑ Type `GPOList` - added ability for Exclusions
|
||||
- ☑ All other types, small improvements
|
||||
- ☑ Added HideSteps, ShowError, ShowWarning -> Disabled Warnings/Errors by default as they tend to show too much information
|
||||
- ☑ Improved `Remove-GPOZaurr` - added Exclusions
|
||||
## 0.0.93 - 03.12.2020
|
||||
- ☑ Improved `Invoke-GPOZaurr`
|
||||
- ☑ Type `GPOList` reverted charts colors for entries to match colors
|
||||
- [ ] Added `Skip-GroupPolicy` to use within `Invoke-GPOZaurr`
|
||||
- ☑ Improved `Invoke-GPOZaurr` with basic support for Exclusions
|
||||
- ☑ Improved `Get-GPOZaurr` with basic support for Exclusions
|
||||
- ☑ Improved `Remove-GPOZaurrPermission` error handling
|
||||
## 0.0.92 - 01.12.2020
|
||||
- ☑ Improved `Invoke-GPOZaurrSupport`
|
||||
- ☑ Improved `Invoke-GPOZaurr`
|
||||
- ☑ Type `GPOList` improved with more data, more problems and clearer information
|
||||
- ☑ Improved `Remove-GPOZaurr`
|
||||
- ☑ Added ability do remove disabed GPO
|
||||
- ☑ Improved `Get-GPOZaurr` detecting more issues, delivering more data
|
||||
## 0.0.91 - 24.11.2020
|
||||
- ☑ Improves `Invoke-GPOZaurr` (WIP)
|
||||
- ☑ Improve Type `GPOPermissionsUnknown`
|
||||
## 0.0.90 - 23.11.2020
|
||||
- ☑ Improves `Invoke-GPOZaurr` (WIP)
|
||||
- ☑ Improves Type `GPODuplicates`
|
||||
- ☑ Fix for chart color to be RED
|
||||
- ☑ Add Type `GPOPermissionsUnknown`
|
||||
- ☑ Improves logic for Data with 0/1 element
|
||||
- ☑ Improves `Remove-GPOZaurrDuplicateObject` - removed `Confirm` requirement
|
||||
- ☑ Improves `Get-GPOZaurrNetLogon` with more verbose
|
||||
- ☑ Improves `Repair-GPOZaurrNetLogonOwner` with more verbose and fix for `LimitProcessing`
|
||||
## 0.0.89 - 22.11.2020
|
||||
- ☑ Small update `Add-GPOZaurrPermission`
|
||||
- ☑ Improves `Invoke-GPOZaurr` (WIP)
|
||||
- ☑ Added Type `GPOPermissionsAdministrative`
|
||||
## 0.0.88 - 18.11.2020
|
||||
- ☑ Fix for `Add-GPOZaurrPermission`
|
||||
## 0.0.87 - 18.11.2020
|
||||
- ☑ Improve error handling `Remove-GPOZaurrBroken`
|
||||
## 0.0.86 - 18.11.2020
|
||||
- ☑ Improve error handling `Remove-GPOZaurrBroken`
|
||||
## 0.0.85 - 17.11.2020
|
||||
- ☑ Improves `Invoke-GPOZaurr` (WIP)
|
||||
- ☑ Split `NetLogonPermissions` into `NetLogonPermissions` and `NetLogonOwners`
|
||||
- ☑ Improved type `NetLogonPermissions`
|
||||
- ☑ Improved type `NetLogonOwners`
|
||||
- ☑ Improves `Get-GPOZaurrFiles`
|
||||
- ☑ Improves `Get-GPOZaurrNetLogon`
|
||||
- ☑ Fix for `Get-GPOZaurrNetLogon`
|
||||
## 0.0.84 - 16.11.2020
|
||||
- ☑ Improves `Invoke-GPOZaurr` (WIP)
|
||||
- ☑ Type `NetLogonPermissions`
|
||||
- ☑ Fix for `Get-GPOZaurrNetLogon`
|
||||
## 0.0.83 - 14.11.2020
|
||||
- ☑ Improves `Invoke-GPOZaurr` (WIP)
|
||||
- ☑ Fix for wrong ActionRequired count
|
||||
## 0.0.82 - 14.11.2020
|
||||
- ☑ Added `Get-GPOZaurrPermissionIssue` to detect permission issue with no rights
|
||||
- ☑ Improves `Invoke-GPOZaurr` (WIP)
|
||||
- ☑ Type `GPOPermissionsRead` improved detection of problems with low permissions
|
||||
## 0.0.81 - 12.11.2020
|
||||
- ☑ Fix for `Set-GPOZaurrOwner` in case of missing permissions to not throw errors
|
||||
- ☑ Improves `Invoke-GPOZaurr` (WIP)
|
||||
- ☑ Type `GPOPermissionsRead` added
|
||||
## 0.0.80 - 12.11.2020
|
||||
- ☑ Improves `Invoke-GPOZaurr` (WIP)
|
||||
- ☑ Type `GPOOrphans` clearer options, updated texts, split per domain
|
||||
- ☑ Type `GPOOwners` clearer options, updated texts, split per domain
|
||||
- ☑ Improves `Add-GPOZaurrPermission`
|
||||
- ☑ Fixes LimitProcessing to work correctly
|
||||
- ☑ Added `All` to process all GPOs
|
||||
- ☑ Fixes `Remove-GPOZaurrPermission`
|
||||
- ☑ Improves `Set-GPOZaurrOwner`
|
||||
- ☑ Added `Force` to force `GPO Owner` to any principal (normally only Domain Admins)
|
||||
## 0.0.79 - 10.11.2020
|
||||
- Improved `Invoke-GPOZaurr` - type `GPOOrphans`
|
||||
## 0.0.78 - 10.11.2020
|
||||
- Improved `Remove-GPOZaurrBroken` more verbose
|
||||
- Improved `Get-GPOZaurrBroken` more verbose
|
||||
- Improved `Invoke-GPOZaurr` - type `GPOOrphans`
|
||||
- Improved `Invoke-GPOZaurr` - type `GPOList` - needs more work
|
||||
- Improved `Get-GPOZaurr` with better detection of Empty Policies (needs testing)
|
||||
## 0.0.77 - 9.11.2020
|
||||
- Improved `Invoke-GPOZaurr` (WIP)
|
||||
## 0.0.76 - 8.11.2020
|
||||
- Improved `Get-GPOZaurrNetLogon` to better handle errors
|
||||
## 0.0.75 - 8.11.2020
|
||||
- Improved `Get-GPOZaurrPermissionConsistency` to stop checking consistency if path doesn't exists
|
||||
## 0.0.74 - 8.11.2020
|
||||
- Improved `Invoke-GPOZaurr` (WIP)
|
||||
## 0.0.73 - 7.11.2020
|
||||
- Improved `Invoke-GPOZaurr` (WIP)
|
||||
- Improved `Get-GPOZaurr`
|
||||
## 0.0.72 - 6.11.2020
|
||||
- Improved `Invoke-GPOZaurr` (WIP)
|
||||
## 0.0.71 - 3.11.2020
|
||||
- Improved `Invoke-GPOZaurr` (WIP)
|
||||
## 0.0.70 - 29.10.2020
|
||||
- Added `Get-GPOZaurrDuplicateObject`
|
||||
- Added `Remove-GPOZaurrDuplicateObject`
|
||||
## 0.0.69 - 29.10.2020
|
||||
- Improved `Invoke-GPOZaurr` (WIP)
|
||||
- Improved `Get-GPOZaurrNetLogon`
|
||||
- Improved `Get-GPOZaurrOwner`
|
||||
- Improved `Set-GPOZaurrOwner`
|
||||
- Added `Repair-GPOZaurrNetLogonOwner`
|
||||
- Improved `Invoke-GPOZaurr` (WIP)
|
||||
## 0.0.68 - 28.10.2020
|
||||
- Renamed `Show-GPOZaurr` to `Invoke-GPOZaurr`
|
||||
- Renamed `Invoke-GPOZaurr` to `Invoke-GPOZaurrContent`
|
||||
- Improvements to `Get-GPOZaurrPermissionConsistency` - don't check for inherited permissions if top level ones are inconsistent
|
||||
- Improved `Invoke-GPOZaurr` (WIP)
|
||||
## 0.0.67 - 22.10.2020
|
||||
- Improved `Show-GPOZaurr` (WIP)
|
||||
## 0.0.66 - 22.10.2020
|
||||
- Improved `Show-GPOZaurr` (WIP)
|
||||
## 0.0.65 - 22.10.2020
|
||||
- Improved `Show-GPOZaurr` (WIP)
|
||||
## 0.0.64 - 21.10.2020
|
||||
- Renamed `Remove-GPOZaurrOrphaned` to `Remove-GPOZaurrBroken` keeping it as an alias
|
||||
- Renamed `Get-GPOZaurrSysvol` to `Get-GPOZaurrBroken` keeping it as an alias
|
||||
- Improved `Show-GPOZaurr` (WIP)
|
||||
## 0.0.63 - 19.10.2020
|
||||
- Renamed `Invoke-GPOZaurrContent` back to `Invoke-GPOZaurr`
|
||||
- Added `Show-GPOZaurr` (WIP)
|
||||
- Added `OutputType`,`OutputType`,`Open`,`Online` parameters to `Invoke-GPOZaurr`
|
||||
- Added `Get-GPOZaurrNetLogon`
|
||||
- Improved `Get-GPOZaurrOwner`
|
||||
- Fixes `Get-GPOZaurrSysvol`
|
||||
## 0.0.62 - 14.10.2020
|
||||
- Renamed `Invoke-GPOZaurr` to `Invoke-GPOZaurrContent` - I want to use `Invoke-GPOZaurr` for something else
|
||||
- Improvements to `Get-GPOZaurrPermissionConsistency` for GPOs without SYSVOL to be reported properly
|
||||
- Added `Get-GPOZaurrPermissionRoot`
|
||||
- Renamed `Remove-GPOZaurrOrphanedSysvolFolders` to `Remove-GPOZaurrOrphaned`
|
||||
- Improved `Remove-GPOZaurrOrphaned` to deal with orphaned folders but also orphaned AD GPO (No sysvol data)
|
||||
- Improved `Get-GPOZaurrSysVol` to detect orphaned SYSVOL or AD GPO objects
|
||||
- Improved `Get-GPOZaurrSysVol` to detect permissions issue when reading AD GPO objects
|
||||
- Added `Get-GPOZaurrPermissionRoot` to show which users/groups have control over all GPOs (allowed to create/modify)
|
||||
- Improved `Get-GPOZaurrPermissionSummary` to include `Get-GPOZaurrPermissionRoot` custom permissions
|
||||
- Updated `Remove-GPOZaurrPermission`
|
||||
- Updated `Get-GpoZaurrPermission`
|
||||
- Updated `Get-GPOZaurrFiles` to better handle access issue
|
||||
- Reversed parameters `Get-GPOZaurrFiles` from `Limited` to `ExtendedMetaData` and fixed missing columns
|
||||
## 0.0.61 - 31.08.2020
|
||||
- Improvement to `Get-GPOZaurrPermissionSummary`
|
||||
- Fixes to `ConvertFrom-CSExtension`
|
||||
- Fixes to `Find-CSExtension`
|
||||
## 0.0.59 - 26.08.2020
|
||||
- Improvement to `Get-GPOZaurrPermissionSummary`
|
||||
## 0.0.58 - 26.08.2020
|
||||
- Improvement to `Get-GPOZaurrPermissionSummary`
|
||||
## 0.0.57 - 26.08.2020
|
||||
- Improvement to `Get-GPOZaurrPermissionSummary`
|
||||
## 0.0.56 - 26.08.2020
|
||||
- Added `Get-GPOZaurrPermissionSummary`
|
||||
## 0.0.55 - 17.08.2020
|
||||
- Improved `Get-GPOZaurrInheritance`
|
||||
## 0.0.54 - 16.08.2020
|
||||
- Added `Invoke-GPOZaurrSupport` (WIP)
|
||||
- Added `ConvertFrom-CSExtension`
|
||||
- Added `Find-CSExtension`
|
||||
- Added `Get-GPOZaurrInheritance`
|
||||
## 0.0.53 - 16.08.2020
|
||||
- Bad release
|
||||
## 0.0.52 - 16.08.2020
|
||||
- Bad release
|
||||
## 0.0.51 - 2.08.2020
|
||||
- Updates to `Invoke-GPOZaurr` - still work in progress
|
||||
- Added `Get-GPOZaurrSysvolDFSR`
|
||||
- Added `Clear-GPOZaurrSysvolDFSR` (requires testing)
|
||||
## 0.0.50 - 29.07.2020
|
||||
- Updates to couple of commands
|
||||
## 0.0.49 - 23.07.2020
|
||||
- Hidden files were skipped - and people do crazy things with them
|
||||
## 0.0.48 - 21.07.2020
|
||||
- Added `Get-GPOZaurrFilesPolicyDefinition`
|
||||
- Updates to `Invoke-GPOZaurr` - still work in progress
|
||||
- Updates to `Get-GPOZaurrFiles` - still work in progress
|
||||
- Updates to `Remove-GPOZaurrOrphanedSysvolFolders` with backup and support for domains
|
||||
- Module will now be signed
|
||||
## 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`
|
||||
- Added `Invoke-GPOZaurr` (alias: `Find-GPO`) (heavy work in progress)
|
||||
## 0.0.45 - 26.06.2020
|
||||
- During publishing ADEssentials required functions are now merged to prevent cyclic dependency bug [Using ModuleSpec syntax in RequiredModules causes incorrect "cyclic dependency" failures](https://github.com/PowerShell/PowerShell/issues/2607)
|
||||
## 0.0.44 - 24.06.2020
|
||||
- Improvement to `Get-GPOZaurrLinkSummary`
|
||||
## 0.0.43 - 21.06.2020
|
||||
- Added `Get-GPOZaurrFiles` to list files on NETLOGON/SYSVOL shares with a lot of details
|
||||
## 0.0.42 - 19.06.2020
|
||||
- Fix for `Get-GPOZaurrLink` and `SearchBase` parameter
|
||||
- Fix for `Get-GPOZaurrLink` - canonical link Trim() throwing errors if empty
|
||||
## 0.0.41 - 18.06.2020
|
||||
- Added paramerter `SkipDuplicates` to `Invoke-GPOZaurrPermission` which prevents applying permissions over and over again if 1 GPO is linked to a multiple OU's within another OU
|
||||
## 0.0.40 - 18.06.2020
|
||||
- Fix for error `Get-GPOZaurrLink` - same issue as described on my [earlier blog - Get-ADObject : The server has returned the following error: invalid enumeration context.](https://evotec.xyz/get-adobject-the-server-has-returned-the-following-error-invalid-enumeration-context/).
|
||||
- `WARNING: Get-GPOZaurrLink - Processing error The server has returned the following error: invalid enumeration context.`
|
||||
- `WARNING: Get-GPOZaurrLink - Processing error A referral was returned from the server`
|
||||
- Added `SkipDuplicates` for `Get-GPOZaurrLink`
|
||||
## 0.0.39 - 17.06.2020
|
||||
- Updates to `Invoke-GPOZaurrPermission` with new parameter `LimitAdministrativeGroupsToDomain`
|
||||
- This will get administrative based on IncludeDomains if given. It means that if GPO has Domain admins added from multiple domains it will only find one, and remove all other Domain Admins (if working with Domain Admins that is)
|
||||
## 0.0.38 - 17.06.2020
|
||||
- Update to Get-PrivGPOZaurrLink which would cause problems to `Invoke-GPOZaurrPermission` if it would be run without Administrative permission and GPO wouldn't be accessible for that user
|
||||
## 0.0.37 - 16.06.2020
|
||||
- Updates to `Invoke-GPOZaurrPermission` with new parameterset `Level`
|
||||
- Updates to `Get-GPOZaurrLinkSummary`
|
||||
## 0.0.36 - 15.06.2020
|
||||
- Initial release
|
||||
@@ -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
|
||||
+152
-146
@@ -8,7 +8,8 @@ schema: 2.0.0
|
||||
# Get-GPOZaurr
|
||||
|
||||
## SYNOPSIS
|
||||
{{ Fill in the Synopsis }}
|
||||
Gets information about all Group Policies.
|
||||
Similar to what Get-GPO provides by default.
|
||||
|
||||
## SYNTAX
|
||||
|
||||
@@ -16,121 +17,52 @@ schema: 2.0.0
|
||||
Get-GPOZaurr [[-ExcludeGroupPolicies] <ScriptBlock>] [[-GPOName] <String>] [[-GPOGuid] <String>]
|
||||
[[-Type] <String[]>] [[-Forest] <String>] [[-ExcludeDomains] <String[]>] [[-IncludeDomains] <String[]>]
|
||||
[[-ExtendedForestInformation] <IDictionary>] [[-GPOPath] <String[]>] [-PermissionsOnly] [-OwnerOnly]
|
||||
[-Limited] [-ReturnObject] [[-ADAdministrativeGroups] <IDictionary>] [<CommonParameters>]
|
||||
[-Limited] [[-ADAdministrativeGroups] <IDictionary>] [<CommonParameters>]
|
||||
```
|
||||
|
||||
## DESCRIPTION
|
||||
{{ Fill in the Description }}
|
||||
Gets information about all Group Policies.
|
||||
Similar to what Get-GPO provides by default.
|
||||
|
||||
## EXAMPLES
|
||||
|
||||
### Example 1
|
||||
```powershell
|
||||
PS C:\> {{ Add example code here }}
|
||||
### EXAMPLE 1
|
||||
```
|
||||
$GPOs = Get-GPOZaurr
|
||||
```
|
||||
|
||||
{{ Add example description here }}
|
||||
$GPOs | Format-Table DisplayName, Owner, OwnerSID, OwnerType
|
||||
|
||||
### EXAMPLE 2
|
||||
```
|
||||
$GPO = Get-GPOZaurr -GPOName 'ALL | Allow use of biometrics'
|
||||
```
|
||||
|
||||
$GPO | Format-List *
|
||||
|
||||
### EXAMPLE 3
|
||||
```
|
||||
$GPOS = Get-GPOZaurr -ExcludeGroupPolicies {
|
||||
```
|
||||
|
||||
Skip-GroupPolicy -Name 'de14_usr_std'
|
||||
Skip-GroupPolicy -Name 'de14_usr_std' -DomaiName 'ad.evotec.xyz'
|
||||
Skip-GroupPolicy -Name 'All | Trusted Websites' #-DomaiName 'ad.evotec.xyz'
|
||||
'{D39BF08A-87BF-4662-BFA0-E56240EBD5A2}'
|
||||
'COMPUTERS | Enable Sets'
|
||||
}
|
||||
$GPOS | Format-Table -AutoSize *
|
||||
|
||||
## PARAMETERS
|
||||
|
||||
### -ADAdministrativeGroups
|
||||
{{ Fill ADAdministrativeGroups Description }}
|
||||
|
||||
```yaml
|
||||
Type: IDictionary
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
Position: 9
|
||||
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: 5
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -ExcludeGroupPolicies
|
||||
{{ Fill ExcludeGroupPolicies Description }}
|
||||
Marks the GPO as excluded from the list.
|
||||
|
||||
```yaml
|
||||
Type: ScriptBlock
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
Position: 0
|
||||
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: 7
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -Forest
|
||||
{{ Fill Forest Description }}
|
||||
|
||||
```yaml
|
||||
Type: String
|
||||
Parameter Sets: (All)
|
||||
Aliases: ForestName
|
||||
|
||||
Required: False
|
||||
Position: 4
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -GPOGuid
|
||||
{{ Fill GPOGuid Description }}
|
||||
|
||||
```yaml
|
||||
Type: String
|
||||
Parameter Sets: (All)
|
||||
Aliases: GUID, GPOID
|
||||
|
||||
Required: False
|
||||
Position: 2
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -GPOName
|
||||
{{ Fill GPOName Description }}
|
||||
|
||||
```yaml
|
||||
Type: String
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
Position: 1
|
||||
Default value: None
|
||||
@@ -138,14 +70,106 @@ Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -GPOPath
|
||||
{{ Fill GPOPath Description }}
|
||||
### -GPOName
|
||||
Provide a GPOName to get information about a specific GPO.
|
||||
|
||||
```yaml
|
||||
Type: String
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
Position: 2
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -GPOGuid
|
||||
Provide a GPOGuid to get information about a specific GPO.
|
||||
|
||||
```yaml
|
||||
Type: String
|
||||
Parameter Sets: (All)
|
||||
Aliases: GUID, GPOID
|
||||
|
||||
Required: False
|
||||
Position: 3
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -Type
|
||||
Choose a specific type of GPO.
|
||||
Options are: 'Empty', 'Unlinked', 'Disabled', 'NoApplyPermission', 'All'.
|
||||
Default is All.
|
||||
|
||||
```yaml
|
||||
Type: String[]
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
Position: 4
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -Forest
|
||||
Target different Forest, by default current forest is used
|
||||
|
||||
```yaml
|
||||
Type: String
|
||||
Parameter Sets: (All)
|
||||
Aliases: ForestName
|
||||
|
||||
Required: False
|
||||
Position: 5
|
||||
Default value: None
|
||||
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: 6
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -IncludeDomains
|
||||
Include only specific domains, by default whole forest is scanned
|
||||
|
||||
```yaml
|
||||
Type: String[]
|
||||
Parameter Sets: (All)
|
||||
Aliases: Domain, Domains
|
||||
|
||||
Required: False
|
||||
Position: 7
|
||||
Default value: None
|
||||
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: 8
|
||||
Default value: None
|
||||
@@ -153,53 +177,23 @@ Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -IncludeDomains
|
||||
{{ Fill IncludeDomains Description }}
|
||||
### -GPOPath
|
||||
Define GPOPath where the XML files are located to be analyzed instead of asking Active Directory
|
||||
|
||||
```yaml
|
||||
Type: String[]
|
||||
Parameter Sets: (All)
|
||||
Aliases: Domain, Domains
|
||||
|
||||
Required: False
|
||||
Position: 6
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -Limited
|
||||
{{ Fill Limited Description }}
|
||||
|
||||
```yaml
|
||||
Type: SwitchParameter
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
Position: Named
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -OwnerOnly
|
||||
{{ Fill OwnerOnly Description }}
|
||||
|
||||
```yaml
|
||||
Type: SwitchParameter
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
Position: Named
|
||||
Position: 9
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -PermissionsOnly
|
||||
{{ Fill PermissionsOnly Description }}
|
||||
Only show permissions, by default all information is shown
|
||||
|
||||
```yaml
|
||||
Type: SwitchParameter
|
||||
@@ -208,13 +202,13 @@ Aliases:
|
||||
|
||||
Required: False
|
||||
Position: Named
|
||||
Default value: None
|
||||
Default value: False
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -ReturnObject
|
||||
{{ Fill ReturnObject Description }}
|
||||
### -OwnerOnly
|
||||
only show owner information, by default all information is shown
|
||||
|
||||
```yaml
|
||||
Type: SwitchParameter
|
||||
@@ -223,22 +217,36 @@ Aliases:
|
||||
|
||||
Required: False
|
||||
Position: Named
|
||||
Default value: None
|
||||
Default value: False
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -Type
|
||||
{{ Fill Type Description }}
|
||||
### -Limited
|
||||
Provide limited output without analyzing XML data
|
||||
|
||||
```yaml
|
||||
Type: String[]
|
||||
Type: SwitchParameter
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
Accepted values: Empty, Unlinked, Disabled, All
|
||||
|
||||
Required: False
|
||||
Position: 3
|
||||
Position: Named
|
||||
Default value: False
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -ADAdministrativeGroups
|
||||
Ability to provide ADAdministrativeGroups from different function to speed up processing
|
||||
|
||||
```yaml
|
||||
Type: IDictionary
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
Position: 10
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
@@ -249,11 +257,9 @@ This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable
|
||||
|
||||
## INPUTS
|
||||
|
||||
### None
|
||||
|
||||
## OUTPUTS
|
||||
|
||||
### System.Object
|
||||
## NOTES
|
||||
General notes
|
||||
|
||||
## RELATED LINKS
|
||||
|
||||
@@ -15,18 +15,21 @@ schema: 2.0.0
|
||||
### Default (Default)
|
||||
```
|
||||
Get-GPOZaurrAD [-Forest <String>] [-ExcludeDomains <String[]>] [-IncludeDomains <String[]>]
|
||||
[-DateFrom <DateTime>] [-DateTo <DateTime>] [-DateRange <String>] [-DateProperty <String[]>]
|
||||
[-ExtendedForestInformation <IDictionary>] [<CommonParameters>]
|
||||
```
|
||||
|
||||
### GPOName
|
||||
```
|
||||
Get-GPOZaurrAD [-GPOName <String>] [-Forest <String>] [-ExcludeDomains <String[]>] [-IncludeDomains <String[]>]
|
||||
[-DateFrom <DateTime>] [-DateTo <DateTime>] [-DateRange <String>] [-DateProperty <String[]>]
|
||||
[-ExtendedForestInformation <IDictionary>] [<CommonParameters>]
|
||||
```
|
||||
|
||||
### GPOGUID
|
||||
```
|
||||
Get-GPOZaurrAD [-GPOGuid <String>] [-Forest <String>] [-ExcludeDomains <String[]>] [-IncludeDomains <String[]>]
|
||||
[-DateFrom <DateTime>] [-DateTo <DateTime>] [-DateRange <String>] [-DateProperty <String[]>]
|
||||
[-ExtendedForestInformation <IDictionary>] [<CommonParameters>]
|
||||
```
|
||||
|
||||
@@ -44,6 +47,68 @@ PS C:\> {{ Add example code here }}
|
||||
|
||||
## PARAMETERS
|
||||
|
||||
### -DateFrom
|
||||
{{ Fill DateFrom Description }}
|
||||
|
||||
```yaml
|
||||
Type: DateTime
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
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: (All)
|
||||
Aliases:
|
||||
Accepted values: PastHour, CurrentHour, PastDay, CurrentDay, PastMonth, CurrentMonth, PastQuarter, CurrentQuarter, Last14Days, Last21Days, Last30Days, Last7Days, Last3Days, Last1Days
|
||||
|
||||
Required: False
|
||||
Position: Named
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -DateTo
|
||||
{{ Fill DateTo Description }}
|
||||
|
||||
```yaml
|
||||
Type: DateTime
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
Position: Named
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -ExcludeDomains
|
||||
{{ Fill ExcludeDomains Description }}
|
||||
|
||||
|
||||
+84
-94
@@ -8,32 +8,51 @@ schema: 2.0.0
|
||||
# Get-GPOZaurrBroken
|
||||
|
||||
## SYNOPSIS
|
||||
{{ Fill in the Synopsis }}
|
||||
Detects broken or otherwise damaged Group Policies
|
||||
|
||||
## SYNTAX
|
||||
|
||||
```
|
||||
Get-GPOZaurrBroken [[-Forest] <String>] [[-ExcludeDomains] <String[]>] [[-ExcludeDomainControllers] <String[]>]
|
||||
[[-IncludeDomains] <String[]>] [[-IncludeDomainControllers] <String[]>] [-SkipRODC] [[-GPOs] <Array>]
|
||||
[[-IncludeDomains] <String[]>] [[-IncludeDomainControllers] <String[]>] [-SkipRODC]
|
||||
[[-ExtendedForestInformation] <IDictionary>] [-VerifyDomainControllers] [<CommonParameters>]
|
||||
```
|
||||
|
||||
## DESCRIPTION
|
||||
{{ Fill in the Description }}
|
||||
Detects broken or otherwise damaged Group Policies providing insight whether GPO exists in both AD and SYSVOL.
|
||||
It provides few statuses:
|
||||
- Permissions issue - means account couldn't read GPO due to permissions
|
||||
- ObjectClass issue - means that ObjectClass is of type Container, rather than expected groupPolicyContainer
|
||||
- Not available on SYSVOL - means SYSVOL data is missing, yet AD metadata is available
|
||||
- Not available in AD - means AD metadata is missing, yet SYSVOL data is available
|
||||
- Exists - means AD metadata and SYSVOL data are available
|
||||
|
||||
## EXAMPLES
|
||||
|
||||
### Example 1
|
||||
```powershell
|
||||
PS C:\> {{ Add example code here }}
|
||||
### EXAMPLE 1
|
||||
```
|
||||
Get-GPOZaurrBroken -Verbose | Format-Table
|
||||
```
|
||||
|
||||
{{ Add example description here }}
|
||||
|
||||
## PARAMETERS
|
||||
|
||||
### -ExcludeDomainControllers
|
||||
{{ Fill ExcludeDomainControllers Description }}
|
||||
### -Forest
|
||||
Target different Forest, by default current forest is used
|
||||
|
||||
```yaml
|
||||
Type: String
|
||||
Parameter Sets: (All)
|
||||
Aliases: ForestName
|
||||
|
||||
Required: False
|
||||
Position: 1
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -ExcludeDomains
|
||||
Exclude domain from search, by default whole forest is scanned
|
||||
|
||||
```yaml
|
||||
Type: String[]
|
||||
@@ -47,8 +66,9 @@ Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -ExcludeDomains
|
||||
{{ Fill ExcludeDomains Description }}
|
||||
### -ExcludeDomainControllers
|
||||
Exclude specific domain controllers, by default there are no exclusions, as long as VerifyDomainControllers switch is enabled.
|
||||
Otherwise this parameter is ignored.
|
||||
|
||||
```yaml
|
||||
Type: String[]
|
||||
@@ -56,14 +76,61 @@ Parameter Sets: (All)
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
Position: 1
|
||||
Position: 3
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -IncludeDomains
|
||||
Include only specific domains, by default whole forest is scanned
|
||||
|
||||
```yaml
|
||||
Type: String[]
|
||||
Parameter Sets: (All)
|
||||
Aliases: Domain, Domains
|
||||
|
||||
Required: False
|
||||
Position: 4
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -IncludeDomainControllers
|
||||
Include only specific domain controllers, by default all domain controllers are included, as long as VerifyDomainControllers switch is enabled.
|
||||
Otherwise this parameter is ignored.
|
||||
|
||||
```yaml
|
||||
Type: String[]
|
||||
Parameter Sets: (All)
|
||||
Aliases: DomainControllers
|
||||
|
||||
Required: False
|
||||
Position: 5
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -SkipRODC
|
||||
Skip Read-Only Domain Controllers.
|
||||
By default all domain controllers are included.
|
||||
|
||||
```yaml
|
||||
Type: SwitchParameter
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
Position: Named
|
||||
Default value: False
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -ExtendedForestInformation
|
||||
{{ Fill ExtendedForestInformation Description }}
|
||||
Ability to provide Forest Information from another command to speed up processing
|
||||
|
||||
```yaml
|
||||
Type: IDictionary
|
||||
@@ -77,83 +144,8 @@ Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -Forest
|
||||
{{ Fill Forest Description }}
|
||||
|
||||
```yaml
|
||||
Type: String
|
||||
Parameter Sets: (All)
|
||||
Aliases: ForestName
|
||||
|
||||
Required: False
|
||||
Position: 0
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -GPOs
|
||||
{{ Fill GPOs Description }}
|
||||
|
||||
```yaml
|
||||
Type: Array
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
Position: 5
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -IncludeDomainControllers
|
||||
{{ Fill IncludeDomainControllers Description }}
|
||||
|
||||
```yaml
|
||||
Type: String[]
|
||||
Parameter Sets: (All)
|
||||
Aliases: DomainControllers
|
||||
|
||||
Required: False
|
||||
Position: 4
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -IncludeDomains
|
||||
{{ Fill IncludeDomains Description }}
|
||||
|
||||
```yaml
|
||||
Type: String[]
|
||||
Parameter Sets: (All)
|
||||
Aliases: Domain, Domains
|
||||
|
||||
Required: False
|
||||
Position: 3
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -SkipRODC
|
||||
{{ Fill SkipRODC Description }}
|
||||
|
||||
```yaml
|
||||
Type: SwitchParameter
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
Position: Named
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -VerifyDomainControllers
|
||||
{{ Fill VerifyDomainControllers Description }}
|
||||
Forces cmdlet to check GPO Existance on Domain Controllers rather then per domain
|
||||
|
||||
```yaml
|
||||
Type: SwitchParameter
|
||||
@@ -162,7 +154,7 @@ Aliases:
|
||||
|
||||
Required: False
|
||||
Position: Named
|
||||
Default value: None
|
||||
Default value: False
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
@@ -172,11 +164,9 @@ This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable
|
||||
|
||||
## INPUTS
|
||||
|
||||
### None
|
||||
|
||||
## OUTPUTS
|
||||
|
||||
### System.Object
|
||||
## NOTES
|
||||
General notes
|
||||
|
||||
## RELATED LINKS
|
||||
|
||||
@@ -0,0 +1,107 @@
|
||||
---
|
||||
external help file: GPOZaurr-help.xml
|
||||
Module Name: GPOZaurr
|
||||
online version:
|
||||
schema: 2.0.0
|
||||
---
|
||||
|
||||
# Get-GPOZaurrBrokenLink
|
||||
|
||||
## SYNOPSIS
|
||||
Finds any GPO link that doesn't have a matching GPO (already removed GPO).
|
||||
|
||||
## SYNTAX
|
||||
|
||||
```
|
||||
Get-GPOZaurrBrokenLink [[-Forest] <String>] [[-ExcludeDomains] <String[]>] [[-IncludeDomains] <String[]>]
|
||||
[[-ExtendedForestInformation] <IDictionary>] [<CommonParameters>]
|
||||
```
|
||||
|
||||
## DESCRIPTION
|
||||
Finds any GPO link that doesn't have a matching GPO (already removed GPO).
|
||||
|
||||
## EXAMPLES
|
||||
|
||||
### EXAMPLE 1
|
||||
```
|
||||
Get-GPOZaurrBrokenLink -Verbose | Format-Table -AutoSize *
|
||||
```
|
||||
|
||||
### EXAMPLE 2
|
||||
```
|
||||
Get-GPOZaurrBrokenLink -Verbose -IncludeDomains ad.evotec.pl | Format-Table -AutoSize *
|
||||
```
|
||||
|
||||
## PARAMETERS
|
||||
|
||||
### -Forest
|
||||
Target different Forest, by default current forest is used
|
||||
|
||||
```yaml
|
||||
Type: String
|
||||
Parameter Sets: (All)
|
||||
Aliases: ForestName
|
||||
|
||||
Required: False
|
||||
Position: 1
|
||||
Default value: None
|
||||
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: 2
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -IncludeDomains
|
||||
Include only specific domains, by default whole forest is scanned
|
||||
|
||||
```yaml
|
||||
Type: String[]
|
||||
Parameter Sets: (All)
|
||||
Aliases: Domain, Domains
|
||||
|
||||
Required: False
|
||||
Position: 3
|
||||
Default value: None
|
||||
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: 4
|
||||
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
|
||||
|
||||
## OUTPUTS
|
||||
|
||||
## NOTES
|
||||
General notes
|
||||
|
||||
## RELATED LINKS
|
||||
@@ -8,32 +8,96 @@ schema: 2.0.0
|
||||
# Get-GPOZaurrInheritance
|
||||
|
||||
## SYNOPSIS
|
||||
{{ Fill in the Synopsis }}
|
||||
Short description
|
||||
|
||||
## SYNTAX
|
||||
|
||||
```
|
||||
Get-GPOZaurrInheritance [-IncludeBlockedObjects] [-OnlyBlockedInheritance] [[-Forest] <String>]
|
||||
Get-GPOZaurrInheritance [-IncludeBlockedObjects] [-OnlyBlockedInheritance] [-IncludeExcludedObjects]
|
||||
[-IncludeGroupPoliciesForBlockedObjects] [[-Exclusions] <String[]>] [[-Forest] <String>]
|
||||
[[-ExcludeDomains] <String[]>] [[-IncludeDomains] <String[]>] [[-ExtendedForestInformation] <IDictionary>]
|
||||
[<CommonParameters>]
|
||||
```
|
||||
|
||||
## DESCRIPTION
|
||||
{{ Fill in the Description }}
|
||||
Long description
|
||||
|
||||
## EXAMPLES
|
||||
|
||||
### Example 1
|
||||
```powershell
|
||||
PS C:\> {{ Add example code here }}
|
||||
### EXAMPLE 1
|
||||
```
|
||||
$Objects = Get-GPOZaurrInheritance -IncludeBlockedObjects -IncludeExcludedObjects -OnlyBlockedInheritance -Exclusions $ExcludedOU
|
||||
```
|
||||
|
||||
{{ Add example description here }}
|
||||
$Objects | Format-Table
|
||||
|
||||
## PARAMETERS
|
||||
|
||||
### -ExcludeDomains
|
||||
{{ Fill ExcludeDomains Description }}
|
||||
### -IncludeBlockedObjects
|
||||
Include OU's with blocked inheritance.
|
||||
Default disabled
|
||||
|
||||
```yaml
|
||||
Type: SwitchParameter
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
Position: Named
|
||||
Default value: False
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -OnlyBlockedInheritance
|
||||
Show only OU's with blocked inheritance
|
||||
|
||||
```yaml
|
||||
Type: SwitchParameter
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
Position: Named
|
||||
Default value: False
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -IncludeExcludedObjects
|
||||
Show excluded objets.
|
||||
Default disabled
|
||||
|
||||
```yaml
|
||||
Type: SwitchParameter
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
Position: Named
|
||||
Default value: False
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -IncludeGroupPoliciesForBlockedObjects
|
||||
{{ Fill IncludeGroupPoliciesForBlockedObjects Description }}
|
||||
|
||||
```yaml
|
||||
Type: SwitchParameter
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
Position: Named
|
||||
Default value: False
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -Exclusions
|
||||
Provide exclusions for OU's approved by IT.
|
||||
You can provide OU by canonical name or distinguishedName
|
||||
|
||||
```yaml
|
||||
Type: String[]
|
||||
@@ -47,11 +111,26 @@ Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -ExtendedForestInformation
|
||||
{{ Fill ExtendedForestInformation Description }}
|
||||
### -Forest
|
||||
Target different Forest, by default current forest is used
|
||||
|
||||
```yaml
|
||||
Type: IDictionary
|
||||
Type: String
|
||||
Parameter Sets: (All)
|
||||
Aliases: ForestName
|
||||
|
||||
Required: False
|
||||
Position: 2
|
||||
Default value: None
|
||||
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:
|
||||
|
||||
@@ -62,38 +141,8 @@ Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -Forest
|
||||
{{ Fill Forest Description }}
|
||||
|
||||
```yaml
|
||||
Type: String
|
||||
Parameter Sets: (All)
|
||||
Aliases: ForestName
|
||||
|
||||
Required: False
|
||||
Position: 0
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -IncludeBlockedObjects
|
||||
{{ Fill IncludeBlockedObjects Description }}
|
||||
|
||||
```yaml
|
||||
Type: SwitchParameter
|
||||
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[]
|
||||
@@ -101,22 +150,22 @@ Parameter Sets: (All)
|
||||
Aliases: Domain, Domains
|
||||
|
||||
Required: False
|
||||
Position: 2
|
||||
Position: 4
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -OnlyBlockedInheritance
|
||||
{{ Fill OnlyBlockedInheritance Description }}
|
||||
### -ExtendedForestInformation
|
||||
Ability to provide Forest Information from another command to speed up processing
|
||||
|
||||
```yaml
|
||||
Type: SwitchParameter
|
||||
Type: IDictionary
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
Position: Named
|
||||
Position: 5
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
@@ -127,11 +176,9 @@ This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable
|
||||
|
||||
## INPUTS
|
||||
|
||||
### None
|
||||
|
||||
## OUTPUTS
|
||||
|
||||
### System.Object
|
||||
## NOTES
|
||||
General notes
|
||||
|
||||
## RELATED LINKS
|
||||
|
||||
@@ -12,24 +12,32 @@ schema: 2.0.0
|
||||
|
||||
## SYNTAX
|
||||
|
||||
### Linked (Default)
|
||||
```
|
||||
Get-GPOZaurrLink [-Linked <String[]>] [-Limited] [-SkipDuplicates] [-GPOCache <IDictionary>] [-Forest <String>]
|
||||
[-ExcludeDomains <String[]>] [-IncludeDomains <String[]>] [-ExtendedForestInformation <IDictionary>]
|
||||
[-AsHashTable] [-Summary] [<CommonParameters>]
|
||||
```
|
||||
|
||||
### ADObject
|
||||
```
|
||||
Get-GPOZaurrLink -ADObject <ADObject[]> [-Limited] [-SkipDuplicates] [-GPOCache <IDictionary>]
|
||||
[-Forest <String>] [-ExcludeDomains <String[]>] [-IncludeDomains <String[]>]
|
||||
[-ExtendedForestInformation <IDictionary>] [<CommonParameters>]
|
||||
[-ExtendedForestInformation <IDictionary>] [-AsHashTable] [-Summary] [<CommonParameters>]
|
||||
```
|
||||
|
||||
### Filter
|
||||
```
|
||||
Get-GPOZaurrLink [-Filter <String>] [-SearchBase <String>] [-SearchScope <ADSearchScope>] [-Limited]
|
||||
[-SkipDuplicates] [-GPOCache <IDictionary>] [-Forest <String>] [-ExcludeDomains <String[]>]
|
||||
[-IncludeDomains <String[]>] [-ExtendedForestInformation <IDictionary>] [<CommonParameters>]
|
||||
[-IncludeDomains <String[]>] [-ExtendedForestInformation <IDictionary>] [-AsHashTable] [-Summary]
|
||||
[<CommonParameters>]
|
||||
```
|
||||
|
||||
### Linked
|
||||
### Site
|
||||
```
|
||||
Get-GPOZaurrLink -Linked <String> [-Limited] [-SkipDuplicates] [-GPOCache <IDictionary>] [-Forest <String>]
|
||||
[-ExcludeDomains <String[]>] [-IncludeDomains <String[]>] [-ExtendedForestInformation <IDictionary>]
|
||||
Get-GPOZaurrLink [-Site <String[]>] [-GPOCache <IDictionary>] [-Forest <String>] [-ExcludeDomains <String[]>]
|
||||
[-IncludeDomains <String[]>] [-ExtendedForestInformation <IDictionary>] [-AsHashTable] [-Summary]
|
||||
[<CommonParameters>]
|
||||
```
|
||||
|
||||
@@ -62,6 +70,21 @@ Accept pipeline input: True (ByPropertyName, ByValue)
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -AsHashTable
|
||||
{{ Fill AsHashTable Description }}
|
||||
|
||||
```yaml
|
||||
Type: SwitchParameter
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
Position: Named
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -ExcludeDomains
|
||||
{{ Fill ExcludeDomains Description }}
|
||||
|
||||
@@ -157,7 +180,7 @@ Accept wildcard characters: False
|
||||
|
||||
```yaml
|
||||
Type: SwitchParameter
|
||||
Parameter Sets: (All)
|
||||
Parameter Sets: Linked, ADObject, Filter
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
@@ -171,12 +194,12 @@ Accept wildcard characters: False
|
||||
{{ Fill Linked Description }}
|
||||
|
||||
```yaml
|
||||
Type: String
|
||||
Type: String[]
|
||||
Parameter Sets: Linked
|
||||
Aliases:
|
||||
Accepted values: Root, DomainControllers, Site, Other
|
||||
Accepted values: All, Root, DomainControllers, Site, OrganizationalUnit
|
||||
|
||||
Required: True
|
||||
Required: False
|
||||
Position: Named
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
@@ -214,9 +237,39 @@ Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -Site
|
||||
{{ Fill Site Description }}
|
||||
|
||||
```yaml
|
||||
Type: String[]
|
||||
Parameter Sets: Site
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
Position: Named
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -SkipDuplicates
|
||||
{{ Fill SkipDuplicates Description }}
|
||||
|
||||
```yaml
|
||||
Type: SwitchParameter
|
||||
Parameter Sets: Linked, ADObject, Filter
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
Position: Named
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -Summary
|
||||
{{ Fill Summary Description }}
|
||||
|
||||
```yaml
|
||||
Type: SwitchParameter
|
||||
Parameter Sets: (All)
|
||||
|
||||
@@ -0,0 +1,138 @@
|
||||
---
|
||||
external help file: GPOZaurr-help.xml
|
||||
Module Name: GPOZaurr
|
||||
online version:
|
||||
schema: 2.0.0
|
||||
---
|
||||
|
||||
# Get-GPOZaurrOrganizationalUnit
|
||||
|
||||
## SYNOPSIS
|
||||
{{ Fill in the Synopsis }}
|
||||
|
||||
## SYNTAX
|
||||
|
||||
```
|
||||
Get-GPOZaurrOrganizationalUnit [[-Forest] <String>] [[-ExcludeDomains] <String[]>]
|
||||
[[-IncludeDomains] <String[]>] [[-ExtendedForestInformation] <IDictionary>] [[-Option] <String[]>]
|
||||
[[-ExcludeOrganizationalUnit] <String[]>] [<CommonParameters>]
|
||||
```
|
||||
|
||||
## DESCRIPTION
|
||||
{{ Fill in the Description }}
|
||||
|
||||
## EXAMPLES
|
||||
|
||||
### Example 1
|
||||
```powershell
|
||||
PS C:\> {{ Add example code here }}
|
||||
```
|
||||
|
||||
{{ Add example description here }}
|
||||
|
||||
## PARAMETERS
|
||||
|
||||
### -ExcludeDomains
|
||||
{{ Fill ExcludeDomains Description }}
|
||||
|
||||
```yaml
|
||||
Type: String[]
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
Position: 1
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -ExcludeOrganizationalUnit
|
||||
{{ Fill ExcludeOrganizationalUnit Description }}
|
||||
|
||||
```yaml
|
||||
Type: String[]
|
||||
Parameter Sets: (All)
|
||||
Aliases: ExcludeOU, Exclusions
|
||||
|
||||
Required: False
|
||||
Position: 5
|
||||
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: 3
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -Forest
|
||||
{{ Fill Forest Description }}
|
||||
|
||||
```yaml
|
||||
Type: String
|
||||
Parameter Sets: (All)
|
||||
Aliases: ForestName
|
||||
|
||||
Required: False
|
||||
Position: 0
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -IncludeDomains
|
||||
{{ Fill IncludeDomains Description }}
|
||||
|
||||
```yaml
|
||||
Type: String[]
|
||||
Parameter Sets: (All)
|
||||
Aliases: Domain, Domains
|
||||
|
||||
Required: False
|
||||
Position: 2
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -Option
|
||||
{{ Fill Option Description }}
|
||||
|
||||
```yaml
|
||||
Type: String[]
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
Accepted values: OK, Unlink, Delete
|
||||
|
||||
Required: False
|
||||
Position: 4
|
||||
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
|
||||
|
||||
## RELATED LINKS
|
||||
@@ -16,21 +16,21 @@ Gets owners of GPOs from Active Directory and SYSVOL
|
||||
```
|
||||
Get-GPOZaurrOwner [-IncludeSysvol] [-SkipBroken] [-Forest <String>] [-ExcludeDomains <String[]>]
|
||||
[-IncludeDomains <String[]>] [-ExtendedForestInformation <IDictionary>]
|
||||
[-ADAdministrativeGroups <IDictionary>] [<CommonParameters>]
|
||||
[-ADAdministrativeGroups <IDictionary>] [-ApprovedOwner <String[]>] [<CommonParameters>]
|
||||
```
|
||||
|
||||
### GPOName
|
||||
```
|
||||
Get-GPOZaurrOwner [-GPOName <String>] [-IncludeSysvol] [-SkipBroken] [-Forest <String>]
|
||||
[-ExcludeDomains <String[]>] [-IncludeDomains <String[]>] [-ExtendedForestInformation <IDictionary>]
|
||||
[-ADAdministrativeGroups <IDictionary>] [<CommonParameters>]
|
||||
[-ADAdministrativeGroups <IDictionary>] [-ApprovedOwner <String[]>] [<CommonParameters>]
|
||||
```
|
||||
|
||||
### GPOGUID
|
||||
```
|
||||
Get-GPOZaurrOwner [-GPOGuid <String>] [-IncludeSysvol] [-SkipBroken] [-Forest <String>]
|
||||
[-ExcludeDomains <String[]>] [-IncludeDomains <String[]>] [-ExtendedForestInformation <IDictionary>]
|
||||
[-ADAdministrativeGroups <IDictionary>] [<CommonParameters>]
|
||||
[-ADAdministrativeGroups <IDictionary>] [-ApprovedOwner <String[]>] [<CommonParameters>]
|
||||
```
|
||||
|
||||
## DESCRIPTION
|
||||
@@ -187,6 +187,21 @@ Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -ApprovedOwner
|
||||
Ability to provide different owner (non administrative that still is approved for use)
|
||||
|
||||
```yaml
|
||||
Type: String[]
|
||||
Parameter Sets: (All)
|
||||
Aliases: Exclusion, Exclusions
|
||||
|
||||
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).
|
||||
|
||||
|
||||
@@ -0,0 +1,106 @@
|
||||
---
|
||||
external help file: GPOZaurr-help.xml
|
||||
Module Name: GPOZaurr
|
||||
online version:
|
||||
schema: 2.0.0
|
||||
---
|
||||
|
||||
# Get-GPOZaurrPermissionAnalysis
|
||||
|
||||
## SYNOPSIS
|
||||
{{ Fill in the Synopsis }}
|
||||
|
||||
## SYNTAX
|
||||
|
||||
```
|
||||
Get-GPOZaurrPermissionAnalysis [[-Forest] <String>] [[-ExcludeDomains] <String[]>]
|
||||
[[-IncludeDomains] <String[]>] [[-Permissions] <Array>] [<CommonParameters>]
|
||||
```
|
||||
|
||||
## DESCRIPTION
|
||||
{{ Fill in the Description }}
|
||||
|
||||
## EXAMPLES
|
||||
|
||||
### Example 1
|
||||
```powershell
|
||||
PS C:\> {{ Add example code here }}
|
||||
```
|
||||
|
||||
{{ Add example description here }}
|
||||
|
||||
## PARAMETERS
|
||||
|
||||
### -ExcludeDomains
|
||||
{{ Fill ExcludeDomains Description }}
|
||||
|
||||
```yaml
|
||||
Type: String[]
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
Position: 1
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -Forest
|
||||
{{ Fill Forest Description }}
|
||||
|
||||
```yaml
|
||||
Type: String
|
||||
Parameter Sets: (All)
|
||||
Aliases: ForestName
|
||||
|
||||
Required: False
|
||||
Position: 0
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -IncludeDomains
|
||||
{{ Fill IncludeDomains Description }}
|
||||
|
||||
```yaml
|
||||
Type: String[]
|
||||
Parameter Sets: (All)
|
||||
Aliases: Domain, Domains
|
||||
|
||||
Required: False
|
||||
Position: 2
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -Permissions
|
||||
{{ Fill Permissions Description }}
|
||||
|
||||
```yaml
|
||||
Type: Array
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
Position: 3
|
||||
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
|
||||
|
||||
## RELATED LINKS
|
||||
@@ -8,7 +8,7 @@ schema: 2.0.0
|
||||
# Get-GPOZaurrSysvolDFSR
|
||||
|
||||
## SYNOPSIS
|
||||
{{ Fill in the Synopsis }}
|
||||
Gets DFSR information from the SYSVOL DFSR
|
||||
|
||||
## SYNTAX
|
||||
|
||||
@@ -20,21 +20,36 @@ Get-GPOZaurrSysvolDFSR [[-Forest] <String>] [[-ExcludeDomains] <String[]>]
|
||||
```
|
||||
|
||||
## DESCRIPTION
|
||||
{{ Fill in the Description }}
|
||||
Gets DFSR information from the SYSVOL DFSR
|
||||
|
||||
## EXAMPLES
|
||||
|
||||
### Example 1
|
||||
```powershell
|
||||
PS C:\> {{ Add example code here }}
|
||||
### EXAMPLE 1
|
||||
```
|
||||
$DFSR = Get-GPOZaurrSysvolDFSR
|
||||
```
|
||||
|
||||
{{ Add example description here }}
|
||||
$DFSR | Format-Table *
|
||||
|
||||
## PARAMETERS
|
||||
|
||||
### -ExcludeDomainControllers
|
||||
{{ Fill ExcludeDomainControllers Description }}
|
||||
### -Forest
|
||||
Target different Forest, by default current forest is used
|
||||
|
||||
```yaml
|
||||
Type: String
|
||||
Parameter Sets: (All)
|
||||
Aliases: ForestName
|
||||
|
||||
Required: False
|
||||
Position: 1
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -ExcludeDomains
|
||||
Exclude domain from search, by default whole forest is scanned
|
||||
|
||||
```yaml
|
||||
Type: String[]
|
||||
@@ -48,74 +63,15 @@ Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -ExcludeDomains
|
||||
{{ Fill ExcludeDomains Description }}
|
||||
### -ExcludeDomainControllers
|
||||
Exclude specific domain controllers, by default there are no exclusions, as long as VerifyDomainControllers switch is enabled.
|
||||
Otherwise this parameter is ignored.
|
||||
|
||||
```yaml
|
||||
Type: String[]
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
Position: 1
|
||||
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: 5
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -Forest
|
||||
{{ Fill Forest Description }}
|
||||
|
||||
```yaml
|
||||
Type: String
|
||||
Parameter Sets: (All)
|
||||
Aliases: ForestName
|
||||
|
||||
Required: False
|
||||
Position: 0
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -IncludeDomainControllers
|
||||
{{ Fill IncludeDomainControllers Description }}
|
||||
|
||||
```yaml
|
||||
Type: String[]
|
||||
Parameter Sets: (All)
|
||||
Aliases: DomainControllers
|
||||
|
||||
Required: False
|
||||
Position: 4
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -IncludeDomains
|
||||
{{ Fill IncludeDomains Description }}
|
||||
|
||||
```yaml
|
||||
Type: String[]
|
||||
Parameter Sets: (All)
|
||||
Aliases: Domain, Domains
|
||||
|
||||
Required: False
|
||||
Position: 3
|
||||
Default value: None
|
||||
@@ -123,11 +79,58 @@ Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -SearchDFSR
|
||||
{{ Fill SearchDFSR Description }}
|
||||
### -IncludeDomains
|
||||
Include only specific domains, by default whole forest is scanned
|
||||
|
||||
```yaml
|
||||
Type: String
|
||||
Type: String[]
|
||||
Parameter Sets: (All)
|
||||
Aliases: Domain, Domains
|
||||
|
||||
Required: False
|
||||
Position: 4
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -IncludeDomainControllers
|
||||
Include only specific domain controllers, by default all domain controllers are included, as long as VerifyDomainControllers switch is enabled.
|
||||
Otherwise this parameter is ignored.
|
||||
|
||||
```yaml
|
||||
Type: String[]
|
||||
Parameter Sets: (All)
|
||||
Aliases: DomainControllers
|
||||
|
||||
Required: False
|
||||
Position: 5
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -SkipRODC
|
||||
Skip Read-Only Domain Controllers.
|
||||
By default all domain controllers are included.
|
||||
|
||||
```yaml
|
||||
Type: SwitchParameter
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
Position: Named
|
||||
Default value: False
|
||||
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:
|
||||
|
||||
@@ -138,17 +141,18 @@ Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -SkipRODC
|
||||
{{ Fill SkipRODC Description }}
|
||||
### -SearchDFSR
|
||||
Define DFSR Share.
|
||||
By default it uses SYSVOL Share
|
||||
|
||||
```yaml
|
||||
Type: SwitchParameter
|
||||
Type: String
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
Position: Named
|
||||
Default value: None
|
||||
Position: 7
|
||||
Default value: SYSVOL Share
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
@@ -158,11 +162,9 @@ This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable
|
||||
|
||||
## INPUTS
|
||||
|
||||
### None
|
||||
|
||||
## OUTPUTS
|
||||
|
||||
### System.Object
|
||||
## NOTES
|
||||
General notes
|
||||
|
||||
## RELATED LINKS
|
||||
|
||||
@@ -0,0 +1,178 @@
|
||||
---
|
||||
external help file: GPOZaurr-help.xml
|
||||
Module Name: GPOZaurr
|
||||
online version:
|
||||
schema: 2.0.0
|
||||
---
|
||||
|
||||
# Get-GPOZaurrUpdates
|
||||
|
||||
## SYNOPSIS
|
||||
Gets the list of GPOs created or updated in the last X number of days.
|
||||
|
||||
## SYNTAX
|
||||
|
||||
### DateRange (Default)
|
||||
```
|
||||
Get-GPOZaurrUpdates [-Forest <String>] [-ExcludeDomains <String[]>] [-IncludeDomains <String[]>]
|
||||
-DateRange <String> [-DateProperty <String[]>] [-ExtendedForestInformation <IDictionary>] [<CommonParameters>]
|
||||
```
|
||||
|
||||
### Dates
|
||||
```
|
||||
Get-GPOZaurrUpdates [-Forest <String>] [-ExcludeDomains <String[]>] [-IncludeDomains <String[]>]
|
||||
-DateFrom <DateTime> -DateTo <DateTime> [-DateProperty <String[]>] [-ExtendedForestInformation <IDictionary>]
|
||||
[<CommonParameters>]
|
||||
```
|
||||
|
||||
## DESCRIPTION
|
||||
Gets the list of GPOs created or updated in the last X number of days.
|
||||
|
||||
## EXAMPLES
|
||||
|
||||
### EXAMPLE 1
|
||||
```
|
||||
Get-GPOZaurrUpdates -DateRange Last14Days -DateProperty WhenCreated, WhenChanged -Verbose -IncludeDomains 'ad.evotec.pl' | Format-List
|
||||
```
|
||||
|
||||
### EXAMPLE 2
|
||||
```
|
||||
Get-GPOZaurrUpdates -DateRange Last14Days -DateProperty WhenCreated -Verbose | Format-Table
|
||||
```
|
||||
|
||||
## PARAMETERS
|
||||
|
||||
### -Forest
|
||||
Target different Forest, by default current forest is used
|
||||
|
||||
```yaml
|
||||
Type: String
|
||||
Parameter Sets: (All)
|
||||
Aliases: ForestName
|
||||
|
||||
Required: False
|
||||
Position: Named
|
||||
Default value: None
|
||||
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
|
||||
Include only specific domains, by default whole forest is scanned
|
||||
ą
|
||||
|
||||
```yaml
|
||||
Type: String[]
|
||||
Parameter Sets: (All)
|
||||
Aliases: Domain, Domains
|
||||
|
||||
Required: False
|
||||
Position: Named
|
||||
Default value: None
|
||||
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
|
||||
|
||||
## OUTPUTS
|
||||
|
||||
## NOTES
|
||||
General notes
|
||||
|
||||
## RELATED LINKS
|
||||
+130
-89
@@ -8,62 +8,57 @@ schema: 2.0.0
|
||||
# Invoke-GPOZaurr
|
||||
|
||||
## SYNOPSIS
|
||||
{{ Fill in the Synopsis }}
|
||||
Single cmdlet that provides 360 degree overview of Group Policies in Active Directory Forest.
|
||||
|
||||
## SYNTAX
|
||||
|
||||
```
|
||||
Invoke-GPOZaurr [[-ExcludeGroupPolicies] <ScriptBlock>] [-FilePath <String>] [[-Type] <String[]>] [-PassThru]
|
||||
[-HideHTML] [-HideSteps] [-ShowError] [-ShowWarning] [-Forest <String>] [-ExcludeDomains <String[]>]
|
||||
[-IncludeDomains <String[]>] [<CommonParameters>]
|
||||
Invoke-GPOZaurr [[-Exclusions] <Object>] [-FilePath <String>] [[-Type] <String[]>] [-PassThru] [-HideHTML]
|
||||
[-HideSteps] [-ShowError] [-ShowWarning] [-Forest <String>] [-ExcludeDomains <String[]>]
|
||||
[-IncludeDomains <String[]>] [-Online] [-SplitReports] [<CommonParameters>]
|
||||
```
|
||||
|
||||
## DESCRIPTION
|
||||
{{ Fill in the Description }}
|
||||
Single cmdlet that provides 360 degree overview of Group Policies in Active Directory Forest with ability to pick reports and export to HTML.
|
||||
|
||||
## EXAMPLES
|
||||
|
||||
### Example 1
|
||||
```powershell
|
||||
PS C:\> {{ Add example code here }}
|
||||
### EXAMPLE 1
|
||||
```
|
||||
Invoke-GPOZaurr
|
||||
```
|
||||
|
||||
{{ Add example description here }}
|
||||
### EXAMPLE 2
|
||||
```
|
||||
Invoke-GPOZaurr -Type GPOOrganizationalUnit -Online -FilePath $PSScriptRoot\Reports\GPOZaurrOU.html -Exclusions @(
|
||||
```
|
||||
|
||||
'*OU=Production,DC=ad,DC=evotec,DC=pl'
|
||||
)
|
||||
|
||||
## PARAMETERS
|
||||
|
||||
### -ExcludeDomains
|
||||
{{ Fill ExcludeDomains Description }}
|
||||
### -Exclusions
|
||||
Allows to mark as excluded some Group Policies or Organizational Units depending on type.
|
||||
Can be a scriptblock or array depending on supported way by underlying report.
|
||||
Not every report support exclusions.
|
||||
Not every report support exclusions the same way.
|
||||
Exclusions should be used only if there is single report being asked for.
|
||||
|
||||
```yaml
|
||||
Type: String[]
|
||||
Type: Object
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
Aliases: ExcludeGroupPolicies, ExclusionsCode
|
||||
|
||||
Required: False
|
||||
Position: Named
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -ExcludeGroupPolicies
|
||||
{{ Fill ExcludeGroupPolicies Description }}
|
||||
|
||||
```yaml
|
||||
Type: ScriptBlock
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
Position: 1
|
||||
Position: 2
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -FilePath
|
||||
{{ Fill FilePath Description }}
|
||||
Path to the file where the report will be saved.
|
||||
|
||||
```yaml
|
||||
Type: String
|
||||
@@ -77,8 +72,100 @@ Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -Type
|
||||
Type of report to be generated from a list of available reports.
|
||||
|
||||
```yaml
|
||||
Type: String[]
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
Position: 1
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -PassThru
|
||||
Returns created objects after the report is done
|
||||
|
||||
```yaml
|
||||
Type: SwitchParameter
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
Position: Named
|
||||
Default value: False
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -HideHTML
|
||||
Do not auto open HTML report in default browser
|
||||
|
||||
```yaml
|
||||
Type: SwitchParameter
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
Position: Named
|
||||
Default value: False
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -HideSteps
|
||||
Do not show steps in report
|
||||
|
||||
```yaml
|
||||
Type: SwitchParameter
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
Position: Named
|
||||
Default value: False
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -ShowError
|
||||
Show errors in HTML report.
|
||||
Useful in case the report is being run as Scheduled Task
|
||||
|
||||
```yaml
|
||||
Type: SwitchParameter
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
Position: Named
|
||||
Default value: False
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -ShowWarning
|
||||
Show warnings in HTML report.
|
||||
Useful in case the report is being run as Scheduled Task
|
||||
|
||||
```yaml
|
||||
Type: SwitchParameter
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
Position: Named
|
||||
Default value: False
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -Forest
|
||||
{{ Fill Forest Description }}
|
||||
Target different Forest, by default current forest is used
|
||||
|
||||
```yaml
|
||||
Type: String
|
||||
@@ -92,26 +179,11 @@ Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -HideHTML
|
||||
{{ Fill HideHTML Description }}
|
||||
### -ExcludeDomains
|
||||
Exclude domain from search, by default whole forest is scanned
|
||||
|
||||
```yaml
|
||||
Type: SwitchParameter
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
Position: Named
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -HideSteps
|
||||
{{ Fill HideSteps Description }}
|
||||
|
||||
```yaml
|
||||
Type: SwitchParameter
|
||||
Type: String[]
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
|
||||
@@ -123,7 +195,7 @@ Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -IncludeDomains
|
||||
{{ Fill IncludeDomains Description }}
|
||||
Include only specific domains, by default whole forest is scanned
|
||||
|
||||
```yaml
|
||||
Type: String[]
|
||||
@@ -137,8 +209,8 @@ Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -PassThru
|
||||
{{ Fill PassThru Description }}
|
||||
### -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.
|
||||
|
||||
```yaml
|
||||
Type: SwitchParameter
|
||||
@@ -147,13 +219,14 @@ Aliases:
|
||||
|
||||
Required: False
|
||||
Position: Named
|
||||
Default value: None
|
||||
Default value: False
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -ShowError
|
||||
{{ Fill ShowError Description }}
|
||||
### -SplitReports
|
||||
Split report into multiple files, one for each report.
|
||||
This can be useful for large domains with huge reports.
|
||||
|
||||
```yaml
|
||||
Type: SwitchParameter
|
||||
@@ -162,37 +235,7 @@ Aliases:
|
||||
|
||||
Required: False
|
||||
Position: Named
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -ShowWarning
|
||||
{{ Fill ShowWarning Description }}
|
||||
|
||||
```yaml
|
||||
Type: SwitchParameter
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
Position: Named
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -Type
|
||||
{{ Fill Type Description }}
|
||||
|
||||
```yaml
|
||||
Type: String[]
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
Position: 0
|
||||
Default value: None
|
||||
Default value: False
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
@@ -202,11 +245,9 @@ This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable
|
||||
|
||||
## INPUTS
|
||||
|
||||
### None
|
||||
|
||||
## OUTPUTS
|
||||
|
||||
### System.Object
|
||||
## NOTES
|
||||
General notes
|
||||
|
||||
## RELATED LINKS
|
||||
|
||||
@@ -298,7 +298,7 @@ Accept wildcard characters: False
|
||||
Type: String
|
||||
Parameter Sets: Linked
|
||||
Aliases:
|
||||
Accepted values: Root, DomainControllers, Site, Other
|
||||
Accepted values: Root, DomainControllers, Site, OrganizationalUnit
|
||||
|
||||
Required: True
|
||||
Position: Named
|
||||
|
||||
@@ -14,7 +14,7 @@ schema: 2.0.0
|
||||
|
||||
```
|
||||
Invoke-GPOZaurrSupport [[-Type] <String>] [[-ComputerName] <String>] [[-UserName] <String>] [[-Path] <String>]
|
||||
[[-Splitter] <String>] [-PreventShow] [-Offline] [-ForceGPResult] [<CommonParameters>]
|
||||
[[-Splitter] <String>] [-PreventShow] [-Online] [<CommonParameters>]
|
||||
```
|
||||
|
||||
## DESCRIPTION
|
||||
@@ -46,23 +46,8 @@ Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -ForceGPResult
|
||||
{{ Fill ForceGPResult Description }}
|
||||
|
||||
```yaml
|
||||
Type: SwitchParameter
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
Position: Named
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -Offline
|
||||
{{ Fill Offline Description }}
|
||||
### -Online
|
||||
{{ Fill Online Description }}
|
||||
|
||||
```yaml
|
||||
Type: SwitchParameter
|
||||
|
||||
+32
-7
@@ -26,11 +26,15 @@ 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 }}
|
||||
|
||||
### [Get-GPOZaurr](Get-GPOZaurr.md)
|
||||
{{ Fill in the Synopsis }}
|
||||
Gets information about all Group Policies.
|
||||
Similar to what Get-GPO provides by default.
|
||||
|
||||
### [Get-GPOZaurrAD](Get-GPOZaurrAD.md)
|
||||
{{ Fill in the Synopsis }}
|
||||
@@ -39,7 +43,10 @@ Provides Backup functionality to Group Policies
|
||||
{{ Fill in the Synopsis }}
|
||||
|
||||
### [Get-GPOZaurrBroken](Get-GPOZaurrBroken.md)
|
||||
{{ Fill in the Synopsis }}
|
||||
Detects broken or otherwise damaged Group Policies
|
||||
|
||||
### [Get-GPOZaurrBrokenLink](Get-GPOZaurrBrokenLink.md)
|
||||
Finds any GPO link that doesn't have a matching GPO (already removed GPO).
|
||||
|
||||
### [Get-GPOZaurrDictionary](Get-GPOZaurrDictionary.md)
|
||||
{{ Fill in the Synopsis }}
|
||||
@@ -57,7 +64,7 @@ Provides Backup functionality to Group Policies
|
||||
{{ Fill in the Synopsis }}
|
||||
|
||||
### [Get-GPOZaurrInheritance](Get-GPOZaurrInheritance.md)
|
||||
{{ Fill in the Synopsis }}
|
||||
Short description
|
||||
|
||||
### [Get-GPOZaurrLegacyFiles](Get-GPOZaurrLegacyFiles.md)
|
||||
{{ Fill in the Synopsis }}
|
||||
@@ -71,6 +78,9 @@ Provides Backup functionality to Group Policies
|
||||
### [Get-GPOZaurrNetLogon](Get-GPOZaurrNetLogon.md)
|
||||
{{ Fill in the Synopsis }}
|
||||
|
||||
### [Get-GPOZaurrOrganizationalUnit](Get-GPOZaurrOrganizationalUnit.md)
|
||||
{{ Fill in the Synopsis }}
|
||||
|
||||
### [Get-GPOZaurrOwner](Get-GPOZaurrOwner.md)
|
||||
Gets owners of GPOs from Active Directory and SYSVOL
|
||||
|
||||
@@ -80,6 +90,9 @@ Tries to find CPassword in Group Policies or given path and translate it to read
|
||||
### [Get-GPOZaurrPermission](Get-GPOZaurrPermission.md)
|
||||
{{ Fill in the Synopsis }}
|
||||
|
||||
### [Get-GPOZaurrPermissionAnalysis](Get-GPOZaurrPermissionAnalysis.md)
|
||||
{{ Fill in the Synopsis }}
|
||||
|
||||
### [Get-GPOZaurrPermissionConsistency](Get-GPOZaurrPermissionConsistency.md)
|
||||
{{ Fill in the Synopsis }}
|
||||
|
||||
@@ -93,13 +106,16 @@ Detects Group Policy missing Authenticated Users permission while not having hig
|
||||
{{ Fill in the Synopsis }}
|
||||
|
||||
### [Get-GPOZaurrSysvolDFSR](Get-GPOZaurrSysvolDFSR.md)
|
||||
{{ Fill in the Synopsis }}
|
||||
Gets DFSR information from the SYSVOL DFSR
|
||||
|
||||
### [Get-GPOZaurrUpdates](Get-GPOZaurrUpdates.md)
|
||||
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
|
||||
|
||||
### [Invoke-GPOZaurr](Invoke-GPOZaurr.md)
|
||||
{{ Fill in the Synopsis }}
|
||||
Single cmdlet that provides 360 degree overview of Group Policies in Active Directory Forest.
|
||||
|
||||
### [Invoke-GPOZaurrContent](Invoke-GPOZaurrContent.md)
|
||||
{{ Fill in the Synopsis }}
|
||||
@@ -123,7 +139,7 @@ Enables or disables user/computer section of group policy based on it's content.
|
||||
{{ Fill in the Synopsis }}
|
||||
|
||||
### [Remove-GPOZaurrBroken](Remove-GPOZaurrBroken.md)
|
||||
{{ Fill in the Synopsis }}
|
||||
Finds and removes broken Group Policies from SYSVOL or AD or both.
|
||||
|
||||
### [Remove-GPOZaurrDuplicateObject](Remove-GPOZaurrDuplicateObject.md)
|
||||
{{ Fill in the Synopsis }}
|
||||
@@ -134,13 +150,22 @@ Enables or disables user/computer section of group policy based on it's content.
|
||||
### [Remove-GPOZaurrLegacyFiles](Remove-GPOZaurrLegacyFiles.md)
|
||||
{{ Fill in the Synopsis }}
|
||||
|
||||
### [Remove-GPOZaurrLinkEmptyOU](Remove-GPOZaurrLinkEmptyOU.md)
|
||||
{{ Fill in the Synopsis }}
|
||||
|
||||
### [Remove-GPOZaurrPermission](Remove-GPOZaurrPermission.md)
|
||||
{{ Fill in the Synopsis }}
|
||||
|
||||
### [Remove-GPOZaurrWMI](Remove-GPOZaurrWMI.md)
|
||||
{{ Fill in the Synopsis }}
|
||||
|
||||
### [Repair-GPOZaurrBrokenLink](Repair-GPOZaurrBrokenLink.md)
|
||||
Removes any link to GPO that no longer exists.
|
||||
|
||||
### [Repair-GPOZaurrNetLogonOwner](Repair-GPOZaurrNetLogonOwner.md)
|
||||
Sets new owner to each file in NetLogon share.
|
||||
|
||||
### [Repair-GPOZaurrPermission](Repair-GPOZaurrPermission.md)
|
||||
{{ Fill in the Synopsis }}
|
||||
|
||||
### [Repair-GPOZaurrPermissionConsistency](Repair-GPOZaurrPermissionConsistency.md)
|
||||
@@ -150,7 +175,7 @@ Enables or disables user/computer section of group policy based on it's content.
|
||||
{{ Fill in the Synopsis }}
|
||||
|
||||
### [Save-GPOZaurrFiles](Save-GPOZaurrFiles.md)
|
||||
{{ Fill in the Synopsis }}
|
||||
Exports GPO XML data to files and saves it to a given path
|
||||
|
||||
### [Set-GPOOwner](Set-GPOOwner.md)
|
||||
Used within Invoke-GPOZaurrPermission only.
|
||||
|
||||
+17
-2
@@ -16,7 +16,7 @@ schema: 2.0.0
|
||||
Remove-GPOZaurr [[-ExcludeGroupPolicies] <ScriptBlock>] [-Type] <String[]> [-LimitProcessing <Int32>]
|
||||
[-Forest <String>] [-ExcludeDomains <String[]>] [-IncludeDomains <String[]>]
|
||||
[-ExtendedForestInformation <IDictionary>] [-GPOPath <String[]>] [-BackupPath <String>] [-BackupDated]
|
||||
[-WhatIf] [-Confirm] [<CommonParameters>]
|
||||
[-RequireDays <Int32>] [-WhatIf] [-Confirm] [<CommonParameters>]
|
||||
```
|
||||
|
||||
## DESCRIPTION
|
||||
@@ -183,6 +183,21 @@ Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -RequireDays
|
||||
{{ Fill RequireDays Description }}
|
||||
|
||||
```yaml
|
||||
Type: Int32
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
Position: Named
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -Type
|
||||
{{ Fill Type Description }}
|
||||
|
||||
@@ -190,7 +205,7 @@ Accept wildcard characters: False
|
||||
Type: String[]
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
Accepted values: Empty, Unlinked, Disabled
|
||||
Accepted values: Empty, Unlinked, Disabled, NoApplyPermission
|
||||
|
||||
Required: True
|
||||
Position: 0
|
||||
|
||||
@@ -8,35 +8,63 @@ schema: 2.0.0
|
||||
# Remove-GPOZaurrBroken
|
||||
|
||||
## SYNOPSIS
|
||||
{{ Fill in the Synopsis }}
|
||||
Finds and removes broken Group Policies from SYSVOL or AD or both.
|
||||
|
||||
## SYNTAX
|
||||
|
||||
```
|
||||
Remove-GPOZaurrBroken [[-Type] <String[]>] [[-BackupPath] <String>] [-BackupDated] [[-LimitProcessing] <Int32>]
|
||||
[[-Forest] <String>] [[-ExcludeDomains] <String[]>] [[-IncludeDomains] <String[]>]
|
||||
[[-ExtendedForestInformation] <IDictionary>] [-WhatIf] [-Confirm] [<CommonParameters>]
|
||||
Remove-GPOZaurrBroken [-Type] <String[]> [-BackupPath <String>] [-BackupDated] [-LimitProcessing <Int32>]
|
||||
[-Forest <String>] [-ExcludeDomains <String[]>] [-IncludeDomains <String[]>]
|
||||
[-ExtendedForestInformation <IDictionary>] [-WhatIf] [-Confirm] [<CommonParameters>]
|
||||
```
|
||||
|
||||
## DESCRIPTION
|
||||
{{ Fill in the Description }}
|
||||
Finds and removes broken Group Policies from SYSVOL or AD or both.
|
||||
Assesment is based on Get-GPOZaurrBroken and there are 3 supported types:
|
||||
- AD - meaning GPOs which have no SYSVOL content will be deleted from AD
|
||||
- SYSVOL - meaning GPOs which have no AD content will be deleted from SYSVOL
|
||||
- ObjectClass - meaning GPOs which have ObjectClass category of Container rather than groupPolicyContainer will be deleted from AD & SYSVOL
|
||||
|
||||
## EXAMPLES
|
||||
|
||||
### Example 1
|
||||
```powershell
|
||||
PS C:\> {{ Add example code here }}
|
||||
### EXAMPLE 1
|
||||
```
|
||||
Remove-GPOZaurrBroken -Verbose -WhatIf -Type AD, SYSVOL
|
||||
```
|
||||
|
||||
{{ Add example description here }}
|
||||
### EXAMPLE 2
|
||||
```
|
||||
Remove-GPOZaurrBroken -Verbose -WhatIf -Type AD, SYSVOL -IncludeDomains 'ad.evotec.pl' -LimitProcessing 2
|
||||
```
|
||||
|
||||
### EXAMPLE 3
|
||||
```
|
||||
Remove-GPOZaurrBroken -Verbose -IncludeDomains 'ad.evotec.xyz' -BackupPath $Env:UserProfile\Desktop\MyBackup1 -WhatIf -Type AD, SYSVOL
|
||||
```
|
||||
|
||||
## PARAMETERS
|
||||
|
||||
### -BackupDated
|
||||
{{ Fill BackupDated Description }}
|
||||
### -Type
|
||||
Choose one or more types to delete.
|
||||
Options are AD, ObjectClass, SYSVOL
|
||||
|
||||
```yaml
|
||||
Type: SwitchParameter
|
||||
Type: String[]
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
|
||||
Required: True
|
||||
Position: 1
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -BackupPath
|
||||
Path to optional backup of SYSVOL content before deletion
|
||||
|
||||
```yaml
|
||||
Type: String
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
|
||||
@@ -47,28 +75,44 @@ Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -BackupPath
|
||||
{{ Fill BackupPath Description }}
|
||||
|
||||
```yaml
|
||||
Type: String
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
Position: 1
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -Confirm
|
||||
Prompts you for confirmation before running the cmdlet.
|
||||
### -BackupDated
|
||||
Forces backup to be created within folder that has date in it
|
||||
|
||||
```yaml
|
||||
Type: SwitchParameter
|
||||
Parameter Sets: (All)
|
||||
Aliases: cf
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
Position: Named
|
||||
Default value: False
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -LimitProcessing
|
||||
Allows to specify maximum number of items that will be fixed in a single run.
|
||||
It doesn't affect amount of GPOs processed
|
||||
|
||||
```yaml
|
||||
Type: Int32
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
Position: Named
|
||||
Default value: 2147483647
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -Forest
|
||||
Target different Forest, by default current forest is used
|
||||
|
||||
```yaml
|
||||
Type: String
|
||||
Parameter Sets: (All)
|
||||
Aliases: ForestName
|
||||
|
||||
Required: False
|
||||
Position: Named
|
||||
@@ -78,7 +122,7 @@ Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -ExcludeDomains
|
||||
{{ Fill ExcludeDomains Description }}
|
||||
Exclude domain from search, by default whole forest is scanned
|
||||
|
||||
```yaml
|
||||
Type: String[]
|
||||
@@ -86,44 +130,14 @@ Parameter Sets: (All)
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
Position: 4
|
||||
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: 6
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -Forest
|
||||
{{ Fill Forest Description }}
|
||||
|
||||
```yaml
|
||||
Type: String
|
||||
Parameter Sets: (All)
|
||||
Aliases: ForestName
|
||||
|
||||
Required: False
|
||||
Position: 3
|
||||
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[]
|
||||
@@ -131,38 +145,22 @@ Parameter Sets: (All)
|
||||
Aliases: Domain, Domains
|
||||
|
||||
Required: False
|
||||
Position: 5
|
||||
Position: Named
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -LimitProcessing
|
||||
{{ Fill LimitProcessing Description }}
|
||||
### -ExtendedForestInformation
|
||||
Ability to provide Forest Information from another command to speed up processing
|
||||
|
||||
```yaml
|
||||
Type: Int32
|
||||
Type: IDictionary
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
Position: 2
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -Type
|
||||
{{ Fill Type Description }}
|
||||
|
||||
```yaml
|
||||
Type: String[]
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
Accepted values: SYSVOL, AD
|
||||
|
||||
Required: False
|
||||
Position: 0
|
||||
Position: Named
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
@@ -184,16 +182,29 @@ Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -Confirm
|
||||
Prompts you for confirmation before running the cmdlet.
|
||||
|
||||
```yaml
|
||||
Type: SwitchParameter
|
||||
Parameter Sets: (All)
|
||||
Aliases: cf
|
||||
|
||||
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
|
||||
|
||||
@@ -0,0 +1,168 @@
|
||||
---
|
||||
external help file: GPOZaurr-help.xml
|
||||
Module Name: GPOZaurr
|
||||
online version:
|
||||
schema: 2.0.0
|
||||
---
|
||||
|
||||
# Remove-GPOZaurrLinkEmptyOU
|
||||
|
||||
## SYNOPSIS
|
||||
{{ Fill in the Synopsis }}
|
||||
|
||||
## SYNTAX
|
||||
|
||||
```
|
||||
Remove-GPOZaurrLinkEmptyOU [[-Forest] <String>] [[-ExcludeDomains] <String[]>] [[-IncludeDomains] <String[]>]
|
||||
[[-ExtendedForestInformation] <IDictionary>] [[-ExcludeOrganizationalUnit] <String[]>]
|
||||
[[-LimitProcessing] <Int32>] [-WhatIf] [-Confirm] [<CommonParameters>]
|
||||
```
|
||||
|
||||
## DESCRIPTION
|
||||
{{ Fill in the Description }}
|
||||
|
||||
## EXAMPLES
|
||||
|
||||
### Example 1
|
||||
```powershell
|
||||
PS C:\> {{ Add example code here }}
|
||||
```
|
||||
|
||||
{{ Add example description here }}
|
||||
|
||||
## PARAMETERS
|
||||
|
||||
### -Confirm
|
||||
Prompts you for confirmation before running the cmdlet.
|
||||
|
||||
```yaml
|
||||
Type: SwitchParameter
|
||||
Parameter Sets: (All)
|
||||
Aliases: cf
|
||||
|
||||
Required: False
|
||||
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: 1
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -ExcludeOrganizationalUnit
|
||||
{{ Fill ExcludeOrganizationalUnit Description }}
|
||||
|
||||
```yaml
|
||||
Type: String[]
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
Position: 4
|
||||
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: 3
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -Forest
|
||||
{{ Fill Forest Description }}
|
||||
|
||||
```yaml
|
||||
Type: String
|
||||
Parameter Sets: (All)
|
||||
Aliases: ForestName
|
||||
|
||||
Required: False
|
||||
Position: 0
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -IncludeDomains
|
||||
{{ Fill IncludeDomains Description }}
|
||||
|
||||
```yaml
|
||||
Type: String[]
|
||||
Parameter Sets: (All)
|
||||
Aliases: Domain, Domains
|
||||
|
||||
Required: False
|
||||
Position: 2
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -LimitProcessing
|
||||
{{ Fill LimitProcessing Description }}
|
||||
|
||||
```yaml
|
||||
Type: Int32
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
Position: 5
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -WhatIf
|
||||
Shows what would happen if the cmdlet runs.
|
||||
The cmdlet is not run.
|
||||
|
||||
```yaml
|
||||
Type: SwitchParameter
|
||||
Parameter Sets: (All)
|
||||
Aliases: wi
|
||||
|
||||
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
|
||||
|
||||
## RELATED LINKS
|
||||
@@ -0,0 +1,156 @@
|
||||
---
|
||||
external help file: GPOZaurr-help.xml
|
||||
Module Name: GPOZaurr
|
||||
online version:
|
||||
schema: 2.0.0
|
||||
---
|
||||
|
||||
# Repair-GPOZaurrBrokenLink
|
||||
|
||||
## SYNOPSIS
|
||||
Removes any link to GPO that no longer exists.
|
||||
|
||||
## SYNTAX
|
||||
|
||||
```
|
||||
Repair-GPOZaurrBrokenLink [[-Forest] <String>] [[-ExcludeDomains] <String[]>] [[-IncludeDomains] <String[]>]
|
||||
[[-ExtendedForestInformation] <IDictionary>] [[-LimitProcessing] <Int32>] [-WhatIf] [-Confirm]
|
||||
[<CommonParameters>]
|
||||
```
|
||||
|
||||
## DESCRIPTION
|
||||
Removes any link to GPO that no longer exists.
|
||||
It scans all site, organizational unit or domain root making sure every single link that may be linking to GPO that doesn't exists anymore is gone.
|
||||
|
||||
## EXAMPLES
|
||||
|
||||
### EXAMPLE 1
|
||||
```
|
||||
Repair-GPOZaurrBrokenLink -Verbose -LimitProcessing 1 -WhatIf
|
||||
```
|
||||
|
||||
### EXAMPLE 2
|
||||
```
|
||||
Repair-GPOZaurrBrokenLink -Verbose -IncludeDomains ad.evotec.pl -LimitProcessing 1 -WhatIf
|
||||
```
|
||||
|
||||
## PARAMETERS
|
||||
|
||||
### -Forest
|
||||
Target different Forest, by default current forest is used
|
||||
|
||||
```yaml
|
||||
Type: String
|
||||
Parameter Sets: (All)
|
||||
Aliases: ForestName
|
||||
|
||||
Required: False
|
||||
Position: 1
|
||||
Default value: None
|
||||
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: 2
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -IncludeDomains
|
||||
Include only specific domains, by default whole forest is scanned
|
||||
|
||||
```yaml
|
||||
Type: String[]
|
||||
Parameter Sets: (All)
|
||||
Aliases: Domain, Domains
|
||||
|
||||
Required: False
|
||||
Position: 3
|
||||
Default value: None
|
||||
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: 4
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -LimitProcessing
|
||||
Allows to specify maximum number of items that will be fixed in a single run.
|
||||
It doesn't affect amount of GPOs processed
|
||||
|
||||
```yaml
|
||||
Type: Int32
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
Position: 5
|
||||
Default value: 0
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -WhatIf
|
||||
Shows what would happen if the cmdlet runs.
|
||||
The cmdlet is not run.
|
||||
|
||||
```yaml
|
||||
Type: SwitchParameter
|
||||
Parameter Sets: (All)
|
||||
Aliases: wi
|
||||
|
||||
Required: False
|
||||
Position: Named
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -Confirm
|
||||
Prompts you for confirmation before running the cmdlet.
|
||||
|
||||
```yaml
|
||||
Type: SwitchParameter
|
||||
Parameter Sets: (All)
|
||||
Aliases: cf
|
||||
|
||||
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
|
||||
|
||||
## OUTPUTS
|
||||
|
||||
## NOTES
|
||||
General notes
|
||||
|
||||
## RELATED LINKS
|
||||
@@ -8,7 +8,7 @@ schema: 2.0.0
|
||||
# Repair-GPOZaurrNetLogonOwner
|
||||
|
||||
## SYNOPSIS
|
||||
{{ Fill in the Synopsis }}
|
||||
Sets new owner to each file in NetLogon share.
|
||||
|
||||
## SYNTAX
|
||||
|
||||
@@ -19,41 +19,24 @@ Repair-GPOZaurrNetLogonOwner [[-Forest] <String>] [[-ExcludeDomains] <String[]>]
|
||||
```
|
||||
|
||||
## DESCRIPTION
|
||||
{{ Fill in the Description }}
|
||||
Sets new owner to each file in NetLogon share.
|
||||
|
||||
## EXAMPLES
|
||||
|
||||
### Example 1
|
||||
```powershell
|
||||
PS C:\> {{ Add example code here }}
|
||||
### EXAMPLE 1
|
||||
```
|
||||
Repair-GPOZaurrNetLogonOwner -WhatIf -Verbose -IncludeDomains ad.evotec.pl
|
||||
```
|
||||
|
||||
{{ Add example description here }}
|
||||
|
||||
## PARAMETERS
|
||||
|
||||
### -Confirm
|
||||
Prompts you for confirmation before running the cmdlet.
|
||||
### -Forest
|
||||
Target different Forest, by default current forest is used
|
||||
|
||||
```yaml
|
||||
Type: SwitchParameter
|
||||
Type: String
|
||||
Parameter Sets: (All)
|
||||
Aliases: cf
|
||||
|
||||
Required: False
|
||||
Position: Named
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -ExcludeDomains
|
||||
{{ Fill ExcludeDomains Description }}
|
||||
|
||||
```yaml
|
||||
Type: String[]
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
Aliases: ForestName
|
||||
|
||||
Required: False
|
||||
Position: 1
|
||||
@@ -62,43 +45,13 @@ Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -ExtendedForestInformation
|
||||
{{ Fill ExtendedForestInformation Description }}
|
||||
|
||||
```yaml
|
||||
Type: IDictionary
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
Position: 3
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -Forest
|
||||
{{ Fill Forest Description }}
|
||||
|
||||
```yaml
|
||||
Type: String
|
||||
Parameter Sets: (All)
|
||||
Aliases: ForestName
|
||||
|
||||
Required: False
|
||||
Position: 0
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -IncludeDomains
|
||||
{{ Fill IncludeDomains Description }}
|
||||
### -ExcludeDomains
|
||||
Exclude domain from search, by default whole forest is scanned
|
||||
|
||||
```yaml
|
||||
Type: String[]
|
||||
Parameter Sets: (All)
|
||||
Aliases: Domain, Domains
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
Position: 2
|
||||
@@ -107,23 +60,39 @@ Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -LimitProcessing
|
||||
{{ Fill LimitProcessing Description }}
|
||||
### -IncludeDomains
|
||||
Include only specific domains, by default whole forest is scanned
|
||||
|
||||
```yaml
|
||||
Type: Int32
|
||||
Type: String[]
|
||||
Parameter Sets: (All)
|
||||
Aliases: Domain, Domains
|
||||
|
||||
Required: False
|
||||
Position: 3
|
||||
Default value: None
|
||||
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: 5
|
||||
Position: 4
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -Principal
|
||||
{{ Fill Principal Description }}
|
||||
Provide named owner.
|
||||
If not provided default S-1-5-32-544 is used.
|
||||
|
||||
```yaml
|
||||
Type: String
|
||||
@@ -131,8 +100,24 @@ Parameter Sets: (All)
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
Position: 4
|
||||
Default value: None
|
||||
Position: 5
|
||||
Default value: S-1-5-32-544
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -LimitProcessing
|
||||
Allows to specify maximum number of items that will be fixed in a single run.
|
||||
It doesn't affect amount of GPOs processed
|
||||
|
||||
```yaml
|
||||
Type: Int32
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
Position: 6
|
||||
Default value: 2147483647
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
@@ -153,16 +138,29 @@ Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -Confirm
|
||||
Prompts you for confirmation before running the cmdlet.
|
||||
|
||||
```yaml
|
||||
Type: SwitchParameter
|
||||
Parameter Sets: (All)
|
||||
Aliases: cf
|
||||
|
||||
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
|
||||
|
||||
@@ -0,0 +1,169 @@
|
||||
---
|
||||
external help file: GPOZaurr-help.xml
|
||||
Module Name: GPOZaurr
|
||||
online version:
|
||||
schema: 2.0.0
|
||||
---
|
||||
|
||||
# Repair-GPOZaurrPermission
|
||||
|
||||
## SYNOPSIS
|
||||
{{ Fill in the Synopsis }}
|
||||
|
||||
## SYNTAX
|
||||
|
||||
```
|
||||
Repair-GPOZaurrPermission [-Type] <String[]> [[-Forest] <String>] [[-ExcludeDomains] <String[]>]
|
||||
[[-IncludeDomains] <String[]>] [[-ExtendedForestInformation] <IDictionary>] [[-LimitProcessing] <Int32>]
|
||||
[-WhatIf] [-Confirm] [<CommonParameters>]
|
||||
```
|
||||
|
||||
## DESCRIPTION
|
||||
{{ Fill in the Description }}
|
||||
|
||||
## EXAMPLES
|
||||
|
||||
### Example 1
|
||||
```powershell
|
||||
PS C:\> {{ Add example code here }}
|
||||
```
|
||||
|
||||
{{ Add example description here }}
|
||||
|
||||
## PARAMETERS
|
||||
|
||||
### -Confirm
|
||||
Prompts you for confirmation before running the cmdlet.
|
||||
|
||||
```yaml
|
||||
Type: SwitchParameter
|
||||
Parameter Sets: (All)
|
||||
Aliases: cf
|
||||
|
||||
Required: False
|
||||
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: 2
|
||||
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: 4
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -Forest
|
||||
{{ Fill Forest Description }}
|
||||
|
||||
```yaml
|
||||
Type: String
|
||||
Parameter Sets: (All)
|
||||
Aliases: ForestName
|
||||
|
||||
Required: False
|
||||
Position: 1
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -IncludeDomains
|
||||
{{ Fill IncludeDomains Description }}
|
||||
|
||||
```yaml
|
||||
Type: String[]
|
||||
Parameter Sets: (All)
|
||||
Aliases: Domain, Domains
|
||||
|
||||
Required: False
|
||||
Position: 3
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -LimitProcessing
|
||||
{{ Fill LimitProcessing Description }}
|
||||
|
||||
```yaml
|
||||
Type: Int32
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
Position: 5
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -Type
|
||||
{{ Fill Type Description }}
|
||||
|
||||
```yaml
|
||||
Type: String[]
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
Accepted values: AuthenticatedUsers, Unknown, System, Administrative, All
|
||||
|
||||
Required: True
|
||||
Position: 0
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -WhatIf
|
||||
Shows what would happen if the cmdlet runs.
|
||||
The cmdlet is not run.
|
||||
|
||||
```yaml
|
||||
Type: SwitchParameter
|
||||
Parameter Sets: (All)
|
||||
Aliases: wi
|
||||
|
||||
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
|
||||
|
||||
## RELATED LINKS
|
||||
+50
-54
@@ -8,7 +8,7 @@ schema: 2.0.0
|
||||
# Save-GPOZaurrFiles
|
||||
|
||||
## SYNOPSIS
|
||||
{{ Fill in the Synopsis }}
|
||||
Exports GPO XML data to files and saves it to a given path
|
||||
|
||||
## SYNTAX
|
||||
|
||||
@@ -18,41 +18,24 @@ Save-GPOZaurrFiles [[-Forest] <String>] [[-ExcludeDomains] <String[]>] [[-Includ
|
||||
```
|
||||
|
||||
## DESCRIPTION
|
||||
{{ Fill in the Description }}
|
||||
Exports GPO XML data to files and saves it to a given path
|
||||
|
||||
## EXAMPLES
|
||||
|
||||
### Example 1
|
||||
```powershell
|
||||
PS C:\> {{ Add example code here }}
|
||||
### EXAMPLE 1
|
||||
```
|
||||
Save-GPOZaurrFiles -GPOPath 'C:\Support\GitHub\GpoZaurr\Ignore\GPOExportEvotec' -DeleteExisting -Verbose
|
||||
```
|
||||
|
||||
{{ Add example description here }}
|
||||
|
||||
## PARAMETERS
|
||||
|
||||
### -DeleteExisting
|
||||
{{ Fill DeleteExisting Description }}
|
||||
### -Forest
|
||||
Target different Forest, by default current forest is used
|
||||
|
||||
```yaml
|
||||
Type: SwitchParameter
|
||||
Type: String
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
Position: Named
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -ExcludeDomains
|
||||
{{ Fill ExcludeDomains Description }}
|
||||
|
||||
```yaml
|
||||
Type: String[]
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
Aliases: ForestName
|
||||
|
||||
Required: False
|
||||
Position: 1
|
||||
@@ -61,14 +44,29 @@ Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -ExtendedForestInformation
|
||||
{{ Fill ExtendedForestInformation Description }}
|
||||
### -ExcludeDomains
|
||||
Exclude domain from search, by default whole forest is scanned
|
||||
|
||||
```yaml
|
||||
Type: IDictionary
|
||||
Type: String[]
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
Position: 2
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -IncludeDomains
|
||||
Include only specific domains, by default whole forest is scanned
|
||||
|
||||
```yaml
|
||||
Type: String[]
|
||||
Parameter Sets: (All)
|
||||
Aliases: Domain, Domains
|
||||
|
||||
Required: False
|
||||
Position: 3
|
||||
Default value: None
|
||||
@@ -76,26 +74,11 @@ Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -Forest
|
||||
{{ Fill Forest Description }}
|
||||
### -ExtendedForestInformation
|
||||
Ability to provide Forest Information from another command to speed up processing
|
||||
|
||||
```yaml
|
||||
Type: String
|
||||
Parameter Sets: (All)
|
||||
Aliases: ForestName
|
||||
|
||||
Required: False
|
||||
Position: 0
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -GPOPath
|
||||
{{ Fill GPOPath Description }}
|
||||
|
||||
```yaml
|
||||
Type: String[]
|
||||
Type: IDictionary
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
|
||||
@@ -106,31 +89,44 @@ Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -IncludeDomains
|
||||
{{ Fill IncludeDomains Description }}
|
||||
### -GPOPath
|
||||
Path where to save XML files from GPOReport
|
||||
|
||||
```yaml
|
||||
Type: String[]
|
||||
Parameter Sets: (All)
|
||||
Aliases: Domain, Domains
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
Position: 2
|
||||
Position: 5
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -DeleteExisting
|
||||
Delete existing files before saving new ones
|
||||
|
||||
```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).
|
||||
|
||||
## INPUTS
|
||||
|
||||
### None
|
||||
|
||||
## OUTPUTS
|
||||
|
||||
### System.Object
|
||||
## NOTES
|
||||
General notes
|
||||
|
||||
## RELATED LINKS
|
||||
|
||||
@@ -16,14 +16,15 @@ Sets GPO Owner to Domain Admins or other choosen account
|
||||
```
|
||||
Set-GPOZaurrOwner -Type <String> [-Forest <String>] [-ExcludeDomains <String[]>] [-IncludeDomains <String[]>]
|
||||
[-ExtendedForestInformation <IDictionary>] [-Principal <String>] [-SkipSysvol] [-LimitProcessing <Int32>]
|
||||
[-Force] [-WhatIf] [-Confirm] [<CommonParameters>]
|
||||
[-ApprovedOwner <String[]>] [-Action <String>] [-Force] [-WhatIf] [-Confirm] [<CommonParameters>]
|
||||
```
|
||||
|
||||
### Named
|
||||
```
|
||||
Set-GPOZaurrOwner [-GPOName <String>] [-GPOGuid <String>] [-Forest <String>] [-ExcludeDomains <String[]>]
|
||||
[-IncludeDomains <String[]>] [-ExtendedForestInformation <IDictionary>] [-Principal <String>] [-SkipSysvol]
|
||||
[-LimitProcessing <Int32>] [-Force] [-WhatIf] [-Confirm] [<CommonParameters>]
|
||||
[-LimitProcessing <Int32>] [-ApprovedOwner <String[]>] [-Action <String>] [-Force] [-WhatIf] [-Confirm]
|
||||
[<CommonParameters>]
|
||||
```
|
||||
|
||||
## DESCRIPTION
|
||||
@@ -43,6 +44,7 @@ Set-GPOZaurrOwner -Type All -Verbose -WhatIf -LimitProcessing 2
|
||||
### -Type
|
||||
Unknown - finds unknown Owners and sets them to Administrative (Domain Admins) or chosen principal
|
||||
NotMatching - find administrative groups only and if sysvol and gpo doesn't match - replace with chosen principal or Domain Admins if not specified
|
||||
Inconsistent - same as not NotMatching
|
||||
NotAdministrative - combination of Unknown/NotMatching and NotAdministrative - replace with chosen principal or Domain Admins if not specified
|
||||
All - if Owner is known it checks if it's Administrative, if it sn't it fixes that.
|
||||
If owner is unknown it fixes it
|
||||
@@ -198,8 +200,38 @@ Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -ApprovedOwner
|
||||
{{ Fill ApprovedOwner Description }}
|
||||
|
||||
```yaml
|
||||
Type: String[]
|
||||
Parameter Sets: (All)
|
||||
Aliases: Exclusion, Exclusions
|
||||
|
||||
Required: False
|
||||
Position: Named
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -Action
|
||||
{{ Fill Action Description }}
|
||||
|
||||
```yaml
|
||||
Type: String
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
Position: Named
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -Force
|
||||
{{ Fill Force Description }}
|
||||
Pushes new owner regardless if it's already set or not
|
||||
|
||||
```yaml
|
||||
Type: SwitchParameter
|
||||
|
||||
@@ -13,8 +13,14 @@ Allows to exclude Group Policy from being affected by fixes
|
||||
|
||||
## SYNTAX
|
||||
|
||||
### Name (Default)
|
||||
```
|
||||
Skip-GroupPolicy [[-Name] <String>] [[-DomaiName] <String>] [<CommonParameters>]
|
||||
Skip-GroupPolicy [-Name <String>] [-DomaiName <String>] [<CommonParameters>]
|
||||
```
|
||||
|
||||
### Guid
|
||||
```
|
||||
Skip-GroupPolicy [-GUID <String>] [-DomaiName <String>] [<CommonParameters>]
|
||||
```
|
||||
|
||||
## DESCRIPTION
|
||||
@@ -50,11 +56,26 @@ Define Group Policy Name to skip
|
||||
|
||||
```yaml
|
||||
Type: String
|
||||
Parameter Sets: (All)
|
||||
Parameter Sets: Name
|
||||
Aliases: GpoName, DisplayName
|
||||
|
||||
Required: False
|
||||
Position: 1
|
||||
Position: Named
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -GUID
|
||||
{{ Fill GUID Description }}
|
||||
|
||||
```yaml
|
||||
Type: String
|
||||
Parameter Sets: Guid
|
||||
Aliases: ID
|
||||
|
||||
Required: False
|
||||
Position: Named
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
@@ -70,7 +91,7 @@ Parameter Sets: (All)
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
Position: 2
|
||||
Position: Named
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
|
||||
@@ -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,16 +1,19 @@
|
||||
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
|
||||
|
||||
#$Output = Invoke-GPOZaurr -FilePath $PSScriptRoot\Reports\GPOZaurr.html -PassThru -Type GPOConsistency, GPOList, GPODuplicates, GPOBroken, GPOOwners, NetLogonOwners, GPOPermissionsRead, GPOPermissionsAdministrative,GPOPermissionsUnknown
|
||||
Invoke-GPOZaurr -Type GPOOrganizationalUnit -Online -FilePath $PSScriptRoot\Reports\GPOZaurr.html
|
||||
|
||||
# Shows how to use exclusions (supported only in GPOBlockedInheritance)
|
||||
Invoke-GPOZaurr -FilePath $PSScriptRoot\Reports\GPOZaurr.html -Type GPOBlockedInheritance -Online -Exclusions @(
|
||||
'OU=Test,OU=ITR02,DC=ad,DC=evotec,DC=xyz'
|
||||
)
|
||||
|
||||
<#
|
||||
# different approach to query multiple reports or just one
|
||||
Invoke-GPOZaurr -FilePath $PSScriptRoot\Reports\GPOZaurr.html -PassThru -Type GPOConsistency, GPOList, GPODuplicates, GPOBroken, GPOOwners, NetLogonOwners, GPOPermissionsRead, GPOPermissionsAdministrative,GPOPermissionsUnknown
|
||||
|
||||
Invoke-GPOZaurr -Type GPOOwners -Online -FilePath $PSScriptRoot\Reports\GPOZaurr.html
|
||||
|
||||
# Shows how to use exclusions for GPOList (different way)
|
||||
Invoke-GPOZaurr -FilePath $PSScriptRoot\Reports\GPOZaurr.html -Type GPOList -Online -Exclusions {
|
||||
Skip-GroupPolicy -Name 'de14_usr_std'
|
||||
Skip-GroupPolicy -Name 'ALL | Enable RDP' -DomaiName 'ad.evotec.xyz'
|
||||
}
|
||||
#>
|
||||
}
|
||||
@@ -9,8 +9,14 @@ $GPOS = Get-GPOZaurr -ExcludeGroupPolicies {
|
||||
}
|
||||
$GPOS | Format-Table -AutoSize *
|
||||
|
||||
Invoke-GPOZaurr -Type GPOList -Exclusions {
|
||||
$Output = Invoke-GPOZaurr -Type GPOList -Exclusions {
|
||||
Skip-GroupPolicy -Name 'All | Trusted Websites' -DomaiName 'ad.evotec.xyz'
|
||||
'{D39BF08A-87BF-4662-BFA0-E56240EBD5A2}'
|
||||
"104da6a7-c7d2-48da-b24b-8fa584f7b0b6"
|
||||
"{087b4f69-c541-429f-8dfd-0eb3ed133910}"
|
||||
'COMPUTERS | Enable Sets'
|
||||
}
|
||||
'24194523-bb82-439c-a533-abf4f30fa2c4'
|
||||
'{31b2f340-016d-11d2-945f-00c04fb984f9 } '
|
||||
} -PassThru
|
||||
|
||||
$Output.GPOList
|
||||
@@ -0,0 +1,3 @@
|
||||
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
|
||||
|
||||
Invoke-GPOZaurr -Online -Verbose -FilePath $PSScriptRoot\Reports\GPOZaurr.html -SplitReports
|
||||
@@ -1,5 +1,8 @@
|
||||
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
|
||||
|
||||
$OUs = Get-GPOZaurrOrganizationalUnit
|
||||
$Ous | Format-Table
|
||||
|
||||
Get-GPOZaurrOrganizationalUnit -Verbose -Option Unlink -Exclusions @(
|
||||
'OU=Groups,OU=Production,DC=ad,DC=evotec,DC=pl'
|
||||
) | Format-Table
|
||||
@@ -8,9 +11,7 @@ Get-GPOZaurrOrganizationalUnit -Verbose -ExcludeOrganizationalUnit @(
|
||||
'*,OU=Production,DC=ad,DC=evotec,DC=pl'
|
||||
) | Format-Table
|
||||
|
||||
|
||||
Invoke-GPOZaurr -Type GPOOrganizationalUnit -Online -FilePath $PSScriptRoot\Reports\GPOZaurrOU.html -Exclusions @(
|
||||
'*OU=Production,DC=ad,DC=evotec,DC=pl'
|
||||
'*OU=Production,DC=ad,DC=evotec,DC=pl'
|
||||
'*OU=Production,DC=ad,DC=evotec,DC=pl'
|
||||
'*OU=Production,DC=ad,DC=evotec,DC=pl'
|
||||
'*OU=Accounts,OU=Administration,DC=ad,DC=evotec,DC=xyz'
|
||||
)
|
||||
@@ -0,0 +1,4 @@
|
||||
Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force
|
||||
|
||||
Get-GPOZaurrUpdates -DateRange Last14Days -DateProperty WhenCreated, WhenChanged -Verbose -IncludeDomains 'ad.evotec.pl' | Format-List
|
||||
Get-GPOZaurrUpdates -DateRange Last14Days -DateProperty WhenCreated -Verbose | Format-Table
|
||||
@@ -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-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.130'
|
||||
ModuleVersion = '0.0.152'
|
||||
PowerShellVersion = '5.1'
|
||||
PrivateData = @{
|
||||
PSData = @{
|
||||
@@ -18,15 +18,15 @@
|
||||
}
|
||||
}
|
||||
RequiredModules = @(@{
|
||||
ModuleVersion = '0.0.210'
|
||||
ModuleVersion = '0.0.243'
|
||||
ModuleName = 'PSSharedGoods'
|
||||
Guid = 'ee272aa8-baaa-4edf-9f45-b6d6f7d844fe'
|
||||
}, @{
|
||||
ModuleVersion = '0.0.130'
|
||||
ModuleVersion = '0.0.149'
|
||||
ModuleName = 'ADEssentials'
|
||||
Guid = '9fc9fd61-7f11-4f4b-a527-084086f1905f'
|
||||
}, @{
|
||||
ModuleVersion = '0.0.158'
|
||||
ModuleVersion = '0.0.177'
|
||||
ModuleName = 'PSWriteHTML'
|
||||
Guid = 'a7bdf640-f5cb-4acf-9de0-365b322d245c'
|
||||
}, 'CimCmdlets', 'Microsoft.PowerShell.Management', 'Microsoft.PowerShell.Utility', 'Microsoft.PowerShell.Security')
|
||||
|
||||
@@ -4,6 +4,22 @@
|
||||
[PSCustomObject] $GPO,
|
||||
[switch] $SingleObject
|
||||
)
|
||||
# Redirection types a stored as GUID in GPOs. This hash is used to translate into readable text.
|
||||
$FolderID = @{
|
||||
"{1777F761-68AD-4D8A-87BD-30B759FA33DD}" = "Favorites"
|
||||
"{FDD39AD0-238F-46AF-ADB4-6C85480369C7}" = "Documents"
|
||||
"{33E28130-4E1E-4676-835A-98395C3BC3BB}" = "Pictures"
|
||||
"{4BD8D571-6D19-48D3-BE97-422220080E43}" = "Music"
|
||||
"{18989B1D-99B5-455B-841C-AB7C74E4DDFC}" = "Videos"
|
||||
"{3EB685DB-65F9-4CF6-A03A-E3EF65729F3D}" = "AppDataRoaming"
|
||||
"{B4BFCC3A-DB2C-424C-B029-7FE99A87C641}" = "Desktop"
|
||||
"{625B53C3-AB48-4EC1-BA1F-A1EF4146FC19}" = "StartMenu"
|
||||
"{374DE290-123F-4565-9164-39C4925E467B}" = "Downloads"
|
||||
"{4C5C32FF-BB9D-43B0-B5B4-2D72E54EAAA4}" = "Saved Games"
|
||||
"{56784854-C6CB-462B-8169-88E350ACB882}" = "Contacts"
|
||||
"{7D1D3A04-DEBB-4115-95CF-2F29DA2920DA}" = "Searches"
|
||||
"{BFB9D5E0-C6A9-404C-B2B2-AE6DB6AF4968}" = "Links"
|
||||
}
|
||||
if ($SingleObject) {
|
||||
$CreateGPO = [ordered]@{
|
||||
DisplayName = $GPO.DisplayName
|
||||
@@ -18,6 +34,8 @@
|
||||
[Array] $CreateGPO['Settings'] = foreach ($Folder in $GPO.DataSet) {
|
||||
foreach ($Location in $Folder.Location) {
|
||||
[PSCustomObject] @{
|
||||
ID = $Folder.ID
|
||||
FolderType = $FolderID[$Folder.Id]
|
||||
DestinationPath = $Location.DestinationPath
|
||||
SecuritySID = $Location.SecurityGroup.SID.'#text'
|
||||
SecurityName = $Location.SecurityGroup.Name.'#text'
|
||||
@@ -47,6 +65,7 @@
|
||||
GUID = $GPO.GUID
|
||||
GpoType = $GPO.GpoType
|
||||
Id = $Folder.Id
|
||||
FolderType = $FolderID[$Folder.Id]
|
||||
DestinationPath = $Location.DestinationPath
|
||||
SecuritySID = $Location.SecurityGroup.SID.'#text'
|
||||
SecurityName = $Location.SecurityGroup.Name.'#text'
|
||||
|
||||
@@ -0,0 +1,220 @@
|
||||
function Get-ADOrganizationalUnitObject {
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Gets number of objects in a given OU/OUs with ability to find only those being affected by GPOs.
|
||||
|
||||
.DESCRIPTION
|
||||
Gets number of objects in a given OU/OUs with ability to find only those being affected by GPOs.
|
||||
|
||||
.PARAMETER OrganizationalUnit
|
||||
One or more organizational units to get the number of objects in.
|
||||
|
||||
.PARAMETER Extended
|
||||
Adds all objects affected for better understanding
|
||||
|
||||
.PARAMETER Summary
|
||||
Returns only summary for given OU/OUs
|
||||
|
||||
.PARAMETER IncludeAffectedOnly
|
||||
Ignores any object types that are not Users or Computers
|
||||
|
||||
.PARAMETER Forest
|
||||
Target different Forest, by default current forest is used
|
||||
|
||||
.PARAMETER ExcludeDomains
|
||||
Exclude domain from search, by default whole forest is scanned
|
||||
|
||||
.PARAMETER IncludeDomains
|
||||
Include only specific domains, by default whole forest is scanned
|
||||
|
||||
.PARAMETER AsHashTable
|
||||
Returns results in form of hashtable
|
||||
|
||||
.PARAMETER ExtendedForestInformation
|
||||
Ability to provide Forest Information from another command to speed up processing
|
||||
|
||||
.EXAMPLE
|
||||
$OUs = @(
|
||||
'OU=SE,OU=ITR01,DC=ad,DC=evotec,DC=xyz'
|
||||
'OU=US,OU=ITR01,DC=ad,DC=evotec,DC=xyz'
|
||||
'OU=ITR01,DC=ad,DC=evotec,DC=xyz'
|
||||
'OU=Users,OU=User,OU=SE1,OU=SE,OU=ITR01,DC=ad,DC=evotec,DC=xyz'
|
||||
)
|
||||
|
||||
Get-ADOrganizationalUnitObject -OrganizationalUnit $OUs -IncludeAffectedOnly | Format-Table
|
||||
|
||||
.EXAMPLE
|
||||
$OUs = @(
|
||||
'OU=SE,OU=ITR01,DC=ad,DC=evotec,DC=xyz'
|
||||
'OU=US,OU=ITR01,DC=ad,DC=evotec,DC=xyz'
|
||||
'OU=ITR01,DC=ad,DC=evotec,DC=xyz'
|
||||
'OU=Users,OU=User,OU=SE1,OU=SE,OU=ITR01,DC=ad,DC=evotec,DC=xyz'
|
||||
)
|
||||
|
||||
Get-ADOrganizationalUnitObject -OrganizationalUnit $OUs | Format-Table
|
||||
|
||||
.EXAMPLE
|
||||
$OUs = @(
|
||||
#'OU=SE,OU=ITR01,DC=ad,DC=evotec,DC=xyz'
|
||||
#'OU=US,OU=ITR01,DC=ad,DC=evotec,DC=xyz'
|
||||
'OU=Users,OU=User,OU=SE1,OU=SE,OU=ITR01,DC=ad,DC=evotec,DC=xyz'
|
||||
'OU=ITR01,DC=ad,DC=evotec,DC=xyz'
|
||||
)
|
||||
|
||||
Get-ADOrganizationalUnitObject -OrganizationalUnit $OUs -Summary -IncludeAffectedOnly | Format-List
|
||||
|
||||
.NOTES
|
||||
General notes
|
||||
#>
|
||||
[cmdletBinding()]
|
||||
param(
|
||||
[parameter(Mandatory)][Array] $OrganizationalUnit,
|
||||
[switch] $Extended,
|
||||
[switch] $Summary,
|
||||
[switch] $IncludeAffectedOnly,
|
||||
|
||||
[alias('ForestName')][string] $Forest,
|
||||
[string[]] $ExcludeDomains,
|
||||
[alias('Domain', 'Domains')][string[]] $IncludeDomains,
|
||||
[switch] $AsHashTable,
|
||||
[System.Collections.IDictionary] $ExtendedForestInformation
|
||||
)
|
||||
|
||||
$CachedOu = [ordered] @{}
|
||||
$ListOU = @(
|
||||
foreach ($OU in $OrganizationalUnit) {
|
||||
if ($OU.DistinguishedName) {
|
||||
$OU.DistinguishedName
|
||||
} else {
|
||||
$OU
|
||||
}
|
||||
}
|
||||
)
|
||||
$ForestInformation = Get-WinADForestDetails -Extended -Forest $Forest -IncludeDomains $IncludeDomains -ExcludeDomains $ExcludeDomains -ExtendedForestInformation $ExtendedForestInformation
|
||||
$OUCache = Get-GPOBlockedInheritance -AsHashTable -ExtendedForestInformation $ForestInformation
|
||||
|
||||
if ($Summary) {
|
||||
$SummaryData = [ordered] @{
|
||||
ObjectsClasses = [ordered] @{}
|
||||
ObjectsTotalCount = 0
|
||||
ObjectsBlockedInheritanceCount = 0
|
||||
ObjectsTotal = [ordered] @{}
|
||||
ObjectsBlockedInheritance = [ordered] @{}
|
||||
DistinguishedName = [System.Collections.Generic.List[string]]::new()
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($OU in $ListOU) {
|
||||
$Domain = ConvertFrom-DistinguishedName -ToDomainCN -DistinguishedName $OU
|
||||
$ObjectsInOu = Get-ADObject -LDAPFilter "(|(ObjectClass=user)(ObjectClass=contact)(ObjectClass=computer)(ObjectClass=group)(objectClass=inetOrgPerson))" -SearchBase $OU -Server $ForestInformation['QueryServers'][$Domain]['hostname'][0]
|
||||
#Write-Verbose "Get-GPOZaurrOrganizationalUnit - Processing $($Domain) / $($TOPOU.DistinguishedName) [$CountTop/$($TopOrganizationalUnits.Count)], found $($ObjectsInOu.Count) objects to process."
|
||||
if (-not $CachedOu[$OU]) {
|
||||
$CachedOu[$OU] = [ordered] @{
|
||||
DistinguishedName = $OU
|
||||
Domain = $Domain
|
||||
'ObjectsClasses' = [ordered] @{} # only direct, indirect, but not with blocked inheritance
|
||||
'ObjectsDirectCount' = 0
|
||||
'ObjectsIndirectCount' = 0
|
||||
'ObjectsTotalCount' = 0
|
||||
'ObjectsTotalIncludingBlockedCount' = 0
|
||||
'ObjectsBlockedInheritanceCount' = 0
|
||||
}
|
||||
if ($Extended) {
|
||||
$CachedOu[$OU]['ObjectsDirect'] = [ordered] @{}
|
||||
$CachedOu[$OU]['ObjectsIndirect'] = [ordered] @{}
|
||||
$CachedOu[$OU]['ObjectsTotal'] = [ordered] @{}
|
||||
$CachedOu[$OU]['ObjectsTotalIncludingBlocked'] = [ordered] @{}
|
||||
$CachedOu[$OU]['ObjectsBlockedInheritance'] = [ordered] @{}
|
||||
}
|
||||
}
|
||||
foreach ($Object in $ObjectsInOu) {
|
||||
if ($IncludeAffectedOnly) {
|
||||
if ($Object.ObjectClass -notin 'User', 'computer') {
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
$Place = ConvertFrom-DistinguishedName -ToOrganizationalUnit -DistinguishedName $Object.DistinguishedName
|
||||
if (-not $Place) {
|
||||
# Write-Verbose -Message "Get-OrganizationalUnitObject - Processing object in container/root $($Object.DistinguishedName)"
|
||||
}
|
||||
|
||||
if ($Place -and $OUCache[$Place]) {
|
||||
$BlockedInheritance = $OUCache[$Place].BlockedInheritance
|
||||
} else {
|
||||
$BlockedInheritance = $false
|
||||
}
|
||||
|
||||
if ($Summary) {
|
||||
$SummaryData['DistinguishedName'].Add($OU)
|
||||
$SummaryData['ObjectsClasses'][$Object.ObjectClass] = ''
|
||||
if (-not $Place -or $Place -eq $OU) {
|
||||
$SummaryData['ObjectsTotal'][$Object.DistinguishedName] = $Object
|
||||
} else {
|
||||
if ($BlockedInheritance) {
|
||||
$SummaryData['ObjectsBlockedInheritance'][$Object.DistinguishedName] = $Object
|
||||
} else {
|
||||
$SummaryData['ObjectsTotal'][$Object.DistinguishedName] = $Object
|
||||
}
|
||||
}
|
||||
} else {
|
||||
# This is standard way of finding OU's
|
||||
if (-not $Place -or $Place -eq $OU) {
|
||||
$CachedOu[$OU]['ObjectsDirectCount']++
|
||||
$CachedOu[$OU]['ObjectsTotalCount']++
|
||||
# using hashtable to avoid duplicates
|
||||
$CachedOu[$OU]['ObjectsClasses'][$Object.ObjectClass] = ''
|
||||
# adding all objects to the list, excluding blocked inheritance
|
||||
if ($Extended) {
|
||||
$CachedOu[$OU]['ObjectsTotal'][$Object.DistinguishedName] = $Object
|
||||
$CachedOu[$OU]['ObjectsDirect'][$Object.DistinguishedName] = $Object
|
||||
}
|
||||
} else {
|
||||
if ($BlockedInheritance) {
|
||||
# We only check for blocked inheritance if the object is not in the same OU
|
||||
$CachedOu[$OU]['ObjectsBlockedInheritanceCount']++
|
||||
if ($Extended) {
|
||||
$CachedOu[$OU]['ObjectsBlockedInheritance'][$Object.DistinguishedName] = $Object
|
||||
}
|
||||
} else {
|
||||
$CachedOu[$OU]['ObjectsIndirectCount']++
|
||||
$CachedOu[$OU]['ObjectsTotalCount']++
|
||||
|
||||
# using hashtable to avoid duplicates
|
||||
$CachedOu[$OU]['ObjectsClasses'][$Object.ObjectClass] = ''
|
||||
# adding all objects to the list excluding blocked inheritance
|
||||
if ($Extended) {
|
||||
$CachedOu[$OU]['ObjectsTotal'][$Object.DistinguishedName] = $Object
|
||||
$CachedOu[$OU]['ObjectsIndirect'][$Object.DistinguishedName] = $Object
|
||||
}
|
||||
}
|
||||
}
|
||||
$CachedOu[$OU]['ObjectsTotalIncludingBlockedCount']++
|
||||
if ($Extended) {
|
||||
$CachedOu[$OU]['ObjectsTotalIncludingBlocked'][$Object.DistinguishedName] = $Object
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
if ($Summary) {
|
||||
foreach ($ObjectDistinguishedName in [string[]] $SummaryData['ObjectsBlockedInheritance'].Keys) {
|
||||
if ($SummaryData['ObjectsTotal'][$ObjectDistinguishedName]) {
|
||||
$SummaryData['ObjectsBlockedInheritance'].Remove($ObjectDistinguishedName)
|
||||
}
|
||||
}
|
||||
$SummaryData['ObjectsTotalCount'] = $SummaryData['ObjectsTotal'].Count
|
||||
$SummaryData['ObjectsBlockedInheritanceCount'] = $SummaryData['ObjectsBlockedInheritance'].Count
|
||||
if (-not $Extended) {
|
||||
$SummaryData.Remove('ObjectsTotal')
|
||||
$SummaryData.Remove('ObjectsBlockedInheritance')
|
||||
}
|
||||
[PSCustomObject] $SummaryData
|
||||
} else {
|
||||
if ($AsHashTable) {
|
||||
$CachedOu
|
||||
} else {
|
||||
$CachedOu.Values | ForEach-Object { [PSCustomObject] $_ }
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,103 @@
|
||||
function Get-ChoosenDates {
|
||||
[CmdletBinding()]
|
||||
param(
|
||||
[ValidateSet('Everything', 'PastHour', 'CurrentHour', 'PastDay', 'CurrentDay', 'PastMonth', 'CurrentMonth', 'PastQuarter', 'CurrentQuarter', 'Last14Days', 'Last21Days', 'Last30Days' , 'Last7Days', 'Last3Days', 'Last1Days')][string] $DateRange
|
||||
)
|
||||
# Report Per Hour
|
||||
if ($DateRange -eq 'PastHour') {
|
||||
$DatesPastHour = Find-DatesPastHour
|
||||
if ($DatesPastHour) {
|
||||
$DatesPastHour
|
||||
}
|
||||
}
|
||||
if ($DateRange -eq 'CurrentHour') {
|
||||
$DatesCurrentHour = Find-DatesCurrentHour
|
||||
if ($DatesCurrentHour) {
|
||||
$DatesCurrentHour
|
||||
}
|
||||
}
|
||||
# Report Per Day
|
||||
if ($DateRange -eq 'PastDay') {
|
||||
$DatesDayPrevious = Find-DatesDayPrevious
|
||||
if ($DatesDayPrevious) {
|
||||
$DatesDayPrevious
|
||||
}
|
||||
}
|
||||
if ($DateRange -eq 'CurrentDay') {
|
||||
$DatesDayToday = Find-DatesDayToday
|
||||
if ($DatesDayToday) {
|
||||
$DatesDayToday
|
||||
}
|
||||
}
|
||||
# Report Per Month
|
||||
if ($DateRange -eq 'PastMonth') {
|
||||
# Find-DatesMonthPast runs only on 1st of the month unless -Force is used
|
||||
$DatesMonthPrevious = Find-DatesMonthPast -Force $true
|
||||
if ($DatesMonthPrevious) {
|
||||
$DatesMonthPrevious
|
||||
}
|
||||
}
|
||||
if ($DateRange -eq 'CurrentMonth') {
|
||||
$DatesMonthCurrent = Find-DatesMonthCurrent
|
||||
if ($DatesMonthCurrent) {
|
||||
$DatesMonthCurrent
|
||||
}
|
||||
}
|
||||
# Report Per Quarter
|
||||
if ($DateRange -eq 'PastQuarter') {
|
||||
# Find-DatesMonthPast runs only on 1st of the quarter unless -Force is used
|
||||
$DatesQuarterLast = Find-DatesQuarterLast -Force $true
|
||||
if ($DatesQuarterLast) {
|
||||
$DatesQuarterLast
|
||||
}
|
||||
}
|
||||
if ($DateRange -eq 'CurrentQuarter') {
|
||||
$DatesQuarterCurrent = Find-DatesQuarterCurrent
|
||||
if ($DatesQuarterCurrent) {
|
||||
$DatesQuarterCurrent
|
||||
}
|
||||
}
|
||||
if ($DateRange -eq 'Everything') {
|
||||
$DatesEverything = @{
|
||||
DateFrom = Get-Date -Year 1900 -Month 1 -Day 1
|
||||
DateTo = Get-Date -Year 2300 -Month 1 -Day 1
|
||||
}
|
||||
$DatesEverything
|
||||
}
|
||||
if ($DateRange -eq 'Last1days') {
|
||||
$DatesCurrentDayMinusDaysX = Find-DatesCurrentDayMinuxDaysX -days 1
|
||||
if ($DatesCurrentDayMinusDaysX) {
|
||||
$DatesCurrentDayMinusDaysX
|
||||
}
|
||||
}
|
||||
if ($DateRange -eq 'Last3days') {
|
||||
$DatesCurrentDayMinusDaysX = Find-DatesCurrentDayMinuxDaysX -days 3
|
||||
if ($DatesCurrentDayMinusDaysX) {
|
||||
$DatesCurrentDayMinusDaysX
|
||||
}
|
||||
}
|
||||
if ($DateRange -eq 'Last7days') {
|
||||
$DatesCurrentDayMinusDaysX = Find-DatesCurrentDayMinuxDaysX -days 7
|
||||
if ($DatesCurrentDayMinusDaysX) {
|
||||
$DatesCurrentDayMinusDaysX
|
||||
}
|
||||
}
|
||||
if ($DateRange -eq 'Last14days') {
|
||||
$DatesCurrentDayMinusDaysX = Find-DatesCurrentDayMinuxDaysX -days 14
|
||||
if ($DatesCurrentDayMinusDaysX) {
|
||||
$DatesCurrentDayMinusDaysX
|
||||
}
|
||||
}
|
||||
if ($DateRange -eq 'Last21days') {
|
||||
$DatesCurrentDayMinusDaysX = Find-DatesCurrentDayMinuxDaysX -days 21
|
||||
if ($DatesCurrentDayMinusDaysX) {
|
||||
$DatesCurrentDayMinusDaysX
|
||||
}
|
||||
}
|
||||
if ($DateRange -eq 'Last30Days') {
|
||||
$DatesCurrentDayMinusDaysX = Find-DatesCurrentDayMinuxDaysX -days 30
|
||||
if ($DatesCurrentDayMinusDaysX) {
|
||||
$DatesCurrentDayMinusDaysX
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
function Get-GPOBlockedInheritance {
|
||||
[cmdletBinding()]
|
||||
param(
|
||||
[string] $Filter = '*',
|
||||
|
||||
[alias('ForestName')][string] $Forest,
|
||||
[string[]] $ExcludeDomains,
|
||||
[alias('Domain', 'Domains')][string[]] $IncludeDomains,
|
||||
[switch] $AsHashTable,
|
||||
[System.Collections.IDictionary] $ExtendedForestInformation
|
||||
)
|
||||
$OUCache = [ordered] @{}
|
||||
|
||||
$ForestInformation = Get-WinADForestDetails -Extended -Forest $Forest -IncludeDomains $IncludeDomains -ExcludeDomains $ExcludeDomains -ExtendedForestInformation $ExtendedForestInformation
|
||||
|
||||
foreach ($Domain in $ForestInformation.Domains) {
|
||||
$OrganizationalUnits = Get-ADOrganizationalUnit -Filter $Filter -Properties gpOptions, canonicalName -Server $ForestInformation['QueryServers'][$Domain]['HostName'][0] #-SearchScope Subtree
|
||||
foreach ($OU in $OrganizationalUnits) {
|
||||
$OUCache[$OU.DistinguishedName] = [PSCustomObject] @{
|
||||
DistinguishedName = $OU.DistinguishedName
|
||||
BlockedInheritance = if ($OU.gpOptions -eq 1) { $true } else { $false } # blocked inheritance
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($AsHashTable) {
|
||||
$OUCache
|
||||
} else {
|
||||
$OUCache.Values
|
||||
}
|
||||
}
|
||||
@@ -31,13 +31,13 @@ function Get-GPOZaurrLinkInheritance {
|
||||
Parameter description
|
||||
|
||||
.PARAMETER Forest
|
||||
Parameter description
|
||||
Target different Forest, by default current forest is used
|
||||
|
||||
.PARAMETER ExcludeDomains
|
||||
Parameter description
|
||||
Exclude domain from search, by default whole forest is scanned
|
||||
|
||||
.PARAMETER IncludeDomains
|
||||
Parameter description
|
||||
Include only specific domains, by default whole forest is scanned
|
||||
|
||||
.PARAMETER ExtendedForestInformation
|
||||
Parameter description
|
||||
@@ -123,9 +123,13 @@ function Get-GPOZaurrLinkInheritance {
|
||||
# While initially we used $ForestInformation.Domains but the thing is GPOs can be linked to other domains so we need to get them all so we can use cache of it later on even if we're processing just one domain
|
||||
# That's why we use $ForestInformation.Forest.Domains instead
|
||||
foreach ($Domain in $ForestInformation.Forest.Domains) {
|
||||
$QueryServer = $ForestInformation['QueryServers'][$Domain]['HostName'][0]
|
||||
Get-GPO -All -DomainName $Domain -Server $QueryServer | ForEach-Object {
|
||||
$GPOCache["$Domain$($_.ID.Guid)"] = $_
|
||||
if ($ForestInformation['QueryServers'][$Domain]) {
|
||||
$QueryServer = $ForestInformation['QueryServers'][$Domain]['HostName'][0]
|
||||
Get-GPO -All -DomainName $Domain -Server $QueryServer | ForEach-Object {
|
||||
$GPOCache["$Domain$($_.ID.Guid)"] = $_
|
||||
}
|
||||
} else {
|
||||
Write-Warning -Message "Get-GPOZaurrLinkInheritance - Couldn't get query server for $Domain. Skipped."
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
function Get-WellKnownFolders {
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Gets users and computers well known folders for a forest
|
||||
|
||||
.DESCRIPTION
|
||||
Gets users and computers well known folders for a forest
|
||||
|
||||
.PARAMETER Forest
|
||||
Target different Forest, by default current forest is used
|
||||
|
||||
.PARAMETER ExcludeDomains
|
||||
Exclude domain from search, by default whole forest is scanned
|
||||
|
||||
.PARAMETER IncludeDomains
|
||||
Include only specific domains, by default whole forest is scanned
|
||||
|
||||
.PARAMETER ExtendedForestInformation
|
||||
Ability to provide Forest Information from another command to speed up processing
|
||||
|
||||
.EXAMPLE
|
||||
Get-WellKnownFolders
|
||||
|
||||
.NOTES
|
||||
General notes
|
||||
#>
|
||||
[cmdletBinding()]
|
||||
param(
|
||||
[alias('ForestName')][string] $Forest,
|
||||
[string[]] $ExcludeDomains,
|
||||
[alias('Domain', 'Domains')][string[]] $IncludeDomains,
|
||||
[System.Collections.IDictionary] $ExtendedForestInformation
|
||||
)
|
||||
|
||||
$ForestInformation = Get-WinADForestDetails -Forest $Forest -IncludeDomains $IncludeDomains -ExcludeDomains $ExcludeDomains -ExtendedForestInformation $ExtendedForestInformation -Extended
|
||||
foreach ($Domain in $ForestInformation.Domains) {
|
||||
$ForestInformation.DomainsExtended[$Domain].ComputersContainer
|
||||
$ForestInformation.DomainsExtended[$Domain].UsersContainer
|
||||
}
|
||||
}
|
||||
+11
-3
@@ -7,7 +7,6 @@
|
||||
[switch] $OwnerOnly,
|
||||
[System.Collections.IDictionary] $ADAdministrativeGroups,
|
||||
[string] $Splitter = [System.Environment]::NewLine,
|
||||
[switch] $ReturnObject,
|
||||
[System.Collections.IDictionary] $ExcludeGroupPolicies,
|
||||
[string[]] $Type,
|
||||
[System.Collections.IDictionary] $LinksSummaryCache
|
||||
@@ -230,9 +229,18 @@
|
||||
# Mark GPO as excluded
|
||||
$Exclude = $false
|
||||
if ($ExcludeGroupPolicies) {
|
||||
$GUID = $XMLContent.GPO.Identifier.Identifier.'#text'
|
||||
$GUIDWithOutBrackets = $GUID.Replace('{', '').Replace('}', '')
|
||||
$PolicyWithDomain = -join ($XMLContent.GPO.Identifier.Domain.'#text', $XMLContent.GPO.Name)
|
||||
$PolicyWithDomainID = -join ($XMLContent.GPO.Identifier.Domain.'#text', $XMLContent.GPO.Identifier.Identifier.'#text')
|
||||
if ($ExcludeGroupPolicies[$XMLContent.GPO.Name] -or $ExcludeGroupPolicies[$PolicyWithDomain] -or $ExcludeGroupPolicies[$PolicyWithDomainID] -or $ExcludeGroupPolicies[$XMLContent.GPO.Identifier.Identifier.'#text']) {
|
||||
$PolicyWithDomainID = -join ($XMLContent.GPO.Identifier.Domain.'#text', $GUID)
|
||||
$PolicyWithDomainIDWithoutBrackets = -join ($XMLContent.GPO.Identifier.Domain.'#text', $GUIDWithOutBrackets)
|
||||
if ($ExcludeGroupPolicies[$XMLContent.GPO.Name] -or
|
||||
$ExcludeGroupPolicies[$PolicyWithDomain] -or
|
||||
$ExcludeGroupPolicies[$PolicyWithDomainID] -or
|
||||
$ExcludeGroupPolicies[$GUID] -or
|
||||
$ExcludeGroupPolicies[$GUIDWithOutBrackets] -or
|
||||
$ExcludeGroupPolicies[$PolicyWithDomainIDWithoutBrackets]
|
||||
) {
|
||||
$Exclude = $true
|
||||
}
|
||||
}
|
||||
|
||||
@@ -110,6 +110,22 @@
|
||||
} -FontSize 10pt
|
||||
}
|
||||
New-HTMLText -FontSize 10pt -Text "Please review output in table and follow the steps below table to get Active Directory Group Policies in healthy state."
|
||||
|
||||
if ($Script:Reporting['GPOBlockedInheritance']['Exclusions']) {
|
||||
New-HTMLText -LineBreak
|
||||
New-HTMLText -Text @(
|
||||
"While preparing this report following exclusions were defined. "
|
||||
"Please make sure that when you execute your steps to include those exclusions to prevent any issues. "
|
||||
) -FontSize 10pt -FontWeight bold, normal -Color Red, None -LineBreak
|
||||
|
||||
New-HTMLText -Text "Code to use for exclusions: " -FontSize 10pt -FontWeight bold -LineBreak
|
||||
|
||||
$Code = New-GPOZaurrExclusions -ExclusionsArray $Script:Reporting['GPOBlockedInheritance']['Exclusions']
|
||||
|
||||
if ($Code) {
|
||||
New-HTMLCodeBlock -Code $Code -Style powershell
|
||||
}
|
||||
}
|
||||
}
|
||||
Solution = {
|
||||
New-HTMLSection -Invisible {
|
||||
|
||||
@@ -0,0 +1,82 @@
|
||||
$GPOZaurrGPOUpdates = [ordered] @{
|
||||
Name = 'Group Policies added last 7 days'
|
||||
Enabled = $false
|
||||
Action = $null
|
||||
Data = $null
|
||||
Execute = {
|
||||
Get-GPOZaurrUpdates -DateRange Last7Days -DateProperty WhenCreated -Forest $Forest -IncludeDomains $IncludeDomains -ExcludeDomains $ExcludeDomains
|
||||
}
|
||||
Processing = {
|
||||
foreach ($GPO in $Script:Reporting['GPOUpdates']['Data']) {
|
||||
|
||||
$Script:Reporting['GPOUpdates']['Variables']['GPOTotal']++
|
||||
|
||||
if ($GPO.LinksEnabledCount -eq 0) {
|
||||
$Script:Reporting['GPOUpdates']['Variables']['GPOWithoutEnabledLinks']++
|
||||
} else {
|
||||
$Script:Reporting['GPOUpdates']['Variables']['GPOWithEnabledLinks']++
|
||||
}
|
||||
if ($GPO.AffectedCount -eq 0) {
|
||||
$Script:Reporting['GPOUpdates']['Variables']['GPOWithoutAffectedObjects']++
|
||||
}
|
||||
}
|
||||
}
|
||||
Variables = @{
|
||||
GPOTotal = 0
|
||||
GPOWithoutEnabledLinks = 0
|
||||
GPOWithEnabledLinks = 0
|
||||
GPOWithoutAffectedObjects = 0
|
||||
}
|
||||
Overview = {
|
||||
|
||||
}
|
||||
Summary = {
|
||||
New-HTMLText -TextBlock {
|
||||
"Group Policies are important part of Active Directory. Knowing when those are created and what they affect is important part of admins work."
|
||||
"This report shows which GPOs were created in last 7 days and how many objects those are affecting."
|
||||
} -FontSize 10pt -LineBreak
|
||||
New-HTMLList -Type Unordered {
|
||||
New-HTMLListItem -Text 'Group Policies added in last 7 days: ', $Script:Reporting['GPOUpdates']['Variables']['GPOTotal'] -FontWeight normal, bold
|
||||
New-HTMLListItem -Text 'Group Policies without enabled links: ', $Script:Reporting['GPOUpdates']['Variables']['GPOWithoutEnabledLinks'] -FontWeight normal, bold
|
||||
New-HTMLListItem -Text 'Group Policies with enabled links: ', $Script:Reporting['GPOUpdates']['Variables']['GPOWithEnabledLinks'] -FontWeight normal, bold
|
||||
New-HTMLListItem -Text 'Group Policies without affected objects: ', $Script:Reporting['GPOUpdates']['Variables']['GPOWithoutAffectedObjects'] -FontWeight normal, bold
|
||||
|
||||
} -FontSize 10pt
|
||||
New-HTMLText -TextBlock {
|
||||
"If you notice any GPO that is not working or against best practices please reach out to your collegues to confirm whether this is as expected."
|
||||
} -FontSize 10pt -LineBreak
|
||||
}
|
||||
Solution = {
|
||||
New-HTMLSection -Invisible {
|
||||
New-HTMLPanel {
|
||||
& $Script:GPOConfiguration['GPOUpdates']['Summary']
|
||||
}
|
||||
New-HTMLPanel {
|
||||
New-HTMLChart {
|
||||
New-ChartBarOptions -Type barStacked
|
||||
New-ChartLegend -Name 'No enabled links', 'Enabled links' -Color Crimson, MediumOrchid
|
||||
New-ChartBar -Name 'Links enabled' -Value $Script:Reporting['GPOUpdates']['Variables']['GPOWithoutEnabledLinks'], $Script:Reporting['GPOUpdates']['Variables']['GPOWithEnabledLinks']
|
||||
} -Title 'Group Policies created last 7 days' -TitleAlignment center
|
||||
}
|
||||
}
|
||||
New-HTMLSection -Name 'Group Policies added in last 7 days' {
|
||||
New-HTMLTable -DataTable $Script:Reporting['GPOUpdates']['Data'] -Filtering {
|
||||
#New-HTMLTableCondition -Name 'LinksCount' -Value 0 -BackgroundColor Salmon -ComparisonType number
|
||||
#New-HTMLTableCondition -Name 'LinksEnabledCount' -Value 0 -BackgroundColor Salmon -ComparisonType number
|
||||
New-HTMLTableCondition -Name 'AffectedCount' -Value 0 -BackgroundColor Salmon -ComparisonType number -FailBackgroundColor Goldenrod
|
||||
New-HTMLTableConditionGroup {
|
||||
New-HTMLTableCondition -Name 'LinksCount' -Value 0 -ComparisonType number
|
||||
New-HTMLTableCondition -Name 'LinksEnabledCount' -Value 0 -ComparisonType number
|
||||
} -BackgroundColor Salmon -FailBackgroundColor Goldenrod -Logic OR -HighlightHeaders 'LinksCount', 'LinksEnabledCount', 'DisplayName', 'DomainName'
|
||||
}
|
||||
}
|
||||
if ($Script:Reporting['GPOUpdates']['WarningsAndErrors']) {
|
||||
New-HTMLSection -Name 'Warnings & Errors to Review' {
|
||||
New-HTMLTable -DataTable $Script:Reporting['GPOUpdates']['WarningsAndErrors'] -Filtering {
|
||||
New-HTMLTableCondition -Name 'Type' -Value 'Warning' -BackgroundColor SandyBrown -ComparisonType string -Row
|
||||
New-HTMLTableCondition -Name 'Type' -Value 'Error' -BackgroundColor Salmon -ComparisonType string -Row
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -51,9 +51,17 @@
|
||||
# Skip GPOS that are younger than 30 days
|
||||
$Script:Reporting['GPOList']['Variables']['GPOSkip']++
|
||||
}
|
||||
if (($GPO.Enabled -eq $false -or $GPO.Empty -eq $true -or $GPO.Linked -eq $false -or $GPO.ApplyPermission -eq $false) -and $GPO.Days -le $Script:Reporting['GPOList']['Variables']['GPOOlderThan']) {
|
||||
if ($GPO.Exclude -eq $true) {
|
||||
# Skip GPOS that are excluded
|
||||
$Script:Reporting['GPOList']['Variables']['GPOSkipExcluded']++
|
||||
}
|
||||
if (($GPO.Enabled -eq $false -or $GPO.Empty -eq $true -or $GPO.Linked -eq $false -or $GPO.ApplyPermission -eq $false) -and $GPO.Exclude -eq $true) {
|
||||
$Script:Reporting['GPOList']['Variables']['GPONotValidButExcluded']++
|
||||
$Script:Reporting['GPOList']['Variables']['GPONotValidButSkippedOrExcluded']++
|
||||
} elseif (($GPO.Enabled -eq $false -or $GPO.Empty -eq $true -or $GPO.Linked -eq $false -or $GPO.ApplyPermission -eq $false) -and $GPO.Days -le $Script:Reporting['GPOList']['Variables']['GPOOlderThan']) {
|
||||
# Skip GPOS that are younger than 30 days
|
||||
$Script:Reporting['GPOList']['Variables']['GPONotValidButSkip']++
|
||||
$Script:Reporting['GPOList']['Variables']['GPONotValidButSkippedOrExcluded']++
|
||||
}
|
||||
if (($GPO.Enabled -eq $false -or $GPO.Empty -eq $true -or $GPO.Linked -eq $false -or $GPO.ApplyPermission -eq $false) -and $GPO.Days) {
|
||||
$Script:Reporting['GPOList']['Variables']['GPONotValid']++
|
||||
@@ -141,52 +149,55 @@
|
||||
}
|
||||
}
|
||||
$Script:Reporting['GPOList']['Variables']['GPOTotal'] = $Script:Reporting['GPOList']['Data'].Count
|
||||
if ($Script:Reporting['GPOList']['Variables']['GPONotValid'] -gt 0 -and $Script:Reporting['GPOList']['Variables']['GPONotValidButSkip'] -ne $Script:Reporting['GPOList']['Variables']['GPONotValid']) {
|
||||
if ($Script:Reporting['GPOList']['Variables']['GPONotValid'] -gt 0 -and $Script:Reporting['GPOList']['Variables']['GPONotValidButSkippedOrExcluded'] -ne $Script:Reporting['GPOList']['Variables']['GPONotValid']) {
|
||||
$Script:Reporting['GPOList']['ActionRequired'] = $true
|
||||
} else {
|
||||
$Script:Reporting['GPOList']['ActionRequired'] = $false
|
||||
}
|
||||
}
|
||||
Variables = @{
|
||||
GPOOlderThan = 30
|
||||
GPONotValidPerDomain = $null
|
||||
GPOValidPerDomain = $null
|
||||
GPONotOptimizedPerDomain = $null
|
||||
GPOOptimizedPerDomain = $null
|
||||
GPOProblemPerDomain = $null
|
||||
GPONoProblemPerDomain = $null
|
||||
GPOApplyPermissionYesPerDomain = $null
|
||||
GPOApplyPermissionNoPerDomain = $null
|
||||
GPOWithProblems = 0
|
||||
ComputerOptimizedYes = 0
|
||||
ComputerOptimizedNo = 0
|
||||
ComputerProblemYes = 0
|
||||
ComputerProblemNo = 0
|
||||
UserOptimizedYes = 0
|
||||
UserOptimizedNo = 0
|
||||
UserProblemYes = 0
|
||||
UserProblemNo = 0
|
||||
GPOOptimized = 0
|
||||
GPONotOptimized = 0
|
||||
GPOProblem = 0
|
||||
GPONoProblem = 0
|
||||
GPONotLinked = 0
|
||||
GPOLinked = 0
|
||||
GPOEmpty = 0
|
||||
GPONotEmpty = 0
|
||||
GPOEmptyAndUnlinked = 0
|
||||
GPOEmptyOrUnlinked = 0
|
||||
GPOLinkedButEmpty = 0
|
||||
GPOEnabled = 0
|
||||
GPODisabled = 0
|
||||
GPOSkip = 0
|
||||
GPOValid = 0
|
||||
GPONotValid = 0
|
||||
GPONotValidButSkip = 0
|
||||
GPOLinkedButLinkDisabled = 0
|
||||
GPOTotal = 0
|
||||
ApplyPermissionYes = 0
|
||||
ApplyPermissionNo = 0
|
||||
GPOOlderThan = 30
|
||||
GPONotValidPerDomain = $null
|
||||
GPOValidPerDomain = $null
|
||||
GPONotOptimizedPerDomain = $null
|
||||
GPOOptimizedPerDomain = $null
|
||||
GPOProblemPerDomain = $null
|
||||
GPONoProblemPerDomain = $null
|
||||
GPOApplyPermissionYesPerDomain = $null
|
||||
GPOApplyPermissionNoPerDomain = $null
|
||||
GPOWithProblems = 0
|
||||
ComputerOptimizedYes = 0
|
||||
ComputerOptimizedNo = 0
|
||||
ComputerProblemYes = 0
|
||||
ComputerProblemNo = 0
|
||||
UserOptimizedYes = 0
|
||||
UserOptimizedNo = 0
|
||||
UserProblemYes = 0
|
||||
UserProblemNo = 0
|
||||
GPOOptimized = 0
|
||||
GPONotOptimized = 0
|
||||
GPOProblem = 0
|
||||
GPONoProblem = 0
|
||||
GPONotLinked = 0
|
||||
GPOLinked = 0
|
||||
GPOEmpty = 0
|
||||
GPONotEmpty = 0
|
||||
GPOEmptyAndUnlinked = 0
|
||||
GPOEmptyOrUnlinked = 0
|
||||
GPOLinkedButEmpty = 0
|
||||
GPOEnabled = 0
|
||||
GPODisabled = 0
|
||||
GPOSkip = 0
|
||||
GPOSkipExcluded = 0
|
||||
GPOValid = 0
|
||||
GPONotValid = 0
|
||||
GPONotValidButSkip = 0
|
||||
GPONotValidButExcluded = 0
|
||||
GPONotValidButSkippedOrExcluded = 0
|
||||
GPOLinkedButLinkDisabled = 0
|
||||
GPOTotal = 0
|
||||
ApplyPermissionYes = 0
|
||||
ApplyPermissionNo = 0
|
||||
}
|
||||
Overview = {
|
||||
|
||||
@@ -202,6 +213,7 @@
|
||||
New-HTMLList -Type Unordered {
|
||||
New-HTMLListItem -Text 'Group Policies total: ', $Script:Reporting['GPOList']['Variables']['GPOTotal'] -FontWeight normal, bold
|
||||
New-HTMLListItem -Text "Group Policies valid: ", $Script:Reporting['GPOList']['Variables']['GPOValid'] -FontWeight normal, bold
|
||||
New-HTMLListItem -Text "Group Policies exclusions defined: ", $Script:Reporting['GPOList']['Variables']['GPOSkipExcluded'] -FontWeight normal, bold -Color None, DeepSkyBlue
|
||||
New-HTMLListItem -Text "Group Policies ", "NOT", " valid: ", $Script:Reporting['GPOList']['Variables']['GPONotValid'] -FontWeight normal, bold, normal, bold {
|
||||
New-HTMLList -Type Unordered {
|
||||
New-HTMLListItem -Text 'Group Policies that are unlinked (are not doing anything currently): ', $Script:Reporting['GPOList']['Variables']['GPONotLinked'] -FontWeight normal, bold
|
||||
@@ -213,7 +225,10 @@
|
||||
}
|
||||
} -Color Black, Red, Black, Red, Black
|
||||
New-HTMLListItem -Text @(
|
||||
"Group Policies ", "NOT", " valid, to skip: ", $Script:Reporting['GPOList']['Variables']['GPONotValidButSkip'], " (modified less than $($Script:Reporting['GPOList']['Variables']['GPOOlderThan']) days ago)"
|
||||
"Group Policies ", "NOT", " valid, to skip (because of age): ", $Script:Reporting['GPOList']['Variables']['GPONotValidButSkip'], " (modified less than $($Script:Reporting['GPOList']['Variables']['GPOOlderThan']) days ago)"
|
||||
) -FontWeight 'normal', 'bold', 'normal', 'bold', 'normal' -Color 'Black', 'Red', 'Black', 'Red', 'Black'
|
||||
New-HTMLListItem -Text @(
|
||||
"Group Policies ", "NOT", " valid, to skip (because of exclusions): ", $Script:Reporting['GPOList']['Variables']['GPONotValidButExcluded']
|
||||
) -FontWeight 'normal', 'bold', 'normal', 'bold', 'normal' -Color 'Black', 'Red', 'Black', 'Red', 'Black'
|
||||
New-HTMLListItem -Text "Group Policies recently modified: ", $Script:Reporting['GPOList']['Variables']['GPOSkip'], " (modified less than $($Script:Reporting['GPOList']['Variables']['GPOOlderThan']) days ago)" -FontWeight normal, bold
|
||||
} -FontSize 10pt
|
||||
@@ -298,6 +313,22 @@
|
||||
New-HTMLListItem -Text 'Invoke-GPOZaurr -FilePath $Env:UserProfile\Desktop\GPOZaurrGPOPListBefore.html -Verbose -Type GPOList' -Color RoyalBlue
|
||||
} -FontSize 10pt
|
||||
New-HTMLText -FontSize 10pt -Text 'Steps above will generate above summary with more details allowing you to get up to date report and steps on how to fix it.'
|
||||
|
||||
if ($Script:Reporting['GPOList']['Exclusions']) {
|
||||
New-HTMLText -LineBreak
|
||||
New-HTMLText -Text @(
|
||||
"While preparing this report following exclusions were defined. "
|
||||
"Please make sure that when you execute your steps to include those exclusions to prevent any issues. "
|
||||
) -FontSize 10pt -FontWeight bold, normal -Color Red, None -LineBreak
|
||||
|
||||
New-HTMLText -Text "Code to use for exclusions: " -FontSize 10pt -FontWeight bold -LineBreak
|
||||
|
||||
$Code = New-GPOZaurrExclusions -ExclusionsArray $Script:Reporting['GPOList']['Exclusions']
|
||||
|
||||
if ($Code) {
|
||||
New-HTMLCodeBlock -Code $Code -Style powershell
|
||||
}
|
||||
}
|
||||
}
|
||||
Solution = {
|
||||
New-HTMLSection -Invisible {
|
||||
|
||||
@@ -125,97 +125,6 @@
|
||||
New-HTMLText -Text "Please review output in table and follow the steps below table to get NetLogon permissions in order." -FontSize 10pt
|
||||
}
|
||||
Solution = {
|
||||
# New-HTMLTab -Name 'NetLogon Owners' {
|
||||
# New-HTMLSection -Invisible {
|
||||
# New-HTMLPanel {
|
||||
# & $Script:GPOConfiguration['NetLogonPermissions']['Summary']
|
||||
# }
|
||||
# New-HTMLPanel {
|
||||
# New-HTMLChart {
|
||||
# New-ChartPie -Name 'Correct Owners' -Value $Script:Reporting['NetLogonPermissions']['Variables']['NetLogonOwnersAdministrators'] -Color LightGreen
|
||||
# New-ChartPie -Name 'Incorrect Owners' -Value $Script:Reporting['NetLogonPermissions']['Variables']['NetLogonOwnersToFix'] -Color Crimson
|
||||
# } -Title 'NetLogon Owners' -TitleAlignment center
|
||||
# }
|
||||
# }
|
||||
# New-HTMLSection -Name 'NetLogon File Owners' {
|
||||
# New-HTMLTable -DataTable $Script:Reporting['NetLogonPermissions']['Variables']['Owner'] -Filtering {
|
||||
# New-HTMLTableCondition -Name 'PrincipalSid' -Value "S-1-5-32-544" -BackgroundColor LightGreen -ComparisonType string
|
||||
# New-HTMLTableCondition -Name 'PrincipalSid' -Value "S-1-5-32-544" -BackgroundColor Salmon -ComparisonType string -Operator ne
|
||||
# New-HTMLTableCondition -Name 'PrincipalType' -Value "WellKnownAdministrative" -BackgroundColor LightGreen -ComparisonType string -Operator eq
|
||||
# New-HTMLTableCondition -Name 'Status' -Value "OK" -BackgroundColor LightGreen -ComparisonType string -Operator eq
|
||||
# New-HTMLTableCondition -Name 'Status' -Value "OK" -BackgroundColor Salmon -ComparisonType string -Operator ne
|
||||
# }
|
||||
# }
|
||||
# New-HTMLSection -Name 'Steps to fix NetLogon Owners ' {
|
||||
# New-HTMLContainer {
|
||||
# New-HTMLSpanStyle -FontSize 10pt {
|
||||
# New-HTMLText -Text 'Following steps will guide you how to fix NetLogon Owners and make them compliant.'
|
||||
# New-HTMLWizard {
|
||||
# New-HTMLWizardStep -Name 'Prepare environment' {
|
||||
# New-HTMLText -Text "To be able to execute actions in automated way please install required modules. Those modules will be installed straight from Microsoft PowerShell Gallery."
|
||||
# New-HTMLCodeBlock -Code {
|
||||
# Install-Module GPOZaurr -Force
|
||||
# Import-Module GPOZaurr -Force
|
||||
# } -Style powershell
|
||||
# New-HTMLText -Text "Using force makes sure newest version is downloaded from PowerShellGallery regardless of what is currently installed. Once installed you're ready for next step."
|
||||
# }
|
||||
# New-HTMLWizardStep -Name 'Prepare report' {
|
||||
# New-HTMLText -Text "Depending when this report was run you may want to prepare new report before proceeding with removal. To generate new report please use:"
|
||||
# New-HTMLCodeBlock -Code {
|
||||
# Invoke-GPOZaurr -FilePath $Env:UserProfile\Desktop\GPOZaurrNetLogonBefore.html -Verbose -Type NetLogon
|
||||
# }
|
||||
# New-HTMLText -TextBlock {
|
||||
# "When executed it will take a while to generate all data and provide you with new report depending on size of environment."
|
||||
# "Once confirmed that data is still showing issues and requires fixing please proceed with next step."
|
||||
# }
|
||||
# New-HTMLText -Text "Alternatively if you prefer working with console you can run: "
|
||||
# New-HTMLCodeBlock -Code {
|
||||
# $NetLogonOutput = Get-GPOZaurrNetLogon -OwnerOnly -Verbose
|
||||
# $NetLogonOutput | Format-Table
|
||||
# }
|
||||
# New-HTMLText -Text "It provides same data as you see in table above just doesn't prettify it for you."
|
||||
# }
|
||||
# New-HTMLWizardStep -Name 'Set non-compliant file owners to BUILTIN\Administrators' {
|
||||
# New-HTMLText -Text "Following command when executed runs internally command that lists all file owners and if it doesn't match changes it BUILTIN\Administrators. It doesn't change compliant owners."
|
||||
# New-HTMLText -Text "Make sure when running it for the first time to run it with ", "WhatIf", " parameter as shown below to prevent accidental removal." -FontWeight normal, bold, normal -Color Black, Red, Black
|
||||
|
||||
# New-HTMLCodeBlock -Code {
|
||||
# Repair-GPOZaurrNetLogonOwner -Verbose -WhatIf
|
||||
# }
|
||||
# New-HTMLText -TextBlock {
|
||||
# "After execution please make sure there are no errors, make sure to review provided output, and confirm that what is about to be changed matches expected data. Once happy with results please follow with command: "
|
||||
# }
|
||||
# New-HTMLCodeBlock -Code {
|
||||
# Repair-GPOZaurrNetLogonOwner -Verbose -LimitProcessing 2
|
||||
# }
|
||||
# New-HTMLText -TextBlock {
|
||||
# "This command when executed sets new owner only on first X non-compliant NetLogon files. Use LimitProcessing parameter to prevent mass change and increase the counter when no errors occur."
|
||||
# "Repeat step above as much as needed increasing LimitProcessing count till there's nothing left. In case of any issues please review and action accordingly."
|
||||
# }
|
||||
# }
|
||||
# New-HTMLWizardStep -Name 'Verification report' {
|
||||
# New-HTMLText -TextBlock {
|
||||
# "Once cleanup task was executed properly, we need to verify that report now shows no problems."
|
||||
# }
|
||||
# New-HTMLCodeBlock -Code {
|
||||
# Invoke-GPOZaurr -FilePath $Env:UserProfile\Desktop\GPOZaurrNetLogonAfter.html -Verbose -Type NetLogon
|
||||
# }
|
||||
# New-HTMLText -Text "If everything is healthy in the report you're done! Enjoy rest of the day!" -Color BlueDiamond
|
||||
# }
|
||||
# } -RemoveDoneStepOnNavigateBack -Theme arrows -ToolbarButtonPosition center -EnableAllAnchors
|
||||
# }
|
||||
# }
|
||||
# }
|
||||
# if ($Script:Reporting['NetLogonPermissions']['WarningsAndErrors']) {
|
||||
# New-HTMLSection -Name 'Warnings & Errors to Review' {
|
||||
# New-HTMLTable -DataTable $Script:Reporting['NetLogonPermissions']['WarningsAndErrors'] -Filtering {
|
||||
# New-HTMLTableCondition -Name 'Type' -Value 'Warning' -BackgroundColor SandyBrown -ComparisonType string -Row
|
||||
# New-HTMLTableCondition -Name 'Type' -Value 'Error' -BackgroundColor Salmon -ComparisonType string -Row
|
||||
# }
|
||||
# }
|
||||
# }
|
||||
# }
|
||||
#New-HTMLTab -Name 'NetLogon Permissions' {
|
||||
New-HTMLSection -Invisible {
|
||||
New-HTMLPanel {
|
||||
& $Script:GPOConfiguration['NetLogonPermissions']['Summary']
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
$Script:Reporting['GPOOrganizationalUnit']['Variables']['WillFixPerDomain'][$OU.DomainName] = 0
|
||||
}
|
||||
if ($OU.Status -contains 'Unlink GPO' -and $OU.Status -contains 'Delete OU') {
|
||||
$Script:Reporting['GPOOrganizationalUnit']['Variables']['UnlinkGPODeleteOU']++
|
||||
$Script:Reporting['GPOOrganizationalUnit']['Variables']['UnlinkGPOEmpty']++
|
||||
$Script:Reporting['GPOOrganizationalUnit']['Variables']['WillFix']++
|
||||
$Script:Reporting['GPOOrganizationalUnit']['Variables']['WillFixPerDomain'][$OU.DomainName]++
|
||||
} elseif ($OU.Status -contains 'Unlink GPO') {
|
||||
@@ -30,9 +30,9 @@
|
||||
$Script:Reporting['GPOOrganizationalUnit']['Variables']['WillFixPerDomain'][$OU.DomainName]++
|
||||
} elseif ($OU.Status -contains 'Delete OU') {
|
||||
$Script:Reporting['GPOOrganizationalUnit']['Variables']['DeleteOU']++
|
||||
$Script:Reporting['GPOOrganizationalUnit']['Variables']['WillFix']++
|
||||
$Script:Reporting['GPOOrganizationalUnit']['Variables']['WillFixPerDomain'][$OU.DomainName]++
|
||||
} elseif ($OU.Status -contains 'Excluded') {
|
||||
#$Script:Reporting['GPOOrganizationalUnit']['Variables']['WillFix']++
|
||||
#$Script:Reporting['GPOOrganizationalUnit']['Variables']['WillFixPerDomain'][$OU.DomainName]++
|
||||
} elseif ($OU.Status -contains 'Excluded' -or $OU.Status -contains 'Excluded, Default OU') {
|
||||
$Script:Reporting['GPOOrganizationalUnit']['Variables']['Excluded']++
|
||||
$Script:Reporting['GPOOrganizationalUnit']['Variables']['ExcludedOU'].Add($OU.Organizationalunit)
|
||||
} else {
|
||||
@@ -46,15 +46,15 @@
|
||||
}
|
||||
}
|
||||
Variables = @{
|
||||
TotalOU = 0
|
||||
UnlinkGPO = 0
|
||||
UnlinkGPODeleteOU = 0
|
||||
DeleteOU = 0
|
||||
Legitimate = 0
|
||||
Excluded = 0
|
||||
ExcludedOU = [System.Collections.Generic.List[string]]::new()
|
||||
WillFix = 0
|
||||
WillFixPerDomain = $null
|
||||
TotalOU = 0
|
||||
UnlinkGPO = 0
|
||||
UnlinkGPOEmpty = 0
|
||||
DeleteOU = 0
|
||||
Legitimate = 0
|
||||
Excluded = 0
|
||||
ExcludedOU = [System.Collections.Generic.List[string]]::new()
|
||||
WillFix = 0
|
||||
WillFixPerDomain = $null
|
||||
}
|
||||
Overview = {
|
||||
|
||||
@@ -69,8 +69,8 @@
|
||||
New-HTMLText -FontSize 10pt -Text "Following can happen: " -FontWeight bold
|
||||
New-HTMLList -Type Unordered {
|
||||
New-HTMLListItem -Text 'Organizational Units that can have Group Policies unlinked (objects exists): ', $Script:Reporting['GPOOrganizationalUnit']['Variables']['UnlinkGPO'] -FontWeight normal, bold
|
||||
New-HTMLListItem -Text 'Organizational Units that can have Group Policies unlinked and OU removed (be careful!) (no objects): ', $Script:Reporting['GPOOrganizationalUnit']['Variables']['UnlinkGPODeleteOU'] -FontWeight normal, bold
|
||||
New-HTMLListItem -Text "Organizational Units that can be deleted (no objects/no gpos): ", $Script:Reporting['GPOOrganizationalUnit']['Variables']['DeleteOU'] -FontWeight normal, bold
|
||||
New-HTMLListItem -Text 'Organizational Units that can have Group Policies unlinked (no applicable objects): ', $Script:Reporting['GPOOrganizationalUnit']['Variables']['UnlinkGPOEmpty'] -FontWeight normal, bold
|
||||
New-HTMLListItem -Text "Organizational Units that can be deleted (no objects/no gpos) - ", "optional", ": ", $Script:Reporting['GPOOrganizationalUnit']['Variables']['DeleteOU'] -FontWeight normal, bold, normal, bold -Color None, red, None, None
|
||||
} -FontSize 10pt
|
||||
New-HTMLText -Text 'Following domains require actions (permissions required):' -FontSize 10pt -FontWeight bold
|
||||
New-HTMLList -Type Unordered {
|
||||
@@ -99,6 +99,22 @@
|
||||
"Please make sure that you really want to unlink GPO or delete Organizational Unit before executing changes. Sometimes it's completly valid to keep one or the other. "
|
||||
"Unlinking GPO from OU that has no Computer or User objects is fairly safe exercise. Removing OU requires a bit more dive in, and should only be executed if you know what you're doing. "
|
||||
) -FontWeight normal, bold -Color None, Red -FontSize 10pt
|
||||
|
||||
if ($Script:Reporting['GPOOrganizationalUnit']['Exclusions']) {
|
||||
New-HTMLText -LineBreak
|
||||
New-HTMLText -Text @(
|
||||
"While preparing this report following exclusions were defined. "
|
||||
"Please make sure that when you execute your steps to include those exclusions to prevent any issues. "
|
||||
) -FontSize 10pt -FontWeight bold, normal -Color Red, None -LineBreak
|
||||
|
||||
New-HTMLText -Text "Code to use for exclusions: " -FontSize 10pt -FontWeight bold -LineBreak
|
||||
|
||||
$Code = New-GPOZaurrExclusions -ExclusionsArray $Script:Reporting['GPOOrganizationalUnit']['Exclusions']
|
||||
|
||||
if ($Code) {
|
||||
New-HTMLCodeBlock -Code $Code -Style powershell
|
||||
}
|
||||
}
|
||||
}
|
||||
Solution = {
|
||||
New-HTMLSection -Invisible {
|
||||
@@ -110,7 +126,7 @@
|
||||
New-ChartBarOptions -Type bar -Distributed
|
||||
New-ChartAxisY -LabelMaxWidth 200 -LabelAlign left -Show
|
||||
New-ChartBar -Name "Unlink GPO ($($Script:Reporting['GPOOrganizationalUnit']['Variables']['UnlinkGPO']))" -Value $Script:Reporting['GPOOrganizationalUnit']['Variables']['UnlinkGPO']
|
||||
New-ChartBar -Name "Unlink GPO Delete OU ($($Script:Reporting['GPOOrganizationalUnit']['Variables']['UnlinkGPODeleteOU']))" -Value $Script:Reporting['GPOOrganizationalUnit']['Variables']['UnlinkGPODeleteOU']
|
||||
New-ChartBar -Name "Unlink GPO Delete OU ($($Script:Reporting['GPOOrganizationalUnit']['Variables']['UnlinkGPOEmpty']))" -Value $Script:Reporting['GPOOrganizationalUnit']['Variables']['UnlinkGPOEmpty']
|
||||
New-ChartBar -Name "Delete OU ($($Script:Reporting['GPOOrganizationalUnit']['Variables']['DeleteOU']))" -Value $Script:Reporting['GPOOrganizationalUnit']['Variables']['DeleteOU']
|
||||
} -Title 'Organizational Units' -TitleAlignment center
|
||||
}
|
||||
@@ -123,6 +139,7 @@
|
||||
New-HTMLTableCondition -Name 'Status' -ComparisonType string -Value 'Delete OU' -BackgroundColor Red -Row
|
||||
New-HTMLTableCondition -Name 'Status' -ComparisonType string -Value 'OK' -BackgroundColor LightGreen -Row
|
||||
New-HTMLTableCondition -Name 'Status' -ComparisonType string -Value 'Excluded' -BackgroundColor DeepSkyBlue -Row
|
||||
New-HTMLTableCondition -Name 'Status' -ComparisonType string -Value 'Excluded, Default OU' -BackgroundColor DeepSkyBlue -Row
|
||||
} -PagingOptions 10, 20, 30, 40, 50 -ExcludeProperty GPO
|
||||
}
|
||||
if ($Script:Reporting['Settings']['HideSteps'] -eq $false) {
|
||||
|
||||
@@ -140,6 +140,22 @@
|
||||
New-HTMLListItem -Text "$Domain requires ", $Script:Reporting['GPOOwners']['Variables']['RequiresDiffFixPerDomain'][$Domain], " changes." -FontWeight normal, bold, normal
|
||||
}
|
||||
} -FontSize 10pt
|
||||
|
||||
if ($Script:Reporting['GPOOwners']['Exclusions']) {
|
||||
New-HTMLText -LineBreak
|
||||
New-HTMLText -Text @(
|
||||
"While preparing this report following exclusions were defined. "
|
||||
"Please make sure that when you execute your steps to include those exclusions to prevent any issues. "
|
||||
) -FontSize 10pt -FontWeight bold, normal -Color Red, None -LineBreak
|
||||
|
||||
New-HTMLText -Text "Code to use for exclusions: " -FontSize 10pt -FontWeight bold -LineBreak
|
||||
|
||||
$Code = New-GPOZaurrExclusions -ExclusionsArray $Script:Reporting['GPOOwners']['Exclusions']
|
||||
|
||||
if ($Code) {
|
||||
New-HTMLCodeBlock -Code $Code -Style powershell
|
||||
}
|
||||
}
|
||||
}
|
||||
Solution = {
|
||||
New-HTMLSection -Invisible {
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -16,6 +16,7 @@
|
||||
GPOFiles = $GPOZaurrFiles
|
||||
GPOBlockedInheritance = $GPOZaurrBlockedInheritance
|
||||
GPOAnalysis = $GPOZaurrAnalysis
|
||||
GPOUpdates = $GPOZaurrGPOUpdates
|
||||
NetLogonOwners = $GPOZaurrNetLogonOwners
|
||||
NetLogonPermissions = $GPOZaurrNetLogonPermissions
|
||||
SysVolLegacyFiles = $GPOZaurrSysVolLegacyFiles
|
||||
|
||||
@@ -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
-2
@@ -1,4 +1,71 @@
|
||||
function Get-GPOZaurr {
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Gets information about all Group Policies. Similar to what Get-GPO provides by default.
|
||||
|
||||
.DESCRIPTION
|
||||
Gets information about all Group Policies. Similar to what Get-GPO provides by default.
|
||||
|
||||
.PARAMETER ExcludeGroupPolicies
|
||||
Marks the GPO as excluded from the list.
|
||||
|
||||
.PARAMETER GPOName
|
||||
Provide a GPOName to get information about a specific GPO.
|
||||
|
||||
.PARAMETER GPOGuid
|
||||
Provide a GPOGuid to get information about a specific GPO.
|
||||
|
||||
.PARAMETER Type
|
||||
Choose a specific type of GPO. Options are: 'Empty', 'Unlinked', 'Disabled', 'NoApplyPermission', 'All'. Default is All.
|
||||
|
||||
.PARAMETER Forest
|
||||
Target different Forest, by default current forest is used
|
||||
|
||||
.PARAMETER ExcludeDomains
|
||||
Exclude domain from search, by default whole forest is scanned
|
||||
|
||||
.PARAMETER IncludeDomains
|
||||
Include only specific domains, by default whole forest is scanned
|
||||
|
||||
.PARAMETER ExtendedForestInformation
|
||||
Ability to provide Forest Information from another command to speed up processing
|
||||
|
||||
.PARAMETER GPOPath
|
||||
Define GPOPath where the XML files are located to be analyzed instead of asking Active Directory
|
||||
|
||||
.PARAMETER PermissionsOnly
|
||||
Only show permissions, by default all information is shown
|
||||
|
||||
.PARAMETER OwnerOnly
|
||||
only show owner information, by default all information is shown
|
||||
|
||||
.PARAMETER Limited
|
||||
Provide limited output without analyzing XML data
|
||||
|
||||
.PARAMETER ADAdministrativeGroups
|
||||
Ability to provide ADAdministrativeGroups from different function to speed up processing
|
||||
|
||||
.EXAMPLE
|
||||
$GPOs = Get-GPOZaurr
|
||||
$GPOs | Format-Table DisplayName, Owner, OwnerSID, OwnerType
|
||||
|
||||
.EXAMPLE
|
||||
$GPO = Get-GPOZaurr -GPOName 'ALL | Allow use of biometrics'
|
||||
$GPO | Format-List *
|
||||
|
||||
.EXAMPLE
|
||||
$GPOS = Get-GPOZaurr -ExcludeGroupPolicies {
|
||||
Skip-GroupPolicy -Name 'de14_usr_std'
|
||||
Skip-GroupPolicy -Name 'de14_usr_std' -DomaiName 'ad.evotec.xyz'
|
||||
Skip-GroupPolicy -Name 'All | Trusted Websites' #-DomaiName 'ad.evotec.xyz'
|
||||
'{D39BF08A-87BF-4662-BFA0-E56240EBD5A2}'
|
||||
'COMPUTERS | Enable Sets'
|
||||
}
|
||||
$GPOS | Format-Table -AutoSize *
|
||||
|
||||
.NOTES
|
||||
General notes
|
||||
#>
|
||||
[cmdletBinding()]
|
||||
param(
|
||||
[scriptblock] $ExcludeGroupPolicies,
|
||||
@@ -16,7 +83,6 @@
|
||||
[switch] $PermissionsOnly,
|
||||
[switch] $OwnerOnly,
|
||||
[switch] $Limited,
|
||||
[switch] $ReturnObject,
|
||||
[System.Collections.IDictionary] $ADAdministrativeGroups
|
||||
)
|
||||
Begin {
|
||||
@@ -90,7 +156,7 @@
|
||||
Write-Warning "Get-GPOZaurr - Failed to get [$($GPO.DomainName)]($Count/$($GroupPolicies.Count)) $($GPO.DisplayName) GPOReport: $($_.Exception.Message). Skipping."
|
||||
continue
|
||||
}
|
||||
Get-XMLGPO -OwnerOnly:$OwnerOnly.IsPresent -XMLContent $XMLContent -GPO $GPO -PermissionsOnly:$PermissionsOnly.IsPresent -ADAdministrativeGroups $ADAdministrativeGroups -ReturnObject:$ReturnObject.IsPresent -ExcludeGroupPolicies $ExcludeGPO -Type $Type -LinksSummaryCache $LinksSummaryCache
|
||||
Get-XMLGPO -OwnerOnly:$OwnerOnly.IsPresent -XMLContent $XMLContent -GPO $GPO -PermissionsOnly:$PermissionsOnly.IsPresent -ADAdministrativeGroups $ADAdministrativeGroups -ExcludeGroupPolicies $ExcludeGPO -Type $Type -LinksSummaryCache $LinksSummaryCache
|
||||
} else {
|
||||
$GPO
|
||||
}
|
||||
|
||||
@@ -10,6 +10,11 @@
|
||||
[alias('ForestName')][string] $Forest,
|
||||
[string[]] $ExcludeDomains,
|
||||
[alias('Domain', 'Domains')][string[]] $IncludeDomains,
|
||||
|
||||
[DateTime] $DateFrom,
|
||||
[DateTime] $DateTo,
|
||||
[ValidateSet('PastHour', 'CurrentHour', 'PastDay', 'CurrentDay', 'PastMonth', 'CurrentMonth', 'PastQuarter', 'CurrentQuarter', 'Last14Days', 'Last21Days', 'Last30Days', 'Last7Days', 'Last3Days', 'Last1Days')][string] $DateRange,
|
||||
[ValidateSet('WhenCreated', 'WhenChanged')][string[]] $DateProperty = 'WhenCreated',
|
||||
[System.Collections.IDictionary] $ExtendedForestInformation
|
||||
)
|
||||
Begin {
|
||||
@@ -48,7 +53,39 @@
|
||||
Server = $ForestInformation['QueryServers'][$Domain]['HostName'][0]
|
||||
}
|
||||
}
|
||||
Get-ADObject @Splat -Properties DisplayName, Name, Created, Modified, gPCFileSysPath, gPCFunctionalityVersion, gPCWQLFilter, gPCMachineExtensionNames, Description, CanonicalName, DistinguishedName | ForEach-Object -Process {
|
||||
# allows to only get GPOs from a specific date range
|
||||
if ($PSBoundParameters.ContainsKey('DateRange')) {
|
||||
$Dates = Get-ChoosenDates -DateRange $DateRange
|
||||
$DateFrom = $($Dates.DateFrom)
|
||||
$DateTo = $($Dates.DateTo)
|
||||
|
||||
if ($DateProperty -contains 'WhenChanged' -and $DateProperty -contains 'WhenCreated') {
|
||||
$Splat['Filter'] = -join ($Splat['Filter'], ' -and ((WhenChanged -ge $DateFrom -and WhenChanged -le $DateTo) -or (WhenCreated -ge $DateFrom -and WhenCreated -le $DateTo))')
|
||||
} elseif ($DateProperty -eq 'WhenChanged' -or $DateProperty -eq 'WhenCreated') {
|
||||
$Property = $DateProperty[0]
|
||||
$Splat['Filter'] = -join ($Splat['Filter'], ' -and ($Property -ge $DateFrom -and $Property -le $DateTo)')
|
||||
} else {
|
||||
Write-Warning -Message "Get-GPOZaurrAD - DateProperty parameter is empty. Provide name and try again."
|
||||
continue
|
||||
}
|
||||
} elseif ($PSBoundParameters.ContainsKey('DateFrom') -and $PSBoundParameters.ContainsKey('DateTo')) {
|
||||
# already set $DateFrom,DateTo
|
||||
#$Splat['Filter'] = -join ($Splat['Filter'], '-and ($DateProperty -ge $DateFrom -and $DateProperty -le $DateTo)')
|
||||
if ($DateProperty -contains 'WhenChanged' -and $DateProperty -contains 'WhenCreated') {
|
||||
$Splat['Filter'] = -join ($Splat['Filter'], ' -and ((WhenChanged -ge $DateFrom -and WhenChanged -le $DateTo) -or (WhenCreated -ge $DateFrom -and WhenCreated -le $DateTo))')
|
||||
} elseif ($DateProperty -eq 'WhenChanged' -or $DateProperty -eq 'WhenCreated') {
|
||||
$Property = $DateProperty[0]
|
||||
$Splat['Filter'] = -join ($Splat['Filter'], ' -and ($Property -ge $DateFrom -and $Property -le $DateTo)')
|
||||
} else {
|
||||
Write-Warning -Message "Get-GPOZaurrAD - DateProperty parameter is empty. Provide name and try again."
|
||||
continue
|
||||
}
|
||||
} else {
|
||||
# not needed
|
||||
}
|
||||
|
||||
Write-Verbose -Message "Get-GPOZaurrAD - Searching domain $Domain with filter $($Splat['Filter'])"
|
||||
Get-ADObject @Splat -Properties DisplayName, Name, Created, Modified, ntSecurityDescriptor, gPCFileSysPath, gPCFunctionalityVersion, gPCWQLFilter, gPCMachineExtensionNames, Description, CanonicalName, DistinguishedName | ForEach-Object -Process {
|
||||
$DomainCN = ConvertFrom-DistinguishedName -DistinguishedName $_.DistinguishedName -ToDomainCN
|
||||
$GUID = $_.Name -replace '{' -replace '}'
|
||||
if (($GUID).Length -ne 36) {
|
||||
@@ -60,9 +97,10 @@
|
||||
$Output['Description'] = $_.Description
|
||||
$Output['GUID'] = $GUID
|
||||
$Output['Path'] = $_.gPCFileSysPath
|
||||
$Output['FunctionalityVersion'] = $_.gPCFunctionalityVersion
|
||||
#$Output['FunctionalityVersion'] = $_.gPCFunctionalityVersion
|
||||
$Output['Created'] = $_.Created
|
||||
$Output['Modified'] = $_.Modified
|
||||
$Output['Owner'] = $_.ntSecurityDescriptor.Owner
|
||||
$Output['GPOCanonicalName'] = $_.CanonicalName
|
||||
$Output['GPODomainDistinguishedName'] = ConvertFrom-DistinguishedName -DistinguishedName $_.DistinguishedName -ToDC
|
||||
$Output['GPODistinguishedName'] = $_.DistinguishedName
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -72,9 +72,13 @@
|
||||
# That's why we use $ForestInformation.Forest.Domains instead
|
||||
foreach ($Domain in $ForestInformation.Forest.Domains) {
|
||||
Write-Verbose "Get-GPOZaurrLink - Building GPO cache for domain $Domain"
|
||||
$QueryServer = $ForestInformation['QueryServers'][$Domain]['HostName'][0]
|
||||
Get-GPO -All -DomainName $Domain -Server $QueryServer | ForEach-Object {
|
||||
$GPOCache["$Domain$($_.ID.Guid)"] = $_
|
||||
if ($ForestInformation['QueryServers'][$Domain]) {
|
||||
$QueryServer = $ForestInformation['QueryServers'][$Domain]['HostName'][0]
|
||||
Get-GPO -All -DomainName $Domain -Server $QueryServer | ForEach-Object {
|
||||
$GPOCache["$Domain$($_.ID.Guid)"] = $_
|
||||
}
|
||||
} else {
|
||||
Write-Warning -Message "Get-GPOZaurrLink - Couldn't get query server for $Domain. Skipped."
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
$CachedGPO = [ordered] @{}
|
||||
|
||||
$ForestInformation = Get-WinADForestDetails -Extended -Forest $Forest -IncludeDomains $IncludeDomains -ExcludeDomains $ExcludeDomains -ExtendedForestInformation $ExtendedForestInformation
|
||||
$DefaultFolders = Get-WellKnownFolders -Forest $Forest -IncludeDomains $IncludeDomains -ExcludeDomains $ExcludeDomains -ExtendedForestInformation $ExtendedForestInformation
|
||||
$GroupPolicies = Get-GPOZaurrAD -Forest $Forest -IncludeDomains $IncludeDomains -ExcludeDomains $ExcludeDomains -ExtendedForestInformation $ExtendedForestInformation
|
||||
foreach ($GPO in $GroupPolicies) {
|
||||
$CachedGPO[$GPO.GPODistinguishedName] = $GPO
|
||||
@@ -39,6 +40,7 @@
|
||||
'ObjectsCountIndirect' = 0
|
||||
'ObjectsCountTotal' = 0
|
||||
'Level' = 'Top'
|
||||
'RootLevel' = $TopOU.Name
|
||||
'Domain' = $Domain
|
||||
}
|
||||
|
||||
@@ -61,6 +63,7 @@
|
||||
'ObjectsCountIndirect' = 0
|
||||
'ObjectsCountTotal' = 0
|
||||
'Level' = 'Child'
|
||||
'RootLevel' = $TopOU.Name
|
||||
'Domain' = $Domain
|
||||
}
|
||||
}
|
||||
@@ -115,6 +118,12 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
foreach ($Exclude in $DefaultFolders) {
|
||||
if ($OU -eq "$Exclude") {
|
||||
$Found = $false
|
||||
break
|
||||
}
|
||||
}
|
||||
if (-not $Found) {
|
||||
continue
|
||||
}
|
||||
@@ -127,11 +136,18 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
foreach ($Exclude in $DefaultFolders) {
|
||||
if ($OU -eq "$Exclude") {
|
||||
$Status = 'Excluded, Default OU'
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[PSCustomObject] @{
|
||||
Organizationalunit = $OU
|
||||
Level = $CachedOu[$OU]['Level']
|
||||
RootLevel = $CachedOu[$OU]['RootLevel']
|
||||
DomainName = $CachedOu[$OU]['Domain']
|
||||
Status = $Status
|
||||
GPOCount = $CachedOu[$OU]['LinkedGroupPolicyObjects'].Count
|
||||
|
||||
@@ -84,7 +84,7 @@
|
||||
foreach ($_ in $Objects) {
|
||||
$Count++
|
||||
Write-Verbose "Get-GPOZaurrOwner - Processing GPO [$Count/$($Objects.Count)]: $($_.DisplayName) from domain: $($_.DomainName)"
|
||||
$ACL = Get-ADACLOwner -ADObject $_.GPODistinguishedName -Resolve -ADAdministrativeGroups $ADAdministrativeGroups -Verbose:$false
|
||||
$ACL = Get-ADACLOwner -ADObject $_.GPODistinguishedName -Resolve -Verbose:$false
|
||||
$Object = [ordered] @{
|
||||
DisplayName = $_.DisplayName
|
||||
DomainName = $_.DomainName
|
||||
|
||||
@@ -1,4 +1,42 @@
|
||||
function Get-GPOZaurrSysvolDFSR {
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Gets DFSR information from the SYSVOL DFSR
|
||||
|
||||
.DESCRIPTION
|
||||
Gets DFSR information from the SYSVOL DFSR
|
||||
|
||||
.PARAMETER Forest
|
||||
Target different Forest, by default current forest is used
|
||||
|
||||
.PARAMETER ExcludeDomains
|
||||
Exclude domain from search, by default whole forest is scanned
|
||||
|
||||
.PARAMETER IncludeDomains
|
||||
Include only specific domains, by default whole forest is scanned
|
||||
|
||||
.PARAMETER ExcludeDomainControllers
|
||||
Exclude specific domain controllers, by default there are no exclusions, as long as VerifyDomainControllers switch is enabled. Otherwise this parameter is ignored.
|
||||
|
||||
.PARAMETER IncludeDomainControllers
|
||||
Include only specific domain controllers, by default all domain controllers are included, as long as VerifyDomainControllers switch is enabled. Otherwise this parameter is ignored.
|
||||
|
||||
.PARAMETER SkipRODC
|
||||
Skip Read-Only Domain Controllers. By default all domain controllers are included.
|
||||
|
||||
.PARAMETER ExtendedForestInformation
|
||||
Ability to provide Forest Information from another command to speed up processing
|
||||
|
||||
.PARAMETER SearchDFSR
|
||||
Define DFSR Share. By default it uses SYSVOL Share
|
||||
|
||||
.EXAMPLE
|
||||
$DFSR = Get-GPOZaurrSysvolDFSR
|
||||
$DFSR | Format-Table *
|
||||
|
||||
.NOTES
|
||||
General notes
|
||||
#>
|
||||
[cmdletBinding()]
|
||||
param(
|
||||
[alias('ForestName')][string] $Forest,
|
||||
|
||||
@@ -0,0 +1,145 @@
|
||||
function Get-GPOZaurrUpdates {
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Gets the list of GPOs created or updated in the last X number of days.
|
||||
|
||||
.DESCRIPTION
|
||||
Gets the list of GPOs created or updated in the last X number of days.
|
||||
|
||||
.PARAMETER Forest
|
||||
Target different Forest, by default current forest is used
|
||||
|
||||
.PARAMETER ExcludeDomains
|
||||
Exclude domain from search, by default whole forest is scanned
|
||||
|
||||
.PARAMETER IncludeDomains
|
||||
Include only specific domains, by default whole forest is scanned
|
||||
ą
|
||||
.PARAMETER DateFrom
|
||||
Provide a date from which to start the search, by default the last X days are used
|
||||
|
||||
.PARAMETER DateTo
|
||||
Provide a date to which to end the search, by default the last X days are used
|
||||
|
||||
.PARAMETER DateRange
|
||||
Provide a date range to search for, by default the last X days are used
|
||||
|
||||
.PARAMETER DateProperty
|
||||
Choose a date property. It can be WhenCreated or WhenChanged or both. By default whenCreated is used for comparison purposes
|
||||
|
||||
.PARAMETER ExtendedForestInformation
|
||||
Ability to provide Forest Information from another command to speed up processing
|
||||
|
||||
.EXAMPLE
|
||||
Get-GPOZaurrUpdates -DateRange Last14Days -DateProperty WhenCreated, WhenChanged -Verbose -IncludeDomains 'ad.evotec.pl' | Format-List
|
||||
|
||||
.EXAMPLE
|
||||
Get-GPOZaurrUpdates -DateRange Last14Days -DateProperty WhenCreated -Verbose | Format-Table
|
||||
|
||||
.NOTES
|
||||
General notes
|
||||
#>
|
||||
[cmdletBinding(DefaultParameterSetName = 'DateRange')]
|
||||
param(
|
||||
[parameter(ParameterSetName = 'Dates')]
|
||||
[parameter(ParameterSetName = 'DateRange')]
|
||||
[alias('ForestName')][string] $Forest,
|
||||
[parameter(ParameterSetName = 'Dates')]
|
||||
[parameter(ParameterSetName = 'DateRange')]
|
||||
[string[]] $ExcludeDomains,
|
||||
[parameter(ParameterSetName = 'Dates')]
|
||||
[parameter(ParameterSetName = 'DateRange')]
|
||||
[alias('Domain', 'Domains')][string[]] $IncludeDomains,
|
||||
[parameter(Mandatory, ParameterSetName = 'Dates')][DateTime] $DateFrom,
|
||||
[parameter(Mandatory, ParameterSetName = 'Dates')][DateTime] $DateTo,
|
||||
[parameter(Mandatory, ParameterSetName = 'DateRange')][ValidateSet('PastHour', 'CurrentHour', 'PastDay', 'CurrentDay', 'PastMonth', 'CurrentMonth', 'PastQuarter', 'CurrentQuarter', 'Last14Days', 'Last21Days', 'Last30Days', 'Last7Days', 'Last3Days', 'Last1Days')][string] $DateRange,
|
||||
[parameter(ParameterSetName = 'Dates')]
|
||||
[parameter(ParameterSetName = 'DateRange')]
|
||||
[ValidateSet('WhenCreated', 'WhenChanged')][string[]] $DateProperty = 'WhenCreated',
|
||||
[parameter(ParameterSetName = 'Dates')]
|
||||
[parameter(ParameterSetName = 'DateRange')]
|
||||
[System.Collections.IDictionary] $ExtendedForestInformation
|
||||
)
|
||||
$getGPOZaurrADSplat = @{
|
||||
Forest = $Forest
|
||||
IncludeDomains = $IncludeDomains
|
||||
ExcludeDomains = $ExcludeDomains
|
||||
ExtendedForestInformation = $ExtendedForestInformation
|
||||
DateFrom = $DateFrom
|
||||
DateTo = $DateTo
|
||||
DateRange = $DateRange
|
||||
DateProperty = $DateProperty
|
||||
}
|
||||
Remove-EmptyValue -Hashtable $getGPOZaurrADSplat
|
||||
# lets get all the links including sites
|
||||
|
||||
if ($DateRange) {
|
||||
Write-Verbose -Message "Get-GPOZaurrUpdates - Get group policies for defined range $DateRange"
|
||||
} elseif ($DateFrom -and $DateTo) {
|
||||
Write-Verbose -Message "Get-GPOZaurrUpdates - Get group policies for defined range $DateFrom to $DateTo"
|
||||
} else {
|
||||
Write-Warning -Message "Get-GPOZaurrUpdates - No range is selected. Try again."
|
||||
return
|
||||
}
|
||||
$LinksSummaryCache = Get-GPOZaurrLink -AsHashTable -Summary -Forest $Forest -IncludeDomains $IncludeDomains -ExcludeDomains $ExcludeDomains -ExtendedForestInformation $ExtendedForestInformation
|
||||
|
||||
$OUCache = [ordered] @{}
|
||||
foreach ($Domain in $ForestInformation.Domains) {
|
||||
Write-Verbose -Message "Get-GPOZaurrUpdates - Getting OU's for $Domain"
|
||||
$OrganizationalUnits = Get-ADOrganizationalUnit -Filter * -Properties gpOptions, canonicalName -Server $ForestInformation['QueryServers'][$Domain]['HostName'][0]
|
||||
$OUCache[$OrganizationalUnits.DistinguishedName] = if ($OrganizationalUnits.gpOptions -eq 1) { $true } else { $false } # blocked inheritance
|
||||
}
|
||||
|
||||
$CurrentCount = 0
|
||||
Write-Verbose -Message "Get-GPOZaurrUpdates - Getting GPO information"
|
||||
[Array] $GPOs = Get-GPOZaurrAD @getGPOZaurrADSplat
|
||||
foreach ($GPO in $GPOs) {
|
||||
$CurrentCount++
|
||||
Write-Verbose -Message "Get-GPOZaurrUpdates - Processing $($GPO.DisplayName) / $($GPO.DomainName) [$CurrentCount/$($GPOs.Count)]"
|
||||
$GPOLinkData = $LinksSummaryCache["$($GPO.DomainName)$($GPO.GUID)"]
|
||||
#$GPOLinkData
|
||||
[Array] $LinksDN = if ($GPOLinkData.Links.Count -gt 0) {
|
||||
foreach ($Link in $GPOLinkData.LinksObjects) {
|
||||
If ($Link.Enabled -eq $true) {
|
||||
$Link.DistinguishedName
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($LinksDN.Count -gt 0) {
|
||||
$OrganizationalUnitsObjects = Get-ADOrganizationalUnitObject -OrganizationalUnit $LinksDN -Summary -IncludeAffectedOnly
|
||||
} else {
|
||||
# GPO is not linked
|
||||
$OrganizationalUnitsObjects = [PSCUstomObject] @{
|
||||
ObjectsTotalCount = 0
|
||||
ObjectsBlockedInheritanceCount = 0
|
||||
ObjectsClasses = @()
|
||||
}
|
||||
}
|
||||
if ($GPO.Owner) {
|
||||
$Owner = Get-WinADObject -Identity $GPO.Owner -AddType
|
||||
} else {
|
||||
$Owner = [PSCustomObject] @{
|
||||
Name = 'Unknown'
|
||||
Type = 'Unknown'
|
||||
ObjectClass = 'Unknown'
|
||||
}
|
||||
}
|
||||
[PSCustomObject] @{
|
||||
DisplayName = $GPO.DisplayName
|
||||
GUID = ConvertFrom-DistinguishedName -DistinguishedName $GPO.GPODistinguishedName
|
||||
DomainName = $GPO.DomainName
|
||||
Owner = $GPO.Owner
|
||||
OwnerName = $Owner.Name
|
||||
OwnerType = $Owner.Type
|
||||
OwnerClass = $Owner.ObjectClass
|
||||
LinksCount = if ($GPOLinkData) { $GPOLinkData.LinksCount } else { 0 }
|
||||
LinksEnabledCount = if ($GPOLinkData) { $GPOLinkData.LinksEnabledCount } else { 0 }
|
||||
AffectedCount = $OrganizationalUnitsObjects.ObjectsTotalCount
|
||||
BlockedInheritanceCount = $OrganizationalUnitsObjects.ObjectsBlockedInheritanceCount
|
||||
AffectedClasses = $OrganizationalUnitsObjects.ObjectsClasses.GetEnumerator().Name
|
||||
Created = $GPO.Created
|
||||
Changed = $GPO.Modified
|
||||
LinksEnabled = $LinksDN
|
||||
}
|
||||
}
|
||||
}
|
||||
+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) {
|
||||
|
||||
@@ -1,4 +1,35 @@
|
||||
function Save-GPOZaurrFiles {
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Exports GPO XML data to files and saves it to a given path
|
||||
|
||||
.DESCRIPTION
|
||||
Exports GPO XML data to files and saves it to a given path
|
||||
|
||||
.PARAMETER Forest
|
||||
Target different Forest, by default current forest is used
|
||||
|
||||
.PARAMETER ExcludeDomains
|
||||
Exclude domain from search, by default whole forest is scanned
|
||||
|
||||
.PARAMETER IncludeDomains
|
||||
Include only specific domains, by default whole forest is scanned
|
||||
|
||||
.PARAMETER ExtendedForestInformation
|
||||
Ability to provide Forest Information from another command to speed up processing
|
||||
|
||||
.PARAMETER GPOPath
|
||||
Path where to save XML files from GPOReport
|
||||
|
||||
.PARAMETER DeleteExisting
|
||||
Delete existing files before saving new ones
|
||||
|
||||
.EXAMPLE
|
||||
Save-GPOZaurrFiles -GPOPath 'C:\Support\GitHub\GpoZaurr\Ignore\GPOExportEvotec' -DeleteExisting -Verbose
|
||||
|
||||
.NOTES
|
||||
General notes
|
||||
#>
|
||||
[cmdletBinding()]
|
||||
param(
|
||||
[alias('ForestName')][string] $Forest,
|
||||
|
||||
@@ -19,6 +19,40 @@
|
||||
|
||||
# GPOZaurr
|
||||
|
||||
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.
|
||||
**GPOZaurr** provides 360 degrees of information about Group Policies and their settings.
|
||||
|
||||
Just a single command (`Invoke-GPOZaurr`) provides following reports:
|
||||
|
||||
- GPOBroken
|
||||
- GPOBrokenLink
|
||||
- GPOOwners
|
||||
- GPOConsistency
|
||||
- GPODuplicates
|
||||
- GPOOrganizationalUnit
|
||||
- GPOList
|
||||
- GPOLinks
|
||||
- GPOPassword
|
||||
- GPOPermissions
|
||||
- GPOPermissionsAdministrative
|
||||
- GPOPermissionsRead
|
||||
- GPOPermissionsRoot
|
||||
- GPOPermissionsUnknown
|
||||
- GPOFiles
|
||||
- GPOBlockedInheritance
|
||||
- GPOAnalysis
|
||||
- GPOUpdates
|
||||
- NetLogonOwners
|
||||
- NetLogonPermissions
|
||||
- SysVolLegacyFiles
|
||||
|
||||
But that's not all.
|
||||
There are over 50 other commands available that make it even more powerful helping with day to day tasks to manage Group Policies.
|
||||
|
||||
To understand the usage of `Invoke-GPOZaurr` I've created blog post you may find useful
|
||||
|
||||
- [The only command you will ever need to understand and fix your Group Policies (GPO)](https://evotec.xyz/the-only-command-you-will-ever-need-to-understand-and-fix-your-group-policies-gpo/)
|
||||
|
||||
## Installing
|
||||
|
||||
GPOZaurr requires `RSAT` installed to provide results. If you don't have them you can install them as below. Keep in mind it also installs GUI tools so it shouldn't be installed on user workstations.
|
||||
@@ -45,460 +79,4 @@ Update-Module -Name GPOZaurr
|
||||
|
||||
That's it. Whenever there's a new version, you run the command, and you can enjoy it. Remember that you may need to close, reopen PowerShell session if you have already used module before updating it.
|
||||
|
||||
**The essential thing** is if something works for you on production, keep using it till you test the new version on a test computer. I do changes that may not be big, but big enough that auto-update may break your code. For example, small rename to a parameter and your code stops working! Be responsible!
|
||||
|
||||
## Resources
|
||||
|
||||
To understand the usage I've created blog post you may find useful
|
||||
|
||||
- [The only command you will ever need to understand and fix your Group Policies (GPO)](https://evotec.xyz/the-only-command-you-will-ever-need-to-understand-and-fix-your-group-policies-gpo/)
|
||||
|
||||
## Changelog
|
||||
|
||||
- 0.0.130 - 2021.08.13
|
||||
- 💡 Updated HTML to new version of `PSWriteHTML` that fixes complains about `SearchBuilder` option
|
||||
- ☑ Improved `Invoke-GPOZaurr` - type `GPOOrganizationalUnit` with exclusions
|
||||
|
||||
```powershell
|
||||
Invoke-GPOZaurr -Type GPOOrganizationalUnit -Online -FilePath $PSScriptRoot\Reports\GPOZaurrOU.html -Exclusions @(
|
||||
'*OU=Production,DC=ad,DC=evotec,DC=pl'
|
||||
'*OU=Production,DC=ad,DC=evotec,DC=pl'
|
||||
'*DC=ad,DC=evotec,DC=pl'
|
||||
)
|
||||
```
|
||||
|
||||
- ☑ Improved `Get-GPOZaurrOrganizationalUnit` with exclusions
|
||||
|
||||
```powershell
|
||||
Get-GPOZaurrOrganizationalUnit -Verbose -ExcludeOrganizationalUnit @(
|
||||
'*,OU=Production,DC=ad,DC=evotec,DC=pl'
|
||||
) | Format-Table
|
||||
```
|
||||
|
||||
- ☑ Improved `Remove-GPOZaurrLinkEmptyOU` with exclusions
|
||||
|
||||
```powershell
|
||||
$Exclude = @(
|
||||
"OU=Groups,OU=Production,DC=ad,DC=evotec,DC=pl"
|
||||
"OU=Test \, OU,OU=ITR02,DC=ad,DC=evotec,DC=xyz"
|
||||
)
|
||||
|
||||
Remove-GPOZaurrLinkEmptyOU -Verbose -LimitProcessing 3 -WhatIf -ExcludeOrganizationalUnit $Exclude
|
||||
```
|
||||
|
||||
- ☑ Improved `Invoke-GPOZaurr` - type `GPOOwners` with exclusions
|
||||
|
||||
```powershell
|
||||
Invoke-GPOZaurr -FilePath $PSScriptRoot\Reports\GPOZaurrGPOOwners.html -Type GPOOwners -Online -Exclusions @(
|
||||
'EVOTEC\przemyslaw.klys'
|
||||
)
|
||||
```
|
||||
|
||||
- ☑ Improved `Set-GPOZaurrOwner` with exclusions/approved owners
|
||||
|
||||
```powershell
|
||||
Set-GPOZaurrOwner -Type All -Verbose -LimitProcessing 2 -WhatIf -IncludeDomains 'ad.evotec.xyz' -ApprovedOwner @(
|
||||
'EVOTEC\przemyslaw.klys'
|
||||
)
|
||||
```
|
||||
|
||||
- ☑ Improved `Get-GPOZaurrOwner` with exclusions/approved owners
|
||||
|
||||
```powershell
|
||||
$T = Get-GPOZaurrOwner -Verbose -IncludeSysvol -ApprovedOwner @('EVOTEC\przemyslaw.klys')
|
||||
$T | Format-Table *
|
||||
```
|
||||
|
||||
- ☑ Improved `Get-GPOZaurr` with exclusions and support for GUID, strings
|
||||
|
||||
```powershell
|
||||
$GPOS = Get-GPOZaurr -ExcludeGroupPolicies {
|
||||
Skip-GroupPolicy -Name 'de14_usr_std'
|
||||
Skip-GroupPolicy -Name 'de14_usr_std' -DomaiName 'ad.evotec.xyz'
|
||||
Skip-GroupPolicy -Name 'All | Trusted Websites' #-DomaiName 'ad.evotec.xyz'
|
||||
'{D39BF08A-87BF-4662-BFA0-E56240EBD5A2}'
|
||||
'COMPUTERS | Enable Sets'
|
||||
}
|
||||
$GPOS | Format-Table -AutoSize *
|
||||
```
|
||||
|
||||
- ☑ Improved `Invoke-GPOZaurr` with exclusions and support for GUID, strings
|
||||
|
||||
```powershell
|
||||
Invoke-GPOZaurr -Type GPOList -Exclusions {
|
||||
Skip-GroupPolicy -Name 'All | Trusted Websites' -DomaiName 'ad.evotec.xyz'
|
||||
'{D39BF08A-87BF-4662-BFA0-E56240EBD5A2}'
|
||||
'COMPUTERS | Enable Sets'
|
||||
}
|
||||
```
|
||||
|
||||
- 0.0.129 - 2021.08.06
|
||||
- Added `Get-GPOZaurrOrganizationalUnit` and added `GPOOrganizationalUnit` in `Invoke-GPOZaurr` (preview)
|
||||
- Added `Remove-GPOZaurrLinkEmptyOU` which allows removing links from Empty OUs (preview)
|
||||
- Small update to parameter sets for `Set-GPOZaurrOwner`
|
||||
- 0.0.128 - 2021.05.26
|
||||
- ☑ Improved `Invoke-GPOZaurrContent` - type `PublicKeyPoliciesCertificates` - added more certificate information
|
||||
- ☑ Improved `Invoke-GPOZaurr` - type `GPOAnalysis` - added more certificate information
|
||||
- 0.0.128 Alpha 1 - 2021.05.17
|
||||
- 🐛 Fixes errors when normalizing properties [#17](https://github.com/EvotecIT/GPOZaurr/issues/17)
|
||||
- 0.0.127 - 2021.04.15
|
||||
- ☑ Improved `Invoke-GPOZaurr`
|
||||
- ☑ Report `GPOList` - moved description closer to statuses
|
||||
- ☑ Improved `Get-GPOZaurr` - moved description closer to statuses
|
||||
- 0.0.126 - 2021.04.12
|
||||
- ☑ Improved `Invoke-GPOZaurr`
|
||||
- ☑ Report `GPOBlockedInheritance` - hidden DistinguishedName, fixed some small typos
|
||||
- 0.0.125 - 2021.04.11
|
||||
- ☑ Improved `Invoke-GPOZaurr`
|
||||
- ☑ Report `GPOBlockedInheritance` - small fixes
|
||||
- 0.0.124 - 2021.04.11
|
||||
- ☑ Added `SearchBuilder` to all tables
|
||||
- ☑ Automatically joins arrays in tables in `Invoke-GPOZaurr`
|
||||
- ☑ Improved `Get-GPOZaurrInheritance` with Exclusions and some help information
|
||||
- ☑ Improved `Invoke-GPOZaurr` with some Exclusions
|
||||
- ☑ Improved `Invoke-GPOZaurr`
|
||||
- 🔥 Report `GPOBlockedInheritance` - heavily improved functionality and data
|
||||
- 0.0.123 - 2021.03.21
|
||||
- ☑ Fixes `Get-GPOZaurrLinkSummary`
|
||||
- 0.0.122 - 2021.02.11
|
||||
- ☑ Improved `Invoke-GPOZaurr`
|
||||
- ☑ Report `GPOAnalysis` - added `WindowsFirewallRules`,`WindowsFirewallProfiles`,`WindowsFirewallConnectionSecurityAuthentication`,`WindowsFirewallConnectionSecurityRules`
|
||||
- ☑ Improved `Invoke-GPOZaurrContent` as mentioned above for `GPOAnalysis`
|
||||
- 0.0.121 - 2021.02.10
|
||||
- ☑ Improvement to `Get-GPOZaurr` - added description [#13](https://github.com/EvotecIT/GPOZaurr/issues/13)
|
||||
- ☑ Improvement to `Invoke-GPOZaurr -Type GPOList` - added description [#13](https://github.com/EvotecIT/GPOZaurr/issues/13)
|
||||
- ☑ Improved `Invoke-GPOZaurr`
|
||||
- ☑ Report GPOAnalysis - added `FolderRedirection`
|
||||
- ☑ Report GPOAnalysis - renamed `FolderRedirection` to `FolderRedirectionPolicy`
|
||||
- ☑ Improved `Invoke-GPOZaurrContent` as mentioned above for `GPOAnalysis`
|
||||
- 0.0.120 - 2021.02.10
|
||||
- ☑ Improvement to `Get-GPOZaurr` to warn if there is potential issue with EMPTY (which can happen on non-english system)
|
||||
- ☑ In such case GPOZaurr will asses EMPTY or not using old method which doesn't detect all EMPTY cases but shouldn't provide false positives
|
||||
- 0.0.119
|
||||
- Broken release - weird
|
||||
- 0.0.118 - 2021.02.09
|
||||
- ☑ Added information where the report is saved
|
||||
- ☑ Small improvement to `Get-GPOZaurr` to exlicitly define variable types
|
||||
- 0.0.117 - 2021.02.09
|
||||
- ☑ Small fix to `Get-GPOZaurr` to exclude GPOList.xml which is used in offline mode by `Save-GPOZaurrFiles`
|
||||
- 0.0.116 - 2021.02.08
|
||||
- ☑ Improved `Remove-GPOZaurrBroken` to handle ObjectClass problem, and removed reduntant check
|
||||
- 0.0.115 - 2021.02.07
|
||||
- ☑ Improved `Invoke-GPOZaurr`
|
||||
- ☑ `GPOList` - clarified some texts, changed 7 days to 30 days as default
|
||||
- ☑ `NetLogonPermissions` - fixed missing text
|
||||
- ☑ Fixes `Get-GPOZaurrNetLogon` error on empty Owner - [#9](https://github.com/EvotecIT/GPOZaurr/issues/9)
|
||||
- 0.0.114 - 2021.01.27
|
||||
- ☑ Improved `Invoke-GPOZaurr`
|
||||
- ☑ HTML now uses offline mode by default (no CDN) - increase in size of HTML up to 3MB
|
||||
- ☑ Using Online switch forces use of CDN - smaller files. For example `Invoke-GPOZaurr -Type GPOList -Online`
|
||||
- [ ] Improved `Invoke-GPOZaurrSupport`
|
||||
- ☑ HTML now uses offline mode by default (no CDN) - increase in size of HTML up to 3MB
|
||||
- ☑ Using Online switch forces use of CDN - smaller files. For example `Invoke-GPOZaurrSupport -Online`
|
||||
- ☑ Removed parameter Offline, added parameter Online
|
||||
- ☑ The cmdlet is not really production ready. It's work in progress
|
||||
- 0.0.113 - 2021.01.25
|
||||
- ☑ Improved `Invoke-GPOZaurr`
|
||||
- ☑ Report GPOAnalysis - added WindowsTimeService
|
||||
- ☑ Improved `Invoke-GPOZaurrContent`
|
||||
- ☑ Added `WindowsTimeService` type
|
||||
- 0.0.112 - 2021.01.25
|
||||
- ☑ Improved `Invoke-GPOZaurr`
|
||||
- 0.0.111 - 2021.01.24
|
||||
- ☑ Improved `Invoke-GPOZaurr`
|
||||
- 0.0.110 - 2021.01.22
|
||||
- ☑ Improved `Invoke-GPOZaurr`
|
||||
- 0.0.109 - 2021.01.11
|
||||
- ☑ Improved `Invoke-GPOZaurr`
|
||||
- 0.0.108 - 2021.01.11
|
||||
- ☑ Improved `Invoke-GPOZaurr`
|
||||
- ☑ Improved `GPOConsistency`
|
||||
- 0.0.107 - 2021.01.11
|
||||
- ☑ Improved `Invoke-GPOZaurr`
|
||||
- 0.0.106 - 2021.01.11
|
||||
- ☑ Improved `Invoke-GPOZaurrContent`
|
||||
- 0.0.105 - 2021.01.05
|
||||
- ☑ Improved `Get-GPOZaurr`
|
||||
- ☑ Improved report `GPOBrokenLink`
|
||||
- 0.0.104 - 2021.01.04
|
||||
- ☑ Improved `Get-GPOZaurrBrokenLink`
|
||||
- ☑ Improved `Repair-GPOZaurrBrokenLink`
|
||||
- ☑ Improved `Get-GPOZaurr`
|
||||
- ☑ Improved report `GPOBrokenLink`
|
||||
- 0.0.103 - 2021.01.04
|
||||
- ☑ Improved `Get-GPOZaurr`
|
||||
- ☑ Added new report `GPOBrokenLink`
|
||||
- ☑ Added `Get-GPOZaurrBrokenLink`
|
||||
- ☑ Added `Repair-GPOZaurrBrokenLink`
|
||||
- 0.0.102 - 2021.01.02
|
||||
- ☑ Improved `Get-GPOZaurrLink`
|
||||
- ☑ Supports all links across forest
|
||||
- ☑ Renamed Linked validate set from `Other` to `OrganizationalUnit`
|
||||
- ☑ Improved `Get-GPOZaurrLinkSummary`
|
||||
- ☑ Improved/BugFix `Get-GPOZaurr` to properly detect linked GPOs in sites/cross-domain
|
||||
- ☑ Improved `Invoke-GPOZaurrPermission`
|
||||
- ☑ Renamed Linked validate set from `Other` to `OrganizationalUnit`
|
||||
- ☑ Improved `Invoke-GPOZaurr`
|
||||
- ☑ Added `GPOLinks` basic list
|
||||
- 0.0.101 - 23.12.2020
|
||||
- ☑ Improved `Get-GPOZaurrBroken`
|
||||
- ☑ It now detects `ObjectClass Issue`
|
||||
- ☑ Heavily improved performance
|
||||
- ☑ Removed some useless properties for this particular cmdlet
|
||||
- ☑ All states: `Not available on SYSVOL`, `Not available in AD`, `Exists`, `Permissions Issue`, `ObjectClass Issue`
|
||||
- ☑ Improved help
|
||||
- ☑ Improved `Remove-GPOZaurrBroken`
|
||||
- ☑ It now deals with `ObjectClass Issue`
|
||||
- ☑ Heavily improved performance
|
||||
- ☑ Removed some useless properties for this particular cmdlet
|
||||
- ☑ Now requires manual type insert AD, SYSVOL or ObjectClass (or all of them). Before it was auto using AD/SYSVOL.
|
||||
- ☑ Improved help
|
||||
- ☑ Improved `Invoke-GPOZaurr`
|
||||
- ☑ Type `GPOList`
|
||||
- ☑ Renamed `GPOOrphans` to `GPOBroken`
|
||||
- ☑ Improved `GPOBroken` with `ObjectClass issue`
|
||||
- 0.0.100 - 21.12.2020
|
||||
- ☑ Improved `Invoke-GPOZaurr`
|
||||
- ☑ Type `GPOPermissionsRead`
|
||||
- ☑ Type `GPOPermissions`
|
||||
- 0.0.99 - 13.12.2020
|
||||
- ☑ Improved `Invoke-GPOZaurr`
|
||||
- ☑ Type `GPOList` - require GPO to be 7 days old for deletion to be proposed
|
||||
- ☑ Type `GPOPermissions` - one stop for permissions
|
||||
- ☑ Allows Steps to be chosen via their menu and out-of-order
|
||||
- ☑ Improved `Remove-GPOZaurr` - added `RequireDays` parameter to prevent deletion of just modified GPOs
|
||||
- ☑ Added `Get-GPOZaurrPermissionAnalysis`
|
||||
- ☑ Added `Repair-GPOZaurrPermission`
|
||||
- 0.0.98 - 10.12.2020
|
||||
- ☑ Improved `Invoke-GPOZaurr`
|
||||
- ☑ Type `GPOList` - fixed unexpected ending of cmdlet when error occurs (for example deleted GPO while script is running) which could impact results
|
||||
- ☑ Other types - small color adjustment
|
||||
- ☑ Fixed/Improved `Get-GPOZaurr` - fixed unexpected ending of cmdlet when error occurs (for example deleted GPO while script is running), improved code base
|
||||
- ☑ Improved `Invoke-GPOZaurrSupport`
|
||||
- 0.0.97 - 07.12.2020
|
||||
- ☑ Improved `Invoke-GPOZaurr`
|
||||
- ☑ Type `GPOList` - added more data, did small reorganization
|
||||
- 0.0.96 - 07.12.2020
|
||||
- ☑ Improved `Invoke-GPOZaurr`
|
||||
- ☑ Type `GPOList` - added more data, added Optimization Step
|
||||
- ☑ Added `Set-GPOZaurrStatus`
|
||||
- ☑ Added `Optimize-GPOZaurr`
|
||||
- ☑ Fixed `Invoke-GPOZaurrPermission` which would not remove permission due to internal changes earlier on
|
||||
- ☑ Small change to `Backup-GPOZaurr`
|
||||
- ☑ Added support for `Disabled`. It's now possbile to backup `All` (default), `Empty`,`Unlinked`,`Disabled` or a mix of them
|
||||
- ☑ Removed useless `GPOPath` parameter
|
||||
- 0.0.95 - 04.12.2020
|
||||
- ☑ Fix for too big int - [#4](https://github.com/EvotecIT/GPOZaurr/issues/4) - tnx neztach
|
||||
- ☑ Improved `Invoke-GPOZaurr`
|
||||
- ☑ Type `GPOList` - added ability for Exclusions
|
||||
- ☑ All other types, small improvements
|
||||
- ☑ Added HideSteps, ShowError, ShowWarning -> Disabled Warnings/Errors by default as they tend to show too much information
|
||||
- ☑ Improved `Remove-GPOZaurr` - added Exclusions
|
||||
- 0.0.93 - 03.12.2020
|
||||
- ☑ Improved `Invoke-GPOZaurr`
|
||||
- ☑ Type `GPOList` reverted charts colors for entries to match colors
|
||||
- [ ] Added `Skip-GroupPolicy` to use within `Invoke-GPOZaurr`
|
||||
- ☑ Improved `Invoke-GPOZaurr` with basic support for Exclusions
|
||||
- ☑ Improved `Get-GPOZaurr` with basic support for Exclusions
|
||||
- ☑ Improved `Remove-GPOZaurrPermission` error handling
|
||||
- 0.0.92 - 01.12.2020
|
||||
- ☑ Improved `Invoke-GPOZaurrSupport`
|
||||
- ☑ Improved `Invoke-GPOZaurr`
|
||||
- ☑ Type `GPOList` improved with more data, more problems and clearer information
|
||||
- ☑ Improved `Remove-GPOZaurr`
|
||||
- ☑ Added ability do remove disabed GPO
|
||||
- ☑ Improved `Get-GPOZaurr` detecting more issues, delivering more data
|
||||
- 0.0.91 - 24.11.2020
|
||||
- ☑ Improves `Invoke-GPOZaurr` (WIP)
|
||||
- ☑ Improve Type `GPOPermissionsUnknown`
|
||||
- 0.0.90 - 23.11.2020
|
||||
- ☑ Improves `Invoke-GPOZaurr` (WIP)
|
||||
- ☑ Improves Type `GPODuplicates`
|
||||
- ☑ Fix for chart color to be RED
|
||||
- ☑ Add Type `GPOPermissionsUnknown`
|
||||
- ☑ Improves logic for Data with 0/1 element
|
||||
- ☑ Improves `Remove-GPOZaurrDuplicateObject` - removed `Confirm` requirement
|
||||
- ☑ Improves `Get-GPOZaurrNetLogon` with more verbose
|
||||
- ☑ Improves `Repair-GPOZaurrNetLogonOwner` with more verbose and fix for `LimitProcessing`
|
||||
- 0.0.89 - 22.11.2020
|
||||
- ☑ Small update `Add-GPOZaurrPermission`
|
||||
- ☑ Improves `Invoke-GPOZaurr` (WIP)
|
||||
- ☑ Added Type `GPOPermissionsAdministrative`
|
||||
- 0.0.88 - 18.11.2020
|
||||
- ☑ Fix for `Add-GPOZaurrPermission`
|
||||
- 0.0.87 - 18.11.2020
|
||||
- ☑ Improve error handling `Remove-GPOZaurrBroken`
|
||||
- 0.0.86 - 18.11.2020
|
||||
- ☑ Improve error handling `Remove-GPOZaurrBroken`
|
||||
- 0.0.85 - 17.11.2020
|
||||
- ☑ Improves `Invoke-GPOZaurr` (WIP)
|
||||
- ☑ Split `NetLogonPermissions` into `NetLogonPermissions` and `NetLogonOwners`
|
||||
- ☑ Improved type `NetLogonPermissions`
|
||||
- ☑ Improved type `NetLogonOwners`
|
||||
- ☑ Improves `Get-GPOZaurrFiles`
|
||||
- ☑ Improves `Get-GPOZaurrNetLogon`
|
||||
- ☑ Fix for `Get-GPOZaurrNetLogon`
|
||||
- 0.0.84 - 16.11.2020
|
||||
- ☑ Improves `Invoke-GPOZaurr` (WIP)
|
||||
- ☑ Type `NetLogonPermissions`
|
||||
- ☑ Fix for `Get-GPOZaurrNetLogon`
|
||||
- 0.0.83 - 14.11.2020
|
||||
- ☑ Improves `Invoke-GPOZaurr` (WIP)
|
||||
- ☑ Fix for wrong ActionRequired count
|
||||
- 0.0.82 - 14.11.2020
|
||||
- ☑ Added `Get-GPOZaurrPermissionIssue` to detect permission issue with no rights
|
||||
- ☑ Improves `Invoke-GPOZaurr` (WIP)
|
||||
- ☑ Type `GPOPermissionsRead` improved detection of problems with low permissions
|
||||
- 0.0.81 - 12.11.2020
|
||||
- ☑ Fix for `Set-GPOZaurrOwner` in case of missing permissions to not throw errors
|
||||
- ☑ Improves `Invoke-GPOZaurr` (WIP)
|
||||
- ☑ Type `GPOPermissionsRead` added
|
||||
- 0.0.80 - 12.11.2020
|
||||
- ☑ Improves `Invoke-GPOZaurr` (WIP)
|
||||
- ☑ Type `GPOOrphans` clearer options, updated texts, split per domain
|
||||
- ☑ Type `GPOOwners` clearer options, updated texts, split per domain
|
||||
- ☑ Improves `Add-GPOZaurrPermission`
|
||||
- ☑ Fixes LimitProcessing to work correctly
|
||||
- ☑ Added `All` to process all GPOs
|
||||
- ☑ Fixes `Remove-GPOZaurrPermission`
|
||||
- ☑ Improves `Set-GPOZaurrOwner`
|
||||
- ☑ Added `Force` to force `GPO Owner` to any principal (normally only Domain Admins)
|
||||
- 0.0.79 - 10.11.2020
|
||||
- Improved `Invoke-GPOZaurr` - type `GPOOrphans`
|
||||
- 0.0.78 - 10.11.2020
|
||||
- Improved `Remove-GPOZaurrBroken` more verbose
|
||||
- Improved `Get-GPOZaurrBroken` more verbose
|
||||
- Improved `Invoke-GPOZaurr` - type `GPOOrphans`
|
||||
- Improved `Invoke-GPOZaurr` - type `GPOList` - needs more work
|
||||
- Improved `Get-GPOZaurr` with better detection of Empty Policies (needs testing)
|
||||
- 0.0.77 - 9.11.2020
|
||||
- Improved `Invoke-GPOZaurr` (WIP)
|
||||
- 0.0.76 - 8.11.2020
|
||||
- Improved `Get-GPOZaurrNetLogon` to better handle errors
|
||||
- 0.0.75 - 8.11.2020
|
||||
- Improved `Get-GPOZaurrPermissionConsistency` to stop checking consistency if path doesn't exists
|
||||
- 0.0.74 - 8.11.2020
|
||||
- Improved `Invoke-GPOZaurr` (WIP)
|
||||
- 0.0.73 - 7.11.2020
|
||||
- Improved `Invoke-GPOZaurr` (WIP)
|
||||
- Improved `Get-GPOZaurr`
|
||||
- 0.0.72 - 6.11.2020
|
||||
- Improved `Invoke-GPOZaurr` (WIP)
|
||||
- 0.0.71 - 3.11.2020
|
||||
- Improved `Invoke-GPOZaurr` (WIP)
|
||||
- 0.0.70 - 29.10.2020
|
||||
- Added `Get-GPOZaurrDuplicateObject`
|
||||
- Added `Remove-GPOZaurrDuplicateObject`
|
||||
- 0.0.69 - 29.10.2020
|
||||
- Improved `Invoke-GPOZaurr` (WIP)
|
||||
- Improved `Get-GPOZaurrNetLogon`
|
||||
- Improved `Get-GPOZaurrOwner`
|
||||
- Improved `Set-GPOZaurrOwner`
|
||||
- Added `Repair-GPOZaurrNetLogonOwner`
|
||||
- Improved `Invoke-GPOZaurr` (WIP)
|
||||
- 0.0.68 - 28.10.2020
|
||||
- Renamed `Show-GPOZaurr` to `Invoke-GPOZaurr`
|
||||
- Renamed `Invoke-GPOZaurr` to `Invoke-GPOZaurrContent`
|
||||
- Improvements to `Get-GPOZaurrPermissionConsistency` - don't check for inherited permissions if top level ones are inconsistent
|
||||
- Improved `Invoke-GPOZaurr` (WIP)
|
||||
- 0.0.67 - 22.10.2020
|
||||
- Improved `Show-GPOZaurr` (WIP)
|
||||
- 0.0.66 - 22.10.2020
|
||||
- Improved `Show-GPOZaurr` (WIP)
|
||||
- 0.0.65 - 22.10.2020
|
||||
- Improved `Show-GPOZaurr` (WIP)
|
||||
- 0.0.64 - 21.10.2020
|
||||
- Renamed `Remove-GPOZaurrOrphaned` to `Remove-GPOZaurrBroken` keeping it as an alias
|
||||
- Renamed `Get-GPOZaurrSysvol` to `Get-GPOZaurrBroken` keeping it as an alias
|
||||
- Improved `Show-GPOZaurr` (WIP)
|
||||
- 0.0.63 - 19.10.2020
|
||||
- Renamed `Invoke-GPOZaurrContent` back to `Invoke-GPOZaurr`
|
||||
- Added `Show-GPOZaurr` (WIP)
|
||||
- Added `OutputType`,`OutputType`,`Open`,`Online` parameters to `Invoke-GPOZaurr`
|
||||
- Added `Get-GPOZaurrNetLogon`
|
||||
- Improved `Get-GPOZaurrOwner`
|
||||
- Fixes `Get-GPOZaurrSysvol`
|
||||
- 0.0.62 - 14.10.2020
|
||||
- Renamed `Invoke-GPOZaurr` to `Invoke-GPOZaurrContent` - I want to use `Invoke-GPOZaurr` for something else
|
||||
- Improvements to `Get-GPOZaurrPermissionConsistency` for GPOs without SYSVOL to be reported properly
|
||||
- Added `Get-GPOZaurrPermissionRoot`
|
||||
- Renamed `Remove-GPOZaurrOrphanedSysvolFolders` to `Remove-GPOZaurrOrphaned`
|
||||
- Improved `Remove-GPOZaurrOrphaned` to deal with orphaned folders but also orphaned AD GPO (No sysvol data)
|
||||
- Improved `Get-GPOZaurrSysVol` to detect orphaned SYSVOL or AD GPO objects
|
||||
- Improved `Get-GPOZaurrSysVol` to detect permissions issue when reading AD GPO objects
|
||||
- Added `Get-GPOZaurrPermissionRoot` to show which users/groups have control over all GPOs (allowed to create/modify)
|
||||
- Improved `Get-GPOZaurrPermissionSummary` to include `Get-GPOZaurrPermissionRoot` custom permissions
|
||||
- Updated `Remove-GPOZaurrPermission`
|
||||
- Updated `Get-GpoZaurrPermission`
|
||||
- Updated `Get-GPOZaurrFiles` to better handle access issue
|
||||
- Reversed parameters `Get-GPOZaurrFiles` from `Limited` to `ExtendedMetaData` and fixed missing columns
|
||||
- 0.0.61 - 31.08.2020
|
||||
- Improvement to `Get-GPOZaurrPermissionSummary`
|
||||
- Fixes to `ConvertFrom-CSExtension`
|
||||
- Fixes to `Find-CSExtension`
|
||||
- 0.0.59 - 26.08.2020
|
||||
- Improvement to `Get-GPOZaurrPermissionSummary`
|
||||
- 0.0.58 - 26.08.2020
|
||||
- Improvement to `Get-GPOZaurrPermissionSummary`
|
||||
- 0.0.57 - 26.08.2020
|
||||
- Improvement to `Get-GPOZaurrPermissionSummary`
|
||||
- 0.0.56 - 26.08.2020
|
||||
- Added `Get-GPOZaurrPermissionSummary`
|
||||
- 0.0.55 - 17.08.2020
|
||||
- Improved `Get-GPOZaurrInheritance`
|
||||
- 0.0.54 - 16.08.2020
|
||||
- Added `Invoke-GPOZaurrSupport` (WIP)
|
||||
- Added `ConvertFrom-CSExtension`
|
||||
- Added `Find-CSExtension`
|
||||
- Added `Get-GPOZaurrInheritance`
|
||||
- 0.0.53 - 16.08.2020
|
||||
- Bad release
|
||||
- 0.0.52 - 16.08.2020
|
||||
- Bad release
|
||||
- 0.0.51 - 2.08.2020
|
||||
- Updates to `Invoke-GPOZaurr` - still work in progress
|
||||
- Added `Get-GPOZaurrSysvolDFSR`
|
||||
- Added `Clear-GPOZaurrSysvolDFSR` (requires testing)
|
||||
- 0.0.50 - 29.07.2020
|
||||
- Updates to couple of commands
|
||||
- 0.0.49 - 23.07.2020
|
||||
- Hidden files were skipped - and people do crazy things with them
|
||||
- 0.0.48 - 21.07.2020
|
||||
- Added `Get-GPOZaurrFilesPolicyDefinition`
|
||||
- Updates to `Invoke-GPOZaurr` - still work in progress
|
||||
- Updates to `Get-GPOZaurrFiles` - still work in progress
|
||||
- Updates to `Remove-GPOZaurrOrphanedSysvolFolders` with backup and support for domains
|
||||
- Module will now be signed
|
||||
- 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`
|
||||
- Added `Invoke-GPOZaurr` (alias: `Find-GPO`) (heavy work in progress)
|
||||
- 0.0.45 - 26.06.2020
|
||||
- During publishing ADEssentials required functions are now merged to prevent cyclic dependency bug [Using ModuleSpec syntax in RequiredModules causes incorrect "cyclic dependency" failures](https://github.com/PowerShell/PowerShell/issues/2607)
|
||||
- 0.0.44 - 24.06.2020
|
||||
- Improvement to `Get-GPOZaurrLinkSummary`
|
||||
- 0.0.43 - 21.06.2020
|
||||
- Added `Get-GPOZaurrFiles` to list files on NETLOGON/SYSVOL shares with a lot of details
|
||||
- 0.0.42 - 19.06.2020
|
||||
- Fix for `Get-GPOZaurrLink` and `SearchBase` parameter
|
||||
- Fix for `Get-GPOZaurrLink` - canonical link Trim() throwing errors if empty
|
||||
- 0.0.41 - 18.06.2020
|
||||
- Added paramerter `SkipDuplicates` to `Invoke-GPOZaurrPermission` which prevents applying permissions over and over again if 1 GPO is linked to a multiple OU's within another OU
|
||||
- 0.0.40 - 18.06.2020
|
||||
- Fix for error `Get-GPOZaurrLink` - same issue as described on my [earlier blog - Get-ADObject : The server has returned the following error: invalid enumeration context.](https://evotec.xyz/get-adobject-the-server-has-returned-the-following-error-invalid-enumeration-context/).
|
||||
- `WARNING: Get-GPOZaurrLink - Processing error The server has returned the following error: invalid enumeration context.`
|
||||
- `WARNING: Get-GPOZaurrLink - Processing error A referral was returned from the server`
|
||||
- Added `SkipDuplicates` for `Get-GPOZaurrLink`
|
||||
- 0.0.39 - 17.06.2020
|
||||
- Updates to `Invoke-GPOZaurrPermission` with new parameter `LimitAdministrativeGroupsToDomain`
|
||||
- This will get administrative based on IncludeDomains if given. It means that if GPO has Domain admins added from multiple domains it will only find one, and remove all other Domain Admins (if working with Domain Admins that is)
|
||||
- 0.0.38 - 17.06.2020
|
||||
- Update to Get-PrivGPOZaurrLink which would cause problems to `Invoke-GPOZaurrPermission` if it would be run without Administrative permission and GPO wouldn't be accessible for that user
|
||||
- 0.0.37 - 16.06.2020
|
||||
- Updates to `Invoke-GPOZaurrPermission` with new parameterset `Level`
|
||||
- Updates to `Get-GPOZaurrLinkSummary`
|
||||
- 0.0.36 - 15.06.2020
|
||||
- Initial release
|
||||
**The essential thing** is if something works for you on production, keep using it till you test the new version on a test computer. I do changes that may not be big, but big enough that auto-update may break your code. For example, small rename to a parameter and your code stops working! Be responsible!
|
||||
Reference in New Issue
Block a user