Процедура блокировки учетных записей пользователей

от автора

Данный скрипт ни что иное, как процедура блокировки пользователя, попрощавшегося с компанией.
Допустим у нас в компании согласована следующая процедура действий при увольнении сотрудника:
— Аккаунт пользователя необходимо блокировать вместе с почтовым ящиком.
— Всю почту сотрудника необходимо выгружать в pst файл в какой-нибудь файловый архив.
— Необходимо предотвратить любую возможносмть удаленного доступа к коропративной сети.
— Заблокированные аккаунты необходимо перемещать из продакшн контейнера в какой-нибудь отстойник для последующего удаления через какое-то время.

Вот всем этим и займемся…

Небольшие дополнения к условиям задачи, взятые из конкретной ситуации:
— VPN предоставлен посредством дополнения пользователей в определенные VPN* группы безопасности.
— Контейнеры с аккаунтами пользователей разбиты по странам и в каждой находится подконтейнер Disabled, куда и перемещаются заблокированные аккаунты.

Скрипт выглядит так:

# #    A user disabling procedure. #    Prepared by Alexander Lipovetskiy 30.09.2013. #    Version 1.00 #  cls  # Load required modules  if (-not (Get-Module ActiveDirectory))     {     Write-Host "Please wait while script imports all necessary modules..."     Add-PSSnapin Microsoft.Exchange* -WarningAction SilentlyContinue     Set-ADServerSettings -ViewEntireForest:$True -WarningAction SilentlyContinue     Import-Module ActiveDirectory -WarningAction SilentlyContinue     Write-Host "All modules have been loaded."     }  # Variables  $Leaver = Read-Host `n"Enter an account name to disable" $Country = Get-ADUser $Leaver -Properties Country | select Country -ExpandProperty Country $FilePath = "\\Server\Mailbox_share\$Country\$Leaver.pst" $Date = get-date -Format g $ITstaff = whoami $Logs = "d:\Scripts\UserDisabling\Logs\"  # Disable user account  try     {     Disable-ADAccount $Leaver     Set-ADUser $Leaver -Description "Leaver, disabled by $ITstaff on $Date"     Write-Host "$Date The account $Leaver has been disabled." -ForegroundColor Yellow     Write-Output "$Date The account $Leaver has been disabled." | Out-File -FilePath "$Logs\$Leaver.txt" -Append     }  catch     {     Write-Host "$Leaver does not exist or you have not enough permissions to disable it." -ForegroundColor Red     exit     }  # Remove VPN Access  Write-Host "Removing $Leaver from VPN groups..."  Get-ADGroup -Filter {Name -like "VPN*"} | ForEach-Object      {     $_ = $_.Name     try         {         Remove-ADGroupMember -Confirm:$False -Identity $_ -Members $Leaver         Write-Host "$Leaver has been removed from group $_" -ForegroundColor Yellow         Write-Output "$Leaver has been removed from group $_" | Out-File -FilePath "$Logs\$Leaver.txt" -Append         }      catch {}     }  Write-Host "Removing of $Leaver from VPN groups completed."  # Move account into a Disabled OU  Write-Host "Moving $Leaver into a Disabled OU..."  $DN = Get-ADUser $Leaver | Select DistinguishedName -ExpandProperty DistinguishedName  $DisabledOU = $DN -replace "CN=$Leaver","OU=Disabled"  try     {     Move-ADObject -Identity $DN -TargetPath $DisabledOU -Confirm:$false     Write-Host "$Leaver has been moved into $DisabledOU." -ForegroundColor Yellow     Write-Output "$Leaver has been moved into $DisabledOU." | Out-File -FilePath "$Logs\$Leaver.txt" -Append     }  catch     {     Write-Host "Disabled OU does not exist or $Leaver is already there." -ForegroundColor Red     Write-Output "Disabled OU does not exist or $Leaver is already there." | Out-File -FilePath "$Logs\$Leaver.txt" -Append     }  # Mailbox export  Write-Host "Exporting mailbox of $Leaver..."  New-MailboxExportRequest -Mailbox $Leaver -Name $Leaver -FilePath $FilePath -confirm:$false -WarningAction SilentlyContinue  $Stat = Get-MailboxExportRequest | where {$_.Name -eq $Leaver} | Get-MailboxExportRequestStatistics $Status = $Stat.Status   while (($Status -eq "Queued") -or ($Status -eq "InProgress"))     {     $Stat = Get-MailboxExportRequest | where {$_.Name -eq $Leaver} | Get-MailboxExportRequestStatistics     $Status = $Stat.Status     $PercentComplete = $Stat.PercentComplete     $BytesTransferred = $Stat.BytesTransferred     if ($PercentComplete -eq "") {$PercentComplete = 0}     else {$PercentComplete = $Stat.PercentComplete}     Write-Host `n"Archiving status is:" $Status     Write-Host "Percent complete:" $PercentComplete     Write-Host "Bytes transferred:" $BytesTransferred     Write-Progress -Activity "Creating archive... $PercentComplete % completed" -PercentComplete $PercentComplete -Status "Processing the archive of $Leaver."     Start-Sleep -s 30     }  $Stat = Get-MailboxExportRequest | where {$_.Name -eq $Leaver}  | Get-MailboxExportRequestStatistics -IncludeReport $ExportLog = $Stat.Report $ExportLog | Out-File -FilePath "$Logs\$Leaver.txt" -Append  if ($Stat.Status -eq "Completed")     {     Write-Host `n"Mailbox of $Leaver has been exported into $FilePath." -ForegroundColor Yellow     Write-Output "Mailbox of $Leaver has been exported into $FilePath." | Out-File -FilePath "$Logs\$Leaver.txt" -Append     }  else     {     Write-Host `n"Mailbox export of $Leaver FAILED." -ForegroundColor Red     Write-Output "Mailbox export of $Leaver FAILED." | Out-File -FilePath "$Logs\$Leaver.txt" -Append     }  Get-MailboxExportRequest | where {$_.Name -eq $Leaver} | Remove-MailboxExportRequest -Confirm:$false -WarningAction SilentlyContinue  # The End  Write-Host `n"$Date User disabling procedure for $Leaver was successfully completed." -ForegroundColor Yellow Write-Output `n"$Date User disabling procedure for $Leaver was successfully completed." | Out-File -FilePath "$Logs\$Leaver.txt" –Append 

Для того, чтобы с этим скриптом могли работать простые смертные из первой линии поддержки создадим для них группу “Domain\Exchange-ImportExport”, добавим туда необходимые аккаунты и присвоим этой группе необходимую роль в Exchange:

New-ManagementRoleAssignment -Name "Helpdesk Mailbox Import Export" –Role "Mailbox Import Export" –SecurityGroup “Domain\Exchange-ImportExport” 

Вот как бы и все, но я расширю этот пост еще одной задачей от секьюрити менеджера: удалять все аккаунты, которые были заблокированы более 90 дней назад и только те, что лежат в наших Disabled отстойниках (то, что вне удалять нельзя).

Создаем следующий скрипт и закидываем его в планировщик для отработи каждую ночь на каком-нибудь менеджмент сервере:

# # This script looks for disabled user accounts and deletes those which have date modified earlier than 90 days. # Prepared by Alexander Lipovetskiy 30.09.2013. # Version 1.00 #  # Let's load AD module  if (-not (Get-Module ActiveDirectory)){Import-Module ActiveDirectory}  # Variables  $Date = Get-Date -Format g $DateToDelete = (Get-Date).AddDays(-90) $Path = "OU=Accounts,DC=domain,DC=com" $Log = "d:\Scripts\UserDeletion\Deleted_Users.txt" $DisabledUsersToDelete = @()  # We process only user containers named Disabled  $OUs = Get-ADOrganizationalUnit -Filter * -SearchBase $Path | where {$_.DistinguishedName -like "*disabled*"}  # Filter out old disabled accounts  $OUs | ForEach-Object {     $DisabledUsersToDelete += Get-ADUser -Filter {Enabled -eq $false} -SearchBase $_ -Properties Enabled, Modified | where {$_.Modified -le $DateToDelete}     }  # Let's count them  $Count = $DisabledUsersToDelete.Count  # The accounts deletion. # Achtung! The below deletes all gathered accounts, so, be careful!  Write-Output `n "$Date $Count disabled user accounts are going to be deleted." | Out-File -FilePath $Log -Append  $DisabledUsersToDelete | Remove-ADUser   Write-Output `n "$Date User accounts from below have been deleted." | Out-File -FilePath $Log -Append Write-Output `n $DisabledUsersToDelete.DistinguishedName | Out-File -FilePath $Log –Append 

The End.

ссылка на оригинал статьи http://habrahabr.ru/post/195768/


Комментарии

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

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