Code improvements

This commit is contained in:
AdminDroid 2025-06-18 13:48:58 +05:30
parent 245e06e50b
commit 00e256d645

View File

@ -1,7 +1,7 @@
<# <#
============================================================================================= =============================================================================================
Name: Send Microsoft Entra App Credentials Expiry Notifications Name: Send Microsoft Entra App Credentials Expiry Notifications
Version: 1.0 Version: 1.1
Website: o365reports.com Website: o365reports.com
Script Highlights: Script Highlights:
@ -15,6 +15,12 @@ Script Highlights:
7. It can be executed with certificate-based authentication (CBA) too. 7. It can be executed with certificate-based authentication (CBA) too.
8. The script is scheduler-friendly. 8. The script is scheduler-friendly.
Change Log
~~~~~~~~~~
V1.0 (Apr 29, 2025) - File created
V1.1 (Jun 14, 2025) - Minor code improvements.
For detailed Script execution: https://o365reports.com/2025/04/29/send-entra-app-credential-expiry-notifications For detailed Script execution: https://o365reports.com/2025/04/29/send-entra-app-credential-expiry-notifications
============================================================================================ ============================================================================================
@ -35,13 +41,8 @@ Param
[string]$CertificateThumbprint [string]$CertificateThumbprint
) )
$Date = Get-Date
$CSVFilePath ="$(Get-Location)\AppCertsAndSecretsExpiryNotificationSummary_$((Get-Date -format yyyy-MMM-dd-ddd` hh-mm` tt).ToString()).csv" $CSVFilePath ="$(Get-Location)\AppCertsAndSecretsExpiryNotificationSummary_$((Get-Date -format yyyy-MMM-dd-ddd` hh-mm` tt).ToString()).csv"
# Function to connect to Microsoft Graph
function Connect_ToMgGraph {
# Check if Microsoft Graph module is installed # Check if Microsoft Graph module is installed
$MsGraphModule = Get-Module Microsoft.Graph -ListAvailable $MsGraphModule = Get-Module Microsoft.Graph -ListAvailable
if ($MsGraphModule -eq $null) { if ($MsGraphModule -eq $null) {
@ -70,20 +71,37 @@ function Connect_ToMgGraph {
# Verify connection # Verify connection
if ((Get-MgContext) -ne $null) { if ((Get-MgContext) -ne $null) {
if ((Get-MgContext).Account -ne $null) { if ((Get-MgContext).Account -ne $null) {
Write-Host "Connected to Microsoft Graph PowerShell using account: $((Get-MgContext).Account)" $LoggedInAccount = (Get-MgContext).Account
if([string]::IsNullOrEmpty($FromAddress)) {
$FromAddress = $LoggedInAccount
}
Write-Host "Connected to Microsoft Graph PowerShell using account: $($LoggedInAccount)"
} }
else { else {
Write-Host "Connected to Microsoft Graph PowerShell using certificate-based authentication." Write-Host "Connected to Microsoft Graph PowerShell using certificate-based authentication."
if ([string]::IsNullOrEmpty($FromAddress)) {
Write-Host "`nError: FromAddress is required when using certificate-based authentication." -ForegroundColor Red
Exit
}
} }
} else { } else {
Write-Host "Failed to connect to Microsoft Graph." -ForegroundColor Red Write-Host "Failed to connect to Microsoft Graph." -ForegroundColor Red
Exit Exit
} }
}
# Function to Send Email # Function to Send Email
function SendEmail { function SendEmail {
$EmailAddresses = ($Recipients -split ",").Trim()
$toRecipients = @()
foreach ($Email in $EmailAddresses) {
$toRecipients += @{
emailAddress = @{
address = $Email
}
}
}
$Script:TableContent += "</table>" $Script:TableContent += "</table>"
$TableStyle = "<style> $TableStyle = "<style>
table { width: 100%; border-collapse: collapse; font-family: Arial, sans-serif; } table { width: 100%; border-collapse: collapse; font-family: Arial, sans-serif; }
@ -109,30 +127,16 @@ function SendEmail {
toRecipients = $toRecipients toRecipients = $toRecipients
} }
} }
Send-MgUserMail -UserId $FromAddress -BodyParameter $params Send-MgUserMail -UserId $FromAddress -BodyParameter $params
} }
Connect_ToMgGraph
$LoggedInAccount = (Get-MgContext).Account
if ($LoggedInAccount -ne $null){
if ([string]::IsNullOrEmpty($FromAddress)) {
$FromAddress = $LoggedInAccount
}
} else {
if ([string]::IsNullOrEmpty($FromAddress)) {
Write-Host "`nError: FromAddress is required when using certificate-based authentication." -ForegroundColor Red
Exit
}
}
$ExportResult = $null $ExportResult = $null
$AppCount = 0 $AppCount = 0
$Script:ProcessedCount = 0 $Script:ProcessedCount = 0
$RequiredProperties=@('DisplayName','AppId','Id','KeyCredentials','PasswordCredentials','CreatedDateTime','SigninAudience') $RequiredProperties=@('DisplayName','AppId','Id','KeyCredentials','PasswordCredentials','CreatedDateTime','SigninAudience')
if(($CertificatesOnly.IsPresent) -or ($ClientSecretsOnly.IsPresent) -or ($SoonToExpireInDays -ne "")) { if(($CertificatesOnly.IsPresent) -or ($ClientSecretsOnly.IsPresent) -or ($SoonToExpireInDays -ne "")) {
$SwitchPresent=$True $SwitchPresent=$True
} }
@ -140,7 +144,6 @@ else {
$SwitchPresent=$false $SwitchPresent=$false
} }
# Create an HTML table with data # Create an HTML table with data
$Script:TableContent = "<table>" $Script:TableContent = "<table>"
$Script:TableContent += "<tr><th>App Name</th><th>App Creation Time</th><th>Credential Type</th><th>Credential Name</th><th>Creation Time</th><th>Expiry Date</th><th>Friendly Expiry Date</th></tr>" $Script:TableContent += "<tr><th>App Name</th><th>App Creation Time</th><th>Credential Type</th><th>Credential Name</th><th>Creation Time</th><th>Expiry Date</th><th>Friendly Expiry Date</th></tr>"
@ -160,16 +163,6 @@ Get-MgApplication -All -Property $RequiredProperties | ForEach-Object {
if($owners -eq "") { $Owners="-" } if($owners -eq "") { $Owners="-" }
$EmailAddresses = ($Recipients -split ",").Trim()
$toRecipients = @()
foreach ($Email in $EmailAddresses) {
$toRecipients += @{
emailAddress = @{
address = $Email
}
}
}
#Process through Secret keys #Process through Secret keys
if(!($CertificatesOnly.IsPresent) -or ($SwitchPresent -eq $false)) { if(!($CertificatesOnly.IsPresent) -or ($SwitchPresent -eq $false)) {
foreach($Secret in $Secrets) { foreach($Secret in $Secrets) {