Автоматизация создания адресных книг в Office 365 через Powershell Часть 3.
В данной статья я расскажу как автоматизировать процесс добавления новых пользователей в политику адресных книг Office 365.
Вкратце зачем это нужно. Если вы создали нового пользователя и включили его в группы Active Directory, по которым идет фильтрация адресных книг, это еще не значит что новый пользователь будет видеть только свою адресную книгу. Проблема в том что он будет видеть все соседние адресные книги, но при этом будет членом только своей адресной книги.
Как это исправить? Я предлагаю сделать это следующим образом.
Нам понадобятся 3 Powershell скрипта.
1-й скрипт будет «шаблоном». В нем мы будем подключаться к Office 365. Назовем его MainShedule.ps1
2-й скрипт будет создаваться скриптом из этой статьи, данный скрипт будет в самый конец нашего будущего скрипта добавлять актуальные строки применения политики адресных книг.
3-й получившийся скрипт будет применять политики для всех новых пользователей. Его просто нужно добавить в планировщик задач. Назовем его Add-AddressBookPolicy-Via-ADgroup.ps1
Итак начнем.
Первый скрипт:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
$AdminUsername = "LOGIN@test.com" $AdminPassword = "PASS" Import-Module DirSync Start-OnlineCoexistenceSync Start-Sleep 300 Start-OnlineCoexistenceSync $SecurePassword = ConvertTo-SecureString $AdminPassword -AsPlainText -Force $cred = New-Object -TypeName System.Management.Automation.PSCredential -argumentlist $AdminUsername,$SecurePassword $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri "https://ps.outlook.com/powershell" -Credential $cred -Authentication Basic -AllowRedirection Import-PSSession $Session Import-Module MSOnline Connect-MSOLService -Credential $cred ####Shedule Tasks### |
Соответственно в следующем скрипте, который мы формируем при создании новых адресных книг, мы будем добавлять строки под этой частью кода:
1 |
####Shedule Tasks### |
Далее после формирования скрипта при создании новых адресных книг, мы должны получить следующий скрипт:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
$AdminUsername = "LOGIN@test.com" $AdminPassword = "PASS" Import-Module DirSync Start-OnlineCoexistenceSync Start-Sleep 300 Start-OnlineCoexistenceSync $SecurePassword = ConvertTo-SecureString $AdminPassword -AsPlainText -Force $cred = New-Object -TypeName System.Management.Automation.PSCredential -argumentlist $AdminUsername,$SecurePassword $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri "https://ps.outlook.com/powershell" -Credential $cred -Authentication Basic -AllowRedirection Import-PSSession $Session Import-Module MSOnline Connect-MSOLService -Credential $cred ####Shedule Tasks### Get-Mailbox -ResultSize unlimited | Where-Object {$_.ExternalDirectoryObjectId -in (Get-MsolGroupMember -GroupObjectId dbb4332f-32f5-4c42-bd81-8ec73daee619).objectid} | Set-Mailbox -AddressBookPolicy GD-YOUR.Abp Get-Mailbox -ResultSize unlimited | Where-Object {$_.ExternalDirectoryObjectId -in (Get-MsolGroupMember -GroupObjectId dbb4378f-3235-4c42-bd81-8ec73d247319).objectid} | Set-Mailbox -AddressBookPolicy GD-YOUR_2.Abp |
Как видите, добавляются строки типа:
1 2 |
Get-Mailbox -ResultSize unlimited | Where-Object {$_.ExternalDirectoryObjectId -in (Get-MsolGroupMember -GroupObjectId dbb4332f-32f5-4c42-bd81-8ec73daee619).objectid} | Set-Mailbox -AddressBookPolicy GD-YOUR.Abp Get-Mailbox -ResultSize unlimited | Where-Object {$_.ExternalDirectoryObjectId -in (Get-MsolGroupMember -GroupObjectId dbb4378f-3235-4c42-bd81-8ec73d247319).objectid} | Set-Mailbox -AddressBookPolicy GD-YOUR_2.Abp |
Но есть одна проблема. Данный при создании новых адресных книг, эти строки будут дублироваться, и это замедлит выполнение скрипта.
Предлагаю решить проблему так — мы просто удалим все существующие дубли из скрипта.
Поможет нам в этом 4-й скрипт.
Что мы сделаем:
1) Подключимся к Office 365
2) Выгрузим актуальный список групп
3) Сохраним это в файл
4) Удалим дубли
5) Сделаем Backup старого файла Add-AddressBookPolicy-Via-ADgroup.ps1
6) Создадим новый файл Add-AddressBookPolicy-Via-ADgroup.ps1 без дублей строк.
Сам скрипт:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
#Delete OLD Session Remove-PSSession $Session #Set Vars $TEMP01 = "C:\PowerShell_Scripts\TEMP001.csv" $TEMP02 = "C:\PowerShell_Scripts\TEMP002.txt" remove-item $TEMP01 remove-item $TEMP02 $AdminUsername = "LOGIN@test.com" $AdminPassword = "PASS" $SecurePassword = ConvertTo-SecureString $AdminPassword -AsPlainText -Force $cred = New-Object -TypeName System.Management.Automation.PSCredential -argumentlist $AdminUsername,$SecurePassword $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri "https://ps.outlook.com/powershell" -Credential $cred -Authentication Basic -AllowRedirection Import-PSSession $Session Import-Module MSOnline Connect-MSOLService -Credential $cred #Export Office 365 Groups to CSV Get-MsolGroup | Where-Object {$_.GroupType -eq "MailEnabledSecurity"} | select DisplayName | Export-Csv -NoTypeInformation -Path $TEMP01 -Delimiter ";" Remove-PSSession $Session Remove-Item C:\PowerShell_Scripts\TempShedule.ps1 Copy-Item C:\PowerShell_Scripts\Backup\MainShedule.ps1 C:\PowerShell_Scripts\TempShedule.ps1 remove-item $TEMP02 Import-Csv $TEMP01 -Delimiter ";"| % { $Rules = $_.DisplayName; # Set the user echo $Rules Get-Content -Path "C:\PowerShell_Scripts\Add-AddressBookPolicy-Via-ADgroup.ps1" | Where {$_ -Match "$Rules"} >> $TEMP02 echo " " >> $TEMP02 } $CurrentDate = Get-Date $CurrentDate = $CurrentDate.ToString('dd-MM-yyyy_') #echo $CurrentDate Get-Content $TEMP02 | Add-Content C:\PowerShell_Scripts\TempShedule.ps1 $hash = @{} # define a new empty hash table gc C:\PowerShell_Scripts\TempShedule.ps1 | % { if ($hash.$_ -eq $null) { $_ }; $hash.$_ = 1 } > C:\PowerShell_Scripts\TempShedule-01.ps1 Remove-Item C:\PowerShell_Scripts\TempShedule.ps1 Move-Item -Force C:\PowerShell_Scripts\TempShedule-01.ps1 C:\PowerShell_Scripts\TempShedule.ps1 Move-Item -Force C:\PowerShell_Scripts\Add-AddressBookPolicy-Via-ADgroup.ps1 C:\PowerShell_Scripts\Backup\Tasks\Add-AddressBookPolicy-Via-ADgroup_"$CurrentDate".ps1 Move-Item -Force C:\PowerShell_Scripts\TempShedule.ps1 C:\PowerShell_Scripts\Add-AddressBookPolicy-Via-ADgroup.ps1 remove-item $TEMP01 remove-item $TEMP02 remove-item C:\PowerShell_Scripts\TempShedule.ps1 |
Теперь нужно просто периодически выполнять этот скрипт через планировщик =)
Вот и все. Таким образом можно автоматизировать процесс создания адресных книг в Office 365.
Не забывайте в скриптах указывать свои пути и переменные, иначе ничего не заработает!
Удачи)
Добавить комментарий