M365 - Scripts
- Distribution Lists
- Powershell to Bulk Add Users to Different Distribution lists
- PowerShell to Import Distribution List Members From CSV/TXT
- Powershell to List Users That Are NOT Members of Listed Distribution Lists
- Email Management
Distribution Lists
Distribution Lists
Powershell to Bulk Add Users to Different Distribution lists
$CSVFile = "C:\Temp\DL-Group-Members.csv"
Try {
#Connect to Exchange Online
Connect-ExchangeOnline -ShowBanner:$False
#Get date from CSV File
$CSVData = Import-Csv -Path $CSVFile
#Iterate through each row in the CSV
ForEach($Row in $CSVData)
{
#Get the Distribution Group
$Group = Get-DistributionGroup -Identity $Row.GroupEmail
If($Null -ne $Group)
{
#Get Exisiting Members of the Group
$GroupMembers = Get-DistributionGroupMember -Identity $Row.GroupEmail -ResultSize Unlimited | Select-Object -Expand PrimarySmtpAddress
#Get Users to Add to the Group
$UsersToAdd = $Row.Users -split ","
#Add Each user to the Security group
ForEach ($User in $UsersToAdd)
{
#Check if the group has the member already
If($GroupMembers -contains $User)
{
Write-host "'$($User)' is already a Member of the Group '$($Group.DisplayName)'" -f Yellow
}
Else
{
Add-DistributionGroupMember –Identity $Row.GroupEmail -Member $User
Write-host -f Green "Added Member '$User' to the Group '$($Group.DisplayName)'"
}
}
}
Else
{
Write-host "Could not Find Group:"$Row.GroupName
}
}
}
Catch {
write-host -f Red "Error:" $_.Exception.Message
}
Prepare a CSV file containing the email addresses of the users you want to add to the distribution list. The CSV file should have a header row with the following column names: GroupEmail, and Users. Here is my CSV template:
Distribution Lists
PowerShell to Import Distribution List Members From CSV/TXT
$GroupEmailID = "Sales@Crescent.com"
$CSVFile = "C:\Temp\DL-Members.txt"
#Connect to Exchange Online
Connect-ExchangeOnline -ShowBanner:$False
#Get Existing Members of the Distribution List
$DLMembers = Get-DistributionGroupMember -Identity $GroupEmailID -ResultSize Unlimited | Select-Object -Expand PrimarySmtpAddress
#Import Distribution List Members from CSV
Import-CSV $CSVFile -Header "UPN" | ForEach-Object {
#Check if the Distribution List contains the particular user
If ($DLMembers -contains $_.UPN)
{
Write-host -f Yellow "User is already member of the Distribution List:"$_.UPN
}
Else
{
Add-DistributionGroupMember –Identity $GroupEmailID -Member $_.UPN
Write-host -f Green "Added User to Distribution List:"$_.UPN
}
}
Distribution Lists
Powershell to List Users That Are NOT Members of Listed Distribution Lists
# Define the list of distribution lists
$distributionLists = @("Managers", "Senior Managers")
# Function to get members of a distribution list
function Get-DistributionListMembers {
param (
[string]$distributionListName
)
$members = Get-DistributionGroupMember -Identity $distributionListName | Select-Object -ExpandProperty PrimarySmtpAddress
return $members
}
# Function to get all users
function Get-AllUsers {
$users = Get-ADUser -Properties * -Filter *
return $users
}
# Create an array to store all users
$allUsers = Get-AllUsers
# Create an array to store members of all distribution lists
$allListMembers = @()
# Populate $allListMembers with members of each distribution list
foreach ($list in $distributionLists) {
$listMembers = Get-DistributionListMembers -distributionListName $list
$allListMembers += $listMembers
}
# Find users not in any distribution list
$missingUsers = $allUsers | Where-Object { $_.UserPrincipalName -notin $allListMembers }
# Export results to CSV
$missingUsers | Select-Object UserPrincipalName, Name, Enabled, Title, Department, DistinguishedName, LastLogonDate | Export-Csv -Path "C:\temp\Distlist.csv" -NoTypeInformation
Email Management
Email Management
Delete Email From All Mailboxes In Office 365
For full details please go to the following page Delete Email From All Mailboxes In Office 365
This assumes the following are true
Subject: You must change your bank password now
Sent: 05/12/2020
1. Connect to MSOnline in Powershell
Import-Module ExchangeOnlineManagement
Connect-IPPSSession -UserPrincipalName "UPN"
2. Create a New Compliance Search in Powershell, preferably Powershell ISE
New-ComplianceSearch `
-Name Phish1 `
-ExchangeLocation All `
-ContentMatchQuery 'subject:"You must change your bank password now" AND sent:05/12/2020'
3. Start the Compliance Search
Start-ComplianceSearch -Identity Phish1
4. Check the Status of/Verify the Search Completes
Get-ComplianceSearch -Identity Phish1
5. Verify Items Found Match the Number of Emails Expected
Get-ComplianceSearch -Identity Phish1 | Format-List *
6. Create Preview of the Search Results
New-ComplianceSearchAction -SearchName Phish1 -Preview
7. Preview the Search Results
(Get-ComplianceSearchAction Phish1_Preview | Select-Object -ExpandProperty Results) -split ","
(Optional) Download Results From Security and Compliance Center Portal
8. Delete Email From All Mailboxes In Office 365 With Soft Delete
New-ComplianceSearchAction -SearchName Phish1 -Purge -PurgeType SoftDelete
9. View Result of Purge
Get-ComplianceSearchAction -Identity Phish1_Purge | Format-List