码迷,mamicode.com
首页 > 系统相关 > 详细

Office365 PowerShell打开邮箱审计功能

时间:2017-08-15 14:20:22      阅读:221      评论:0      收藏:0      [点我收藏+]

标签:securescore   mailbox auditing   

最近总公司要求Office365需要在所有的邮箱上面打开审计功能。这个功能没法通过图形界面操作,只能通过powershell脚本实现。


微软提供了一个官方的脚本,不过里面有个小bug

https://technet.microsoft.com/en-us/library/dn879651.aspx#step2


当多个用户账户存在相同的alias的时候,他会很奇怪的认为是重名的账户,然后无法修改对应的几个账户,因此不建议直接用get-mailbox | set-mailbox 修改数据,而是手动地for循环处理。


另外还有一个很2的地方是,Office365不能设置默认打开审计,因此所有的新账户都是没有打开的。豆子只能设置一个计划任务,让脚本每天自动执行来修改新账户的设定。


另外,执行完了之后,我希望把修改过的账户都给我发一份邮件通知一下,另外最后windows也给我写个日志,以便日后查看。


下面是完整的脚本

#Create a secure string of the your password
#Read-Host -AsSecureString | ConvertFrom-SecureString > c:\temp\key.txt

#Check if O365 session is setup, if not, create a new one
$Sessions=Get-PSSession
if (($Sessions.ComputerName -eq "outlook.office365.com") -and ($Sessions.State -ne ‘Broken‘)){
    write-host "Detect existing Office365 session, skip.." -ForegroundColor Cyan
}
else{
    
    $username = "yuan.li@aus.ddb.com"
    $secureStringPwd = gc C:\temp\key.txt | ConvertTo-SecureString
    $creds = New-Object System.Management.Automation.PSCredential -ArgumentList $username, $secureStringPwd
    $ExoSession = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $creds -Authentication Basic -AllowRedirection
    Import-PSSession $ExoSession
}
#Find Mailboxes that haven‘t enabled auditing
$users=get-mailbox -Filter {AuditEnabled -eq $false} | select name, alias, auditenabled, auditlogagelimit, distinguishedname
foreach($user in $users){
    try{
        Set-Mailbox $user.distinguishedname -AuditEnabled $true -AuditLogAgeLimit 365 -AuditOwner Create,HardDelete,MailboxLogin,MoveToDeletedItems,SoftDelete,Update -ErrorAction Stop
       # Create a Windows Eventlog if needed
        $username=$user.name
        Write-Eventlog  -Logname ‘Application‘ -Source ‘Application‘ -EventID 666 -EntryType Information -Message "$username Maibox Auditing is enabled" 
        }
    catch{
        Write-Eventlog  -Logname ‘Application‘ -Source ‘Application‘ -EventID 667 -EntryType Error -Message "$user Mailbox Auditing is failed to enable" 
    }
  
}
#There are two ways to check the resut, Event Viewer or Email
#Check again if the status is changed 
$result=foreach($user in $users){
    get-mailbox $user.name | select name, alias, auditenabled, auditlogagelimit, distinguishedname
} 
#Send Email to the admin
$from = "yuan.li@syd.ddb.com"
$to = "yuan.li@syd.ddb.com"
$smtp = "smtp.office365.com" 
$sub = "Auditing list" 
$secureStringPwd = gc C:\temp\key.txt | ConvertTo-SecureString
$creds = New-Object System.Management.Automation.PSCredential -ArgumentList $username, $secureStringPwd
$date=get-date 
$htmlbody=$result| ConvertTo-Html -Body " <H1> $date Mailbox Auditing Enabled record </H1>" -CssUri C:\tmp\table.css 
Send-MailMessage -To $to -From $from -Subject $sub -Body ($htmlbody|Out-String) -Credential $creds -SmtpServer $smtp -DeliveryNotificationOption Never -BodyAsHtml -UseSsl -port 587 
#Check from Event Viewer
try{
    $eventcritea = @{logname=‘Application‘;id=666}
    $Events =get-winevent -FilterHashtable $eventcritea -ErrorAction Stop
    ForEach ($Event in $Events) {    
            
        $eventXML = [xml]$Event.ToXml()              
        $Event | Add-Member -MemberType NoteProperty -Force -Name  Information -Value $eventXML.Event.EventData.Data             
        $Event.Information         
    }            
}catch [system.Exception] {
    
    "Couldn‘t fine any mailbox auditing logs"
}
    
$events | select information, id, logname, timecreated| Out-GridView -Title Status


测试结果


获取的Windows日志

技术分享



收到的邮件通知

技术分享


隔了2天,在https://securescore.office.com/#!/score 上确认一下状态已经改变!


技术分享

本文出自 “麻婆豆腐” 博客,请务必保留此出处http://beanxyz.blog.51cto.com/5570417/1956406

Office365 PowerShell打开邮箱审计功能

标签:securescore   mailbox auditing   

原文地址:http://beanxyz.blog.51cto.com/5570417/1956406

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!