Перейти к содержимому

Как сделать скрипт для архивировании почты exchange перед удаление учетной записи.

Задача архивировать почту перед удалением

 

#Add-PSSnapin Microsoft.Exchange.Management.PowerShell.SnapIn
Import-Module ActiveDirectory
[system.gc]::Collect()
 
#------ Variables ------#
 
$ExceptinUsers = 'sd'
$OrgUnit    = "OU=Locations,DC=adminbd,DC=ru"
$domain     = "adminbd.ru"
$dt         = (Get-Date).AddDays(-30)
$Filter     = '(Enabled -eq $False) -and (Modified -le $dt)' #   -and (Name -like "ч*")
#$Filter1   = '(Enabled -eq $False) -and (EmailAddress -notlike "*@adminbd.ru") -and (Modified -le $dt)'
$dtstamp    = Get-Date -Format "yyyy-MM-dd-hh-mm-ss"
$dtstamp1   = Get-Date -Format "ddMMyyyy"
$pattern    = '[/\\:?*<>"|]'
$exppath    = "\\arc01.adminbd.ru\archive-pst$\ARC\"
New-Item -Path "$exppath" -Name "$dtstamp1" -ItemType "directory"
#каталог должен быть создан предварительно и на него даны права чтени¤ и записи дл¤ доменной группы Exchange Trusted Subsystem
 
#------ Search Users ------#
 
$adminbd = Get-ADUser -server $domain -SearchBase $OrgUnit -Properties EmailAddress,Modified,Title,City,SamAccountName -Filter $Filter |
    Where-Object    {
        !($(foreach ($u in $ExceptinUsers) {$_.SamAccountName -Contains  $u}) -contains ($True))
    }
#$adminbd = Get-ADUser -Identity Kristina.Rvacheva -Properties EmailAddress,Modified,Title,City,SamAccountName
 
#$adminbd1 = Get-ADUser -server $domain -SearchBase $OrgUnit -Properties EmailAddress,Modified,Title,City -Filter $Filter1
 
 
#------ Establishing a connection, Archiving mailbox and delete users ------#
 
#$UserCredential = Get-Credential
$UserCredential = Import-CliXML -Path 'D:\Programs\Scripts\archive_and_delete\mycredentials_adminbd.xml'
$Sessionadminbd = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://MXS06.adminbd.ru/PowerShell/ -Authentication Kerberos -Credential $UserCredential
Import-PSSession $Sessionadminbd -DisableNameChecking -AllowClobber
 
#Фильтр только по OU Discharged*
#$adminbd = $adminbd | Where {$_.DistinguishedName -like "*Discharged*"}
 
$Result = @()
 
foreach ($user in $adminbd) {
    if($user.EmailAddress -like "*@adminbd.ru"){
        $base = (Get-Mailbox -Identity $user.EmailAddress | select Database).Database #.Name
        if($base -like "Oper*" ) {
            $detailed = [ordered]@{
                DT      = $dtstamp
                Name    = $user.Name
                OU      = ""
                Login   = $user.UserPrincipalName
                Email   = $user.EmailAddress
                ModDT   = $user.Modified
                Title   = $user.Title -replace ($pattern,'_')
                City    = $user.City -replace ($pattern,'_')
                Error   = ""
                Arc     = ""
                StatusUrlCode = ""
                DELETE     = 'DELETE'
            }
            $detailed.OU = $user.DistinguishedName.Split(",")[1].ToString()
             
            $data = @{"login"= $user.UserPrincipalName}
            $headers = @{"accept" = '*/*'}
            $StatusUrl = (Invoke-WebRequest -Method 'Post' -Uri 'https://adeventhandler.adminbd.ru/User/Delete' -Headers $headers -Body ($data | ConvertTo-Json) -ContentType "application/json")
            $detailed.StatusUrlCode = $StatusUrl.StatusCode
             
            Remove-Mailbox -Identity $detailed.Email -Force -Confirm:$false -Permanent $true
            #Disable-Mailbox -Identity $detailed.Email -Confirm:$false
            $Result += New-Object PSObject -Property $detailed
        } <#else {   
            $detailed = [ordered]@{
                DT      = $dtstamp
                Name    = $user.Name
                OU      = ""
                Login   = $user.UserPrincipalName
                Email   = $user.EmailAddress
                ModDT   = $user.Modified
                Title   = $user.Title -replace ($pattern,'_')
                City    = $user.City -replace ($pattern,'_')
                Error   = ""
                Arc     = $user.UserPrincipalName+".arc"
                StatusUrlCode = ""
            }
            $detailed.OU = $user.DistinguishedName.Split(",")[1].ToString()
     
                    $expfile = $exppath+$dtstamp1+"\"+$detailed.City+"-"+$detailed.Title+"-"+$detailed.Email+".pst"
     
            $Error.Clear()
            $temp = New-MailboxExportRequest -Mailbox $detailed.Email -FilePath $expfile -name $detailed.login -Priority Emergency
            #Write-Host $detailed.Email
     
            if($Error[0]) {
                #Write-Host "Error logged"
                foreach ($E in $Error) {
                    $detailed.Error += $E.Exception.Message
                }
            } else {
                $fin = $false
                while ($fin -ne $true) {
                    $expres = (Get-MailboxExportRequest -name $temp.name | Get-MailboxExportRequestStatistics).Status
                    if (($expres.Value -eq "Queued") -or ($expres.Value -eq "InProgress") -or ($expres.Value -eq "CompletionInProgress")) {
                        Start-Sleep -s 5
                    } else {
                        if ($expres.Value -ne "Completed") {
                            $detailed.Error += "MailboxExportRequest.Status is "+$expres.Value
                            #Write-Host "Error logged"
                        }
                        $fin = $true
                    }
                }          
            }
            if ($detailed.Error -eq "") {
                #Закомментил - гадим в один общий файл
                $expfile = $exppath+$dtstamp1+"\"+$detailed.City+"-"+$detailed.Title+"-"+$detailed.Email+"-Archive.pst"
         
                $Error.Clear()
                $temp = New-MailboxExportRequest -Mailbox $detailed.Email -FilePath $expfile -ExcludeFolders "#DeletedItems#" -IsArchive -name $detailed.arc -Priority Emergency
                #Write-Host 'Archive' $detailed.Email
         
                if($Error[0]) {
                    foreach ($E in $Error) {
                        if (-not $E.FullyQualifiedErrorId.Contains("MailboxHasNoArchiveException")) {
                            #Write-Host "Error logged"
                            $detailed.Error += $E.Exception.Message
                        }
                    }
                } else {
                    $fin = $false
                    while ($fin -ne $true) {
                        $expres = (Get-MailboxExportRequest -name $temp.name | Get-MailboxExportRequestStatistics).Status
                        if (($expres.Value -eq "Queued") -or ($expres.Value -eq "InProgress") -or ($expres.Value -eq "CompletionInProgress")) {
                            Start-Sleep -s 5
                        } else {
                            if ($expres.Value -ne "Completed") {
                                $detailed.Error += "Archive MailboxExportRequest.Status is "+$expres.Value
                                #Write-Host "Error logged"
                            }
                            $fin = $true
                        }
                    }          
                }      
            }
            if ($detailed.Error -eq "") {
                $Error.Clear()
 
            # WHATIF !!!!!!!!!!
             
                $data = @{"login"= $user.UserPrincipalName}
                $headers = @{"accept" = '*/*'}
                $StatusUrl = (Invoke-WebRequest -Method 'Post' -Uri 'https://adeventhandler.adminbd.ru/User/Delete' -Headers $headers -Body ($data | ConvertTo-Json) -ContentType "application/json")
                $detailed.StatusUrlCode = $StatusUrl.StatusCode
                 
                #Remove-Mailbox -Identity $detailed.Email -Force -Confirm:$false -Permanent $true
                Disable-Mailbox -Identity $detailed.Email -Confirm:$false
 
                if($Error[0]) {
                    #Write-Host "Error logged"
                    foreach ($E in $Error) {
                        $detailed.Error += $E.Exception.Message
                    }
                }
            }
            $Result += New-Object PSObject -Property $detailed
        }#>
    } else {
        #Remove-PSSession $Sessionadminbd
        Remove-ADUser -Identity $user.sAMAccountName -confirm:$false
        #Disable-ADAccount -Server "AD01.adminbd.ru" $user.sAMAccountName
        $detailed = [ordered]@{
            DT      = $dtstamp
            Name    = $user.Name
            OU      = $user.DistinguishedName.Split(",")[1].ToString()
            Login   = $user.UserPrincipalName
            Email   = $user.EmailAddress
            ModDT   = $user.Modified
            Title   = $user.Title -replace ($pattern,'_')
            City    = $user.City -replace ($pattern,'_')
            Error   = ""
            Arc     = ""
            StatusUrlCode = ""
            DELETE  = 'DELETE'
        }
         
        $data = @{"login"= $user.UserPrincipalName}
        $headers = @{"accept" = '*/*'}
        $StatusUrl = (Invoke-WebRequest -Method 'Post' -Uri 'https://adeventhandler.adminbd.ru/User/Delete' -Headers $headers -Body ($data | ConvertTo-Json) -ContentType "application/json")
        $detailed.StatusUrlCode = $StatusUrl.StatusCode
         
        $Result += New-Object PSObject -Property $detailed
    }  
}
 
Start-Sleep -s 15
Get-MailboxExportRequest -Status Completed | Remove-MailboxExportRequest -Confirm:$false
 
$Result | Export-CSV -Path "$exppath\$dtstamp1\Results.csv" -NoTypeInformation -Force -Encoding "UTF8" -Delimiter ";"
 
Remove-PSSession $Sessionadminbd

 

Similar Posts:

Метки:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *