Задача архивировать почту перед удалением
#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:
- Как создать учётные записи с помощью powershell в AD из csv
- Как создать контакты в exchange из другого домена.
- Как массово создать учётные записи в АД из csv файла
- Как сделать автоматическое создание почтового ящика exchange.
- Как создать переадресацию с одного ящика на другой в exchange. Переезд в другой домен.