So when I was at Dattocon I was approached by an MSP that was using his RMM system to alert on changes of the local admin password, as he wanted to be updated every time a local admin got a new password. He did this by using an older script of mine below.
Monitoring Local Admin Password changes
$LastDay = (Get-Date).addhours(-24) $AdminGroup = Get-LocalGroupMember -SID "S-1-5-32-544" foreach($Admin in $AdminGroup){ $ChangedAdmins = get-localuser -sid $admin.sid | Where-Object {$_.PasswordLastSet -gt $LastDay} }
But he came to me telling me that recently he had a need to start using this to alert on that a password needed to be updated in his documentation system to complete a process, but he was missing this for Office365 environments. I figured I would give him a hand and made the following script
Monitoring Office365 Global Admin Password changes – All tenants
$LastDay = (Get-Date).addhours(-24) $credential = Get-Credential Connect-MsolService -Credential $credential $customers = Get-msolpartnercontract -All $ChangedUsers = @() foreach($customer in $customers){ write-host "getting users for $($Customer.Name)" -ForegroundColorGreen $adminemails = Get-MsolRoleMember -TenantId $customer.tenantid -RoleObjectId(Get-MsolRole-RoleName"CompanyAdministrator").ObjectId $Users = $adminemails | get-msoluser-TenantId$customer.TenantId foreach($User in $Users){ if($User.LastPasswordChangeTimestamp -gt $LastDay){$ChangedUsers += "$($User.UserPrincipalName)has changed his password in the last 24 hours.Please update documentation to reflect.`n"} } }
Monitoring Office365 Global Admin Password Changes – Single tenant
$TenantName = "YourTenantName.onmicrosoft.com" $LastDay = (Get-Date).addhours(-24) $credential = Get-Credential Connect-MsolService -Credential $credential $Customer=Get-msolpartnercontract -All | Where-Object{$_.DefaultDomainName -eq $TenantName} $ChangedUsers=@() write-host"getting users for $($Customer.Name)" -ForegroundColorGreen $adminemails = Get-MsolRoleMember -TenantId$customer.tenantid -RoleObjectId (Get-MsolRole -RoleName "CompanyAdministrator").ObjectId $Users= $adminemails | get-msoluser-TenantId $customer.TenantId foreach($User in $Users){ if($User.LastPasswordChangeTimestamp -gt $LastDay){$ChangedUsers +="$($User.UserPrincipalName) has changed his password in the last 24 hours.Please update documentation to reflect.`n"} }
This script checks if a password has been changed in the last day, and if so alerts on it, notifying you that a global admin password has been updated and needs to be changed in the documentation. You can also use this as a warning system if you do not have anyone that should be changing these passwords.
Anyway, hope it helps, and as always. Happy PowerShelling!
The post Monitoring with PowerShell: Monitoring Office365 admin password changes appeared first on CyberDrain.