Skip to content

Commit e82640f

Browse files
authored
Merge pull request #198 from AsBuiltReport/dev
v0.9.3 public release
2 parents 055e8e2 + b89c3e7 commit e82640f

15 files changed

+416
-147
lines changed

AsBuiltReport.Microsoft.AD.psd1

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
RootModule = 'AsBuiltReport.Microsoft.AD.psm1'
1313

1414
# Version number of this module.
15-
ModuleVersion = '0.9.2'
15+
ModuleVersion = '0.9.3'
1616

1717
# Supported PSEditions
1818
# CompatiblePSEditions = @()
@@ -27,7 +27,7 @@
2727
# CompanyName = 'Unknown'
2828

2929
# Copyright statement for this module
30-
Copyright = '(c) 2024 Jonathan Colon. All rights reserved.'
30+
Copyright = '(c) 2025 Jonathan Colon. All rights reserved.'
3131

3232
# Description of the functionality provided by this module
3333
Description = 'A PowerShell module to generate an as built report on the configuration of Microsoft AD.'
@@ -54,7 +54,7 @@
5454
RequiredModules = @(
5555
@{
5656
ModuleName = 'AsBuiltReport.Core';
57-
ModuleVersion = '1.4.1'
57+
ModuleVersion = '1.4.2'
5858
},
5959
@{
6060
ModuleName = 'PSPKI';
@@ -66,11 +66,11 @@
6666
},
6767
@{
6868
ModuleName = 'Diagrammer.Microsoft.AD';
69-
ModuleVersion = '0.2.7'
69+
ModuleVersion = '0.2.8'
7070
},
7171
@{
7272
ModuleName = 'Diagrammer.Core';
73-
ModuleVersion = '0.2.13'
73+
ModuleVersion = '0.2.15'
7474
}
7575

7676
)

CHANGELOG.md

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,29 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
##### This project is community maintained and has no sponsorship from Microsoft, its employees or any of its affiliates.
99

10+
## [0.9.3] - 2025-02-21
11+
12+
### Added
13+
14+
- Add Site Inventory diagram to the Replication section
15+
- Add Certificate Authority diagram
16+
17+
18+
### Changed
19+
20+
- Move Circular Group Membership section to $InfoLevel.Domain level 4
21+
- Increase AsBuiltReport.Core to v1.4.2
22+
- Increase Diagrammer.Core minimum requirement
23+
- Increase Diagrammer.Microsoft.AD minumum requirement
24+
25+
### Fixed
26+
27+
- Fix error message during DC discovery and WinRM connection
28+
- Fix Get-WinADLastBackup cmdlet not returning AD partitions when the report generation machine is not part of the same domain or forest as the target domain controller
29+
- Fix Certificate Authority section displaying content when no data is available
30+
- Fix DHCP Infrastructure section not identifying if the server is a Domain Controller
31+
- Fix Enterprise Root Certificate Authority section not displaying table descriptions
32+
1033
## [0.9.2] - 2025-01-14
1134

1235
### Added

Src/Private/Get-AbrADCARoot.ps1

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ function Get-AbrADCARoot {
55
.DESCRIPTION
66
77
.NOTES
8-
Version: 0.9.1
8+
Version: 0.9.3
99
Author: Jonathan Colon
1010
Twitter: @jcolonfzenpr
1111
Github: rebelinux
@@ -42,23 +42,23 @@ function Get-AbrADCARoot {
4242
}
4343
'Status' = $CA.ServiceStatus
4444
}
45-
$OutObj += [pscustomobject](ConvertTo-HashToYN $inObj)
46-
}
45+
$OutObj = [pscustomobject](ConvertTo-HashToYN $inObj)
4746

48-
if ($HealthCheck.CA.Status) {
49-
$OutObj | Where-Object { $_.'Service Status' -notlike 'Running' } | Set-Style -Style Critical -Property 'Service Status'
50-
$OutObj | Where-Object { $_.'Auditing' -notlike 'Running' } | Set-Style -Style Critical -Property 'Auditing'
51-
}
47+
if ($HealthCheck.CA.Status) {
48+
$OutObj | Where-Object { $_.'Service Status' -notlike 'Running' } | Set-Style -Style Critical -Property 'Service Status'
49+
$OutObj | Where-Object { $_.'Auditing' -notlike 'Running' } | Set-Style -Style Critical -Property 'Auditing'
50+
}
5251

53-
$TableParams = @{
54-
Name = "Enterprise Root CA - $($ForestInfo.ToString().ToUpper())"
55-
List = $true
56-
ColumnWidths = 40, 60
57-
}
58-
if ($Report.ShowTableCaptions) {
59-
$TableParams['Caption'] = "- $($TableParams.Name)"
52+
$TableParams = @{
53+
Name = "Enterprise Root CA - $($ForestInfo.ToString().ToUpper())"
54+
List = $true
55+
ColumnWidths = 40, 60
56+
}
57+
if ($Report.ShowTableCaptions) {
58+
$TableParams['Caption'] = "- $($TableParams.Name)"
59+
}
60+
$OutObj | Table @TableParams
6061
}
61-
$OutObj | Table @TableParams
6262
}
6363
}
6464
} catch {

Src/Private/Get-AbrADDCDiag.ps1

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ function Get-AbrADDCDiag {
55
.DESCRIPTION
66
77
.NOTES
8-
Version: 0.9.1
8+
Version: 0.9.3
99
Author: Jonathan Colon
1010
Twitter: @jcolonfzenpr
1111
Github: rebelinux
@@ -39,9 +39,9 @@ function Get-AbrADDCDiag {
3939
$Description = @{
4040
"Advertising" = "Validates this Domain Controller can be correctly located through the KDC service. It does not validate the Kerberos tickets answer or the communication through the TCP and UDP port 88.", 'High'
4141
"Connectivity" = "Initial connection validation, checks if the DC can be located in the DNS, validates the ICMP ping (1 hop), checks LDAP binding and also the RPC connection. This initial test requires ICMP, LDAP, DNS and RPC connectivity to work properly.", 'Medium'
42-
'VerifyReferences' = 'Validates that several attributes are present for the domain in the countainer and subcontainers in the DC objetcs. This test will fail if any attribute is missing.', 'High'
43-
'FrsEvent' = 'Checks if theres any errors in the event logs regarding FRS replication. If running Windows Server 2008 R2 or newer on all Domain Controllers is possible SYSVOL were already migrated to DFSR, in this case errors found here can be ignored.', 'Medium'
44-
'DFSREvent' = 'Checks if theres any errors in the event logs regarding DFSR replication. If running Windows Server 2008 or older on all Domain Controllers is possible SYSVOL is still using FRS, and in this case errors found here can be ignored. Obs. is highly recommended to migrate SYSVOL to DFSR.', 'Medium'
42+
'VerifyReferences' = 'Validates that several attributes are present for the domain in the container and subcontainers in the DC objects. This test will fail if any attribute is missing.', 'High'
43+
'FrsEvent' = 'Checks if there any errors in the event logs regarding FRS replication. If running Windows Server 2008 R2 or newer on all Domain Controllers is possible SYSVOL were already migrated to DFSR, in this case errors found here can be ignored.', 'Medium'
44+
'DFSREvent' = 'Checks if there any errors in the event logs regarding DFSR replication. If running Windows Server 2008 or older on all Domain Controllers is possible SYSVOL is still using FRS, and in this case errors found here can be ignored. Obs. is highly recommended to migrate SYSVOL to DFSR.', 'Medium'
4545
'SysVolCheck' = 'Validates if the registry key HKEY_Local_Machine\System\CurrentControlSet\Services\Netlogon\Parameters\SysvolReady=1 exist. This registry has to exist with value 1 for the DCs SYSVOL to be advertised.', 'High'
4646
'KccEvent' = 'Validates through KCC there were no errors in the Event Viewer > Applications and Services Logs > Directory Services event log in the past 15 minutes (default time).', 'High'
4747
'KnowsOfRoleHolders' = 'Checks if this Domain Controller is aware of which DC (or DCs) hold the FSMOs.', 'High'
@@ -52,7 +52,7 @@ function Get-AbrADDCDiag {
5252
'Replications' = 'Makes a deep validation to check the main replication for all naming contexts in this Domain Controller.', 'High'
5353
'RidManager' = 'Validates this Domain Controller can locate and contact the RID Master FSMO role holder. This test is skipped in RODCs.', 'High'
5454
'Services' = 'Validates if the core Active Directory services are running in this Domain Controller. The services verified are: RPCSS, EVENTSYSTEM, DNSCACHE, ISMSERV, KDC, SAMSS, WORKSTATION, W32TIME, NETLOGON, NTDS (in case Windows Server 2008 or newer) and DFSR (if SYSVOL is using DFSR).', 'High'
55-
'SystemLog' = 'Checks if there is any erros in the Event Viewer > System event log in the past 60 minutes. Since the System event log records data from many places, errors reported here may lead to false positive and must be investigated further. The impact of this validation is marked as Low.', 'Low'
55+
'SystemLog' = 'Checks if there is any errors in the Event Viewer > System event log in the past 60 minutes. Since the System event log records data from many places, errors reported here may lead to false positive and must be investigated further. The impact of this validation is marked as Low.', 'Low'
5656
'Topology' = 'Topology Checks that the KCC has generated a fully connected topology for all domain controllers.', 'Medium'
5757
'VerifyReplicas' = 'Checks that all application directory partitions are fully instantiated on all replica servers.', 'High'
5858
'CutoffServers' = 'Checks for any server that is not receiving replications because its partners are not running', 'Medium'

Src/Private/Get-AbrADDFSHealth.ps1

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ function Get-AbrADDFSHealth {
55
.DESCRIPTION
66
77
.NOTES
8-
Version: 0.9.2
8+
Version: 0.9.3
99
Author: Jonathan Colon
1010
Twitter: @jcolonfzenpr
1111
Github: rebelinux
@@ -139,7 +139,7 @@ function Get-AbrADDFSHealth {
139139
}
140140

141141
if ($HealthCheck.Domain.DFS) {
142-
$OutObj | Where-Object { $_.'Extension' -notin ('.bat', '.exe', '.nix', '.vbs', '.pol', '.reg', '.xml', '.admx', '.adml', '.inf', '.ini', '.adm', '.kix', '.msi', '.ps1', '.cmd', '.ico') } | Set-Style -Style Warning -Property 'Extension'
142+
$OutObj | Where-Object { $_.'Extension' -notin ('.bat', '.exe', '.nix', '.vbs', '.pol', '.reg', '.xml', '.admx', '.adml', '.inf', '.ini', '.adm', '.kix', '.msi', '.ps1', '.cmd', '.ico', '.cmtx') } | Set-Style -Style Warning -Property 'Extension'
143143
}
144144

145145
$TableParams = @{
@@ -206,7 +206,7 @@ function Get-AbrADDFSHealth {
206206
}
207207

208208
if ($HealthCheck.Domain.DFS) {
209-
$OutObj | Where-Object { $_.'Extension' -notin ('.bat', '.exe', '.nix', '.vbs', '.pol', '.reg', '.xml', '.admx', '.adml', '.inf', '.ini', '.adm', '.kix', '.msi', '.ps1', '.cmd', '.ico') } | Set-Style -Style Warning -Property 'Extension'
209+
$OutObj | Where-Object { $_.'Extension' -notin ('.bat', '.exe', '.nix', '.vbs', '.pol', '.reg', '.xml', '.admx', '.adml', '.inf', '.ini', '.adm', '.kix', '.msi', '.ps1', '.cmd', '.ico', '.cmtx') } | Set-Style -Style Warning -Property 'Extension'
210210
}
211211

212212
$TableParams = @{

Src/Private/Get-AbrADDomainController.ps1

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ function Get-AbrADDomainController {
55
.DESCRIPTION
66
77
.NOTES
8-
Version: 0.9.2
8+
Version: 0.9.3
99
Author: Jonathan Colon
1010
Twitter: @jcolonfzenpr
1111
Github: rebelinux
@@ -261,7 +261,7 @@ function Get-AbrADDomainController {
261261
BlankLine
262262
Paragraph {
263263
Text "Best Practice:" -Bold
264-
Text "Disable SMB v1: SMB v1 is an outdated protocol that is vulnerable to several security issues. It is recommended to disable SMBv1 on all systems to enhance security and reduce the risk of exploitation. SMB v1 has been deprecated and replaced by SMB v2 and SMB v3, which offer improved performance and security features."
264+
Text "Disable SMBv1: SMBv1 is an outdated protocol that is vulnerable to several security issues. It is recommended to disable SMBv1 on all systems to enhance security and reduce the risk of exploitation. SMB v1 has been deprecated and replaced by SMB v2 and SMB v3, which offer improved performance and security features."
265265
}
266266
}
267267
}

Src/Private/Get-AbrADDomainObject.ps1

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ function Get-AbrADDomainObject {
55
.DESCRIPTION
66
77
.NOTES
8-
Version: 0.9.2
8+
Version: 0.9.3
99
Author: Jonathan Colon
1010
Twitter: @jcolonfzenpr
1111
Github: rebelinux
@@ -606,7 +606,7 @@ function Get-AbrADDomainObject {
606606
Write-PScriboMessage -IsWarning "$($_.Exception.Message) (Empty Groups Objects Section)"
607607
}
608608
}
609-
if ($HealthCheck.Domain.BestPractice) {
609+
if ($HealthCheck.Domain.BestPractice -and $InfoLevel.Domain -ge 4) {
610610
try {
611611
$OutObj = @()
612612
# Loop through each parent group
@@ -937,9 +937,9 @@ function Get-AbrADDomainObject {
937937
'Lockout Duration' = $PasswordPolicy.LockoutDuration.toString("mm' minutes'")
938938
'Lockout Threshold' = $PasswordPolicy.LockoutThreshold
939939
'Lockout Observation Window' = $PasswordPolicy.LockoutObservationWindow.toString("mm' minutes'")
940-
'Maximun Password Age' = $PasswordPolicy.MaxPasswordAge.toString("dd' days'")
941-
'Minimun Password Age' = $PasswordPolicy.MinPasswordAge.toString("dd' days'")
942-
'Minimun Password Length' = $PasswordPolicy.MinPasswordLength
940+
'Maximum Password Age' = $PasswordPolicy.MaxPasswordAge.toString("dd' days'")
941+
'Minimum Password Age' = $PasswordPolicy.MinPasswordAge.toString("dd' days'")
942+
'Minimum Password Length' = $PasswordPolicy.MinPasswordLength
943943
'Enforce Password History' = $PasswordPolicy.PasswordHistoryCount
944944
'Store Password using Reversible Encryption' = $PasswordPolicy.ReversibleEncryptionEnabled
945945
}

0 commit comments

Comments
 (0)