Автоматизация создания адресных книг в Office 365 через Powershell Часть 3.
В данной статья я расскажу как автоматизировать процесс добавления новых пользователей в политику адресных книг Office 365.
Вкратце зачем это нужно. Если вы создали нового пользователя и включили его в группы Active Directory, по которым идет фильтрация адресных книг, это еще не значит что новый пользователь будет видеть только свою адресную книгу. Проблема в том что он будет видеть все соседние адресные книги, но при этом будет членом только своей адресной книги.
Как это исправить? Я предлагаю сделать это следующим образом.
Нам понадобятся 3 Powershell скрипта.
1-й скрипт будет «шаблоном». В нем мы будем подключаться к Office 365. Назовем его MainShedule.ps1
2-й скрипт будет создаваться скриптом из этой статьи, данный скрипт будет в самый конец нашего будущего скрипта добавлять актуальные строки применения политики адресных книг.
3-й получившийся скрипт будет применять политики для всех новых пользователей. Его просто нужно добавить в планировщик задач. Назовем его Add-AddressBookPolicy-Via-ADgroup.ps1
Итак начнем.
Первый скрипт:
$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###
Соответственно в следующем скрипте, который мы формируем при создании новых адресных книг, мы будем добавлять строки под этой частью кода:
####Shedule Tasks###
Далее после формирования скрипта при создании новых адресных книг, мы должны получить следующий скрипт:
$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
Как видите, добавляются строки типа:
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 без дублей строк.
Сам скрипт:
#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.
Не забывайте в скриптах указывать свои пути и переменные, иначе ничего не заработает!
Удачи)
Добавить комментарий