Scripts/Get-Rules.ps1
# This contains functions to display or collect the inbox and transport rules. $date = Get-Date -Format "yyyyMMddHHmm" function Show-TransportRules { <# .SYNOPSIS Shows the transport rules in your organization. .DESCRIPTION Shows the transport rules in your organization. .Example Show-TransportRules #> $transportRules = Get-TransportRule | Select-Object -Property Name,Description,CreatedBy,WhenChanged,State if ($null -ne $transportRules) { write-LogFile -Message "[INFO] Checking all TransportRules" foreach ($rule in $transportRules) { write-LogFile -Message "[INFO] Found a TransportRule" -Color "Green" write-LogFile -Message "Rule Name $($rule.name)" -Color "Yellow" write-LogFile -Message "Rule CreatedBy: $($rule.CreatedBy)" -Color "Yellow" write-LogFile -Message "When Changed: $($rule.WhenChanged)" -Color "Yellow" write-LogFile -Message "Rule State: $($rule.State)" -Color "Yellow" write-LogFile -Message "Description: $($rule.Description)" -Color "Yellow" } } } function Get-TransportRules { <# .SYNOPSIS Collects all transport rules in your organization. .DESCRIPTION Collects all transport rules in your organization. The output will be written to a CSV file called "TransportRules.csv". .PARAMETER OutputDir OutputDir is the parameter specifying the output directory. Default: Output\Rules .PARAMETER Encoding Encoding is the parameter specifying the encoding of the CSV output file. Default: UTF8 .Example Get-TransportRules #> [CmdletBinding()] param ( [string]$OutputDir, [string]$Encoding ) if ($OutputDir -eq "" ){ $OutputDir = "Output\Rules" if (!(test-path $OutputDir)) { New-Item -ItemType Directory -Force -Name $OutputDir | Out-Null write-LogFile -Message "[INFO] Creating the following directory: $OutputDir" } } else{ if (Test-Path -Path $OutputDir) { write-LogFile -Message "[INFO] Custom directory set to: $OutputDir" } else { write-Error "[Error] Custom directory invalid: $OutputDir exiting script" -ErrorAction Stop write-LogFile -Message "[Error] Custom directory invalid: $OutputDir exiting script" } } $filename = "$($date)-TransportRules.csv" $outputDirectory = Join-Path $OutputDir $filename if ($Encoding -eq "" ){ $Encoding = "UTF8" } $transportRules = Get-TransportRule | Select-Object -Property Name,Description,CreatedBy,WhenChanged,State if ($null -ne $transportRules) { $transportRules | export-csv -NoTypeInformation $outputDirectory -Encoding $Encoding write-LogFile -Message "[INFO] Transport rules are collected and writen to: $outputDirectory" -Color "Green" } } function Show-MailboxRules { <# .SYNOPSIS Shows the mailbox rules in your organization. .DESCRIPTION Shows the mailbox rules in your organization. .Parameter UserIds UserIds is the Identity parameter specifies the Inbox rule that you want to view. .Example Show-MailboxRules -UserIds "HR@invictus-ir.com,Test@Invictus-ir.com" #> [CmdletBinding()] param( [string]$UserIds ) $amountofRules = 0 if ($UserIds -eq "") { Get-mailbox -resultsize unlimited | ForEach-Object { write-LogFile -Message "[INFO] Checking $($_.UserPrincipalName)..." $inboxrule = Get-inboxrule -Mailbox $_.UserPrincipalName if ($inboxrule) { write-LogFile -Message "[INFO] Found InboxRule(s) for: $($_.UserPrincipalName)..." -Color "Green" foreach($rule in $inboxrule){ $amountofRules = $amountofRules + 1 write-LogFile -Message "Username: $($_.UserPrincipalName)" -Color "Yellow" write-LogFile -Message "RuleName: $($rule.name)" -Color "Yellow" write-LogFile -Message "RuleEnabled: $($rule.Enabled)" -Color "Yellow" write-LogFile -Message "CopytoFolder: $($rule.CopyToFolder)" -Color "Yellow" write-LogFile -Message "MovetoFolder: $($rule.MoveToFolder)" -Color "Yellow" write-LogFile -Message "RedirectTo $($rule.RedirectTo)" -Color "Yellow" write-LogFile -Message "ForwardTo: $($rule.ForwardTo)" -Color "Yellow" write-LogFile -Message "TextDescription: $($rule.Description)" -Color "Yellow" } } } } else { if ($UserIds -match ",") { $UserIds.Split(",") | Foreach { $user = $_ Write-Output ('[INFO] Checking {0}...' -f $user) $inboxrule = get-inboxrule -Mailbox $user if ($inboxrule) { write-LogFile -Message "[INFO] Found InboxRule(s) for: $UserIds..." -Color "Green" foreach($rule in $inboxrule){ $amountofRules = $amountofRules + 1 write-LogFile -Message "Username: $user" -Color "Yellow" write-LogFile -Message "RuleName: $($rule.name)" -Color "Yellow" write-LogFile -Message "RuleEnabled: $($rule.Enabled)" -Color "Yellow" write-LogFile -Message "CopytoFolder: $($rule.CopyToFolder)" -Color "Yellow" write-LogFile -Message "MovetoFolder: $($rule.MoveToFolder)" -Color "Yellow" write-LogFile -Message "RedirectTo $($rule.RedirectTo)" -Color "Yellow" write-LogFile -Message "ForwardTo: $($rule.ForwardTo)" -Color "Yellow" write-LogFile -Message "TextDescription: $($rule.Description)" -Color "Yellow" } } } } else { Write-Output ('[INFO] Checking {0}...' -f $UserIds) $inboxrule = get-inboxrule -Mailbox $UserIds if ($inboxrule) { write-LogFile -Message "[INFO] Found InboxRule(s) for: $UserIds..." -Color "Green" foreach($rule in $inboxrule){ $amountofRules = $amountofRules + 1 write-LogFile -Message "Username: $UserIds" -Color "Yellow" write-LogFile -Message "RuleName: $($rule.name)" -Color "Yellow" write-LogFile -Message "RuleEnabled: $($rule.Enabled)" -Color "Yellow" write-LogFile -Message "CopytoFolder: $($rule.CopyToFolder)" -Color "Yellow" write-LogFile -Message "MovetoFolder: $($rule.MoveToFolder)" -Color "Yellow" write-LogFile -Message "RedirectTo $($rule.RedirectTo)" -Color "Yellow" write-LogFile -Message "ForwardTo: $($rule.ForwardTo)" -Color "Yellow" write-LogFile -Message "TextDescription: $($rule.Description)" -Color "Yellow" } } } } write-LogFile -Message "[INFO] A total of $amountofRules InboxRules found" -Color "Green" } function Get-MailboxRules { <# .SYNOPSIS Collects all the mailbox rules in your organization. .DESCRIPTION Collects all the mailbox rules in your organization. The output will be written to a CSV file called "InboxRules.csv". .Parameter UserIds UserIds is the Identity parameter specifies the Inbox rule that you want to view. .PARAMETER OutputDir OutputDir is the parameter specifying the output directory. Default: Output\Rules .PARAMETER Encoding Encoding is the parameter specifying the encoding of the CSV output file. Default: UTF8 .Example Get-MailboxRules -UserIds Test@Invictus-ir.com Get-MailboxRules -UserIds "HR@invictus-ir.com,Test@Invictus-ir.com" #> [CmdletBinding()] param( [string]$UserIds, [string]$OutputDir, [string]$Encoding ) $RuleList = @() if ($Encoding -eq "" ){ $Encoding = "UTF8" } if ($OutputDir -eq "" ){ $OutputDir = "Output\Rules" if (!(test-path $OutputDir)) { write-LogFile -Message "[INFO] Creating the following directory: $OutputDir" New-Item -ItemType Directory -Force -Name $OutputDir | Out-Null } } else{ if (Test-Path -Path $OutputDir) { write-LogFile -Message "[INFO] Custom directory set to: $OutputDir" } else { write-LogFile -Message "[Error] Custom directory invalid: $OutputDir exiting script" write-Error "[Error] Custom directory invalid: $OutputDir exiting script" -ErrorAction Stop } } $filename = "$($date)-MailboxRules.csv" $outputDirectory = Join-Path $OutputDir $filename $amountofRules = 0 if ($UserIds -eq "") { $totalRules = 0 Get-mailbox -resultsize unlimited | ForEach-Object { Write-Output ('[INFO] Checking {0}...' -f $_.UserPrincipalName) $inboxrule = Get-inboxrule -Mailbox $_.UserPrincipalName if ($inboxrule) { $amountofRules = 0 foreach ($rule in $inboxrule) { $tempval = [pscustomobject]@{ UserName = $_.UserPrincipalName RuleName = $rule.name RuleEnabled = $rule.Enabled CopytoFolder = $rule.CopyToFolder MovetoFolder = $rule.MoveToFolder RedirectTo = $rule.RedirectTo ForwardTo = $rule.ForwardTo TextDescription = $rule.Description } $RuleList = $tempval $amountofRules = $amountofRules + 1 $totalRules = $totalRules + 1 $RuleList | export-CSV $outputDirectory -Append -NoTypeInformation -Encoding UTF8 } write-LogFile -Message "[INFO] Found $amountofRules InboxRule(s) for: $($_.UserPrincipalName)..." -Color "Yellow" write-LogFile -Message "[INFO] Collecting $amountofRules InboxRule(s) for: $($_.UserPrincipalName)..." -Color "Yellow" } } } else { if ($UserIds -match ",") { $UserIds.Split(",") | Foreach { $User = $_ Write-Output ('[INFO] Checking {0}...' -f $User) $inboxrule = get-inboxrule -Mailbox $User if ($inboxrule) { $amountofRules = 0 foreach ($rule in $inboxrule) { $tempval = [pscustomobject]@{ UserName = $User RuleName = $rule.name RuleEnabled = $rule.Enabled CopytoFolder = $rule.CopyToFolder MovetoFolder = $rule.MoveToFolder RedirectTo = $rule.RedirectTo ForwardTo = $rule.ForwardTo TextDescription = $rule.Description } $RuleList = $tempval $amountofRules = $amountofRules + 1 $totalRules = $totalRules + 1 $RuleList | export-CSV $outputDirectory -Append -NoTypeInformation -Encoding UTF8 } write-LogFile -Message "[INFO] Found $amountofRules InboxRule(s) for: $User..." -Color "Yellow" write-LogFile -Message "[INFO] Collecting $amountofRules InboxRule(s) for: $User..." -Color "Yellow" } } } else { Write-Output ('[INFO] Checking {0}...' -f $UserIds) $inboxrule = get-inboxrule -Mailbox $UserIds if ($inboxrule) { write-host ('[INFO] Found InboxRule(s) for: {0}...' -f $UserIds) -ForegroundColor Yellow foreach($rule in $inboxrule){ $amountofRules = $amountofRules + 1 $tempval = [pscustomobject]@{ UserName = $UserIds RuleName = $rule.name RuleEnabled = $rule.Enabled CopytoFolder = $rule.CopyToFolder MovetoFolder = $rule.MoveToFolder RedirectTo = $rule.RedirectTo ForwardTo = $rule.ForwardTo TextDescription = $rule.Description } $RuleList = $tempval $totalRules = $totalRules + 1 $RuleList | export-CSV $outputDirectory -Append -NoTypeInformation -Encoding UTF8 } write-LogFile -Message "[INFO] Collecting $amountofRules InboxRule(s) for: $UserIds..." -Color "Yellow" } } } write-LogFile -Message "[INFO] A total of $totalRules InboxRules found!" -Color "Green" write-LogFile -Message "[INFO] InboxRules rules are collected and writen to: $outputDirectory" -Color "Green" } |