fix: output for 6.1.2/3 and 7.3.4
This commit is contained in:
@@ -95,6 +95,14 @@ function Test-MailboxAuditingE3 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
end {
|
end {
|
||||||
|
#$verbosePreference = 'Continue'
|
||||||
|
$detailsLength = $details.Length
|
||||||
|
Write-Verbose "Character count of the details: $detailsLength"
|
||||||
|
|
||||||
|
if ($detailsLength -gt 32767) {
|
||||||
|
Write-Verbose "Warning: The character count exceeds the limit for Excel cells."
|
||||||
|
}
|
||||||
|
#$verbosePreference = 'SilentlyContinue'
|
||||||
return $auditResult
|
return $auditResult
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -23,6 +23,7 @@ function Test-MailboxAuditingE5 {
|
|||||||
try {
|
try {
|
||||||
foreach ($user in $allUsers) {
|
foreach ($user in $allUsers) {
|
||||||
if ($processedUsers.ContainsKey($user.UserPrincipalName)) {
|
if ($processedUsers.ContainsKey($user.UserPrincipalName)) {
|
||||||
|
Write-Verbose "Skipping already processed user: $($user.UserPrincipalName)"
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -45,32 +46,27 @@ function Test-MailboxAuditingE5 {
|
|||||||
foreach ($action in $OwnerActions) {
|
foreach ($action in $OwnerActions) {
|
||||||
if ($mailbox.AuditOwner -notcontains $action) { $missingActions += "Owner action '$action' missing" }
|
if ($mailbox.AuditOwner -notcontains $action) { $missingActions += "Owner action '$action' missing" }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($missingActions.Count -gt 0) {
|
||||||
|
$formattedActions = Format-MissingActions -missingActions $missingActions
|
||||||
|
$allFailures += "$userUPN|True|$($formattedActions.Admin)|$($formattedActions.Delegate)|$($formattedActions.Owner)"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$allFailures += "$userUPN|False|||"
|
$allFailures += "$userUPN|False|||"
|
||||||
continue
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($missingActions) {
|
# Mark the user as processed
|
||||||
$formattedActions = Format-MissingActions -missingActions $missingActions
|
|
||||||
$allFailures += "$userUPN|True|$($formattedActions.Admin)|$($formattedActions.Delegate)|$($formattedActions.Owner)"
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
Write-Verbose "User $($user.UserPrincipalName) passed the mailbox audit checks."
|
|
||||||
}
|
|
||||||
$processedUsers[$user.UserPrincipalName] = $true
|
$processedUsers[$user.UserPrincipalName] = $true
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
# Adding verbose output to indicate the user does not have an E5 license
|
|
||||||
Write-Verbose "User $($user.UserPrincipalName) does not have an Office E5 license."
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Prepare failure reasons and details based on compliance
|
# Prepare failure reasons and details based on compliance
|
||||||
$failureReasons = if ($allFailures.Count -eq 0) { "N/A" } else { "Audit issues detected." }
|
$failureReasons = if ($allFailures.Count -eq 0) { "N/A" } else { "Audit issues detected." }
|
||||||
$details = if ($allFailures.Count -eq 0) {
|
$details = if ($allFailures.Count -eq 0) {
|
||||||
"All Office E5 users have correct mailbox audit settings."
|
"All Office E5 users have correct mailbox audit settings."
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
"UserPrincipalName|AuditEnabled|AdminActionsMissing|DelegateActionsMissing|OwnerActionsMissing`n" + ($allFailures -join "`n")
|
"UserPrincipalName|AuditEnabled|AdminActionsMissing|DelegateActionsMissing|OwnerActionsMissing`n" + ($allFailures -join "`n")
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -99,6 +95,14 @@ function Test-MailboxAuditingE5 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
end {
|
end {
|
||||||
|
#$verbosePreference = 'Continue'
|
||||||
|
$detailsLength = $details.Length
|
||||||
|
Write-Verbose "Character count of the details: $detailsLength"
|
||||||
|
|
||||||
|
if ($detailsLength -gt 32767) {
|
||||||
|
Write-Verbose "Warning: The character count exceeds the limit for Excel cells."
|
||||||
|
}
|
||||||
|
#$verbosePreference = 'SilentlyContinue'
|
||||||
return $auditResult
|
return $auditResult
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -28,20 +28,27 @@ function Test-RestrictCustomScripts {
|
|||||||
|
|
||||||
# Find sites where custom scripts are allowed
|
# Find sites where custom scripts are allowed
|
||||||
$customScriptAllowedSites = $processedUrls | Where-Object { $_.DenyAddAndCustomizePages -ne 'Enabled' }
|
$customScriptAllowedSites = $processedUrls | Where-Object { $_.DenyAddAndCustomizePages -ne 'Enabled' }
|
||||||
|
$verbosePreference = 'Continue'
|
||||||
|
# Check the total length of URLs
|
||||||
|
$totalUrlLength = ($customScriptAllowedSites.Url -join '').Length
|
||||||
|
Write-Verbose "Total length of URLs: $totalUrlLength"
|
||||||
|
|
||||||
# Extract hostnames from allowed sites
|
# Extract hostnames from allowed sites if the total length exceeds the limit
|
||||||
Write-Verbose "Extracting hostnames from URLs..."
|
$mostUsedHostname = $null
|
||||||
$hostnames = $customScriptAllowedSites.Url | ForEach-Object {
|
if ($totalUrlLength -gt 20000) {
|
||||||
if ($_ -match '^https://([^\.]+)\.') {
|
Write-Verbose "Extracting hostnames from URLs..."
|
||||||
$matches[1]
|
$hostnames = $customScriptAllowedSites.Url | ForEach-Object {
|
||||||
|
if ($_ -match '^https://([^\.]+)\.') {
|
||||||
|
$matches[1]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Write-Verbose "Extracted hostnames: $($hostnames -join ', ')"
|
||||||
|
|
||||||
|
# Find the most used hostname using the Get-MostCommonWord function
|
||||||
|
$mostUsedHostname = Get-MostCommonWord -InputStrings $hostnames
|
||||||
|
Write-Verbose "Most used hostname: $mostUsedHostname"
|
||||||
}
|
}
|
||||||
Write-Verbose "Extracted hostnames: $($hostnames -join ', ')"
|
$verbosePreference = 'SilentlyContinue'
|
||||||
|
|
||||||
# Find the most used hostname using the Get-MostCommonWord function
|
|
||||||
$mostUsedHostname = Get-MostCommonWord -InputStrings $hostnames
|
|
||||||
Write-Verbose "Most used hostname: $mostUsedHostname"
|
|
||||||
|
|
||||||
# Compliance is true if no sites allow custom scripts
|
# Compliance is true if no sites allow custom scripts
|
||||||
$complianceResult = $customScriptAllowedSites.Count -eq 0
|
$complianceResult = $customScriptAllowedSites.Count -eq 0
|
||||||
|
|
||||||
|
27
tests/Unit/Private/Get-MostCommonWord.tests.ps1
Normal file
27
tests/Unit/Private/Get-MostCommonWord.tests.ps1
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
$ProjectPath = "$PSScriptRoot\..\..\.." | Convert-Path
|
||||||
|
$ProjectName = ((Get-ChildItem -Path $ProjectPath\*\*.psd1).Where{
|
||||||
|
($_.Directory.Name -match 'source|src' -or $_.Directory.Name -eq $_.BaseName) -and
|
||||||
|
$(try { Test-ModuleManifest $_.FullName -ErrorAction Stop } catch { $false } )
|
||||||
|
}).BaseName
|
||||||
|
|
||||||
|
|
||||||
|
Import-Module $ProjectName
|
||||||
|
|
||||||
|
InModuleScope $ProjectName {
|
||||||
|
Describe Get-PrivateFunction {
|
||||||
|
Context 'Default' {
|
||||||
|
BeforeEach {
|
||||||
|
$return = Get-PrivateFunction -PrivateData 'string'
|
||||||
|
}
|
||||||
|
|
||||||
|
It 'Returns a single object' {
|
||||||
|
($return | Measure-Object).Count | Should -Be 1
|
||||||
|
}
|
||||||
|
|
||||||
|
It 'Returns a string based on the parameter PrivateData' {
|
||||||
|
$return | Should -Be 'string'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Reference in New Issue
Block a user