Powershell and MS Exchange 2013

Управление рапсределенными группами и членами групп MS Exchange 2013 с помощью Powershell.
(Managing distribution groups and members of groups of MS Exchange 2013 by Powershell)

#################################################
#------------ Подготовка PowerShell ------------#
#################################################
# Allow powershell access to remote objects
Get-ExecutionPolicy
Set-ExecutionPolicy RemoteSigned

###############################################
#------------ Проверочные функции ------------#
###############################################
#F: Function to check the existence of distribution group: 0 - not exists, 1 - exists
function ExistsGroup
{param($group)
if (Get-DistributionGroup $group -ErrorAction 'SilentlyContinue' | select Name) {$res = 1}
else {$res = 0}
Return $res
}

#F: Function to check the existence of user: 0 - not exists, 1 - exists, 2 - exists, but account offline
function ExistsUser
{param($user)

$attr=Get-User $user -ErrorAction 'SilentlyContinue'
if ($attr){
$attr | Foreach-Object{
$attr = $_

$uaccount=$attr.UserAccountControl
if ($uaccount -eq "NormalAccount"){$res = 1} else{$res = 2}
}
} else {$res = 0}

Return $res
}

#F: Function to check the existence of membership in distribution group: 0 - not member, 1 - member
function ExistsGroupMember
{param($group, $alias)

$members=Get-DistributionGroupMember $group -ErrorAction 'SilentlyContinue'
$members | Foreach-Object{
$members = $_
$memberlist=$members.Alias
foreach($member in $memberlist){
if ($member -eq $alias){$r = 1
Write-Host $member " = " $alias
}
}
}
if ($r -eq 1) {$res = 1}
else {$res = 0}

Return $res
}

#F: Function to check the existence of mail user: 0 - not exists, 1 - exists
function ExistsEmail
{param($user)
if (Get-user $user -ErrorAction 'SilentlyContinue' | Select WindowsEmailAddress){$res = 1} else {$res = 0}
Return $res
}

#F: Function to send mail
function SendEmail
{param($body)
$pw = convertto-securestring -AsPlainText -Force -String test
$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist "domain\robot",$pw
$rus = [Text.Encoding]::Unicode

send-mailmessage -from "User01 <robot@domain.int>" -to "User02 <souluran@domain.int>", "User03 <it@domain.int>" -subject "TEST" -body $body -Encoding $rus -smtpServer mail.domain.int -credential $cred

}

##################################################################
#------------ Configurating connection to MS Exchane ------------#
##################################################################
$pw = convertto-securestring -AsPlainText -Force -String password # set password
$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist "domain\user",$pw #your credentials
$session = new-pssession -ConfigurationName Microsoft.Exchange -ConnectionUri https://server_exchange.domain.int/powershell/ -Credential $cred #connecting string to MS Exchange 2013

#######################################################
#------------ Open connect to MS Exchange ------------#
#######################################################
Import-PSSession $session -AllowClobber -DisableNameChecking

########################################################
#------------ Managing distribution groups ------------#
########################################################
#E: Example 1 - Создание группы ITGROUP (Security Group - Universal)
$NAME = "ITGROUP"
$DisplayName = "Группа IT"
$OrganizationalUnit = "keramin.int/special/kadrgroupe"
# Проверим, существует ли уже такое имя группы
$ch=ExistsGroup($NAME)
if ($ch -eq 0) {
# Если не существует, то создаем группу ITGROUP
Write-Host -ForegroundColor Magenta "    CREATE group: " $NAME
New-DistributionGroup -Name $NAME -DisplayName $DisplayName -OrganizationalUnit $OrganizationalUnit -SamAccountName $NAME -Type "Security" -Confirm:$False  -ErrorAction 'SilentlyContinue'
}
else {
Write-Host -ForegroundColor Red "    WARNING! Group " $NAME " is already exists in LDAP!"
}

#E: Example 2 - Переименование группы ITGROUP в ITGROUP2
$NAME2 = "ITGROUP2"
$DisplayName2 = "Группа IT 2"
# Обновялем аттрибуты группы
Write-Host -ForegroundColor Magenta "    RENAME group: " $NAME " --> " $NAME2
Set-DistributionGroup -Identity $NAME -Name $NAME2 -DisplayName $DisplayName2 -SamAccountName $NAME2 -Confirm:$False -ErrorAction 'SilentlyContinue'

#E: Example 3 - Удаление группы ITGROUP2
#   Write-Host -ForegroundColor Magenta "    DELETE group: " $NAME2
#   Remove-DistributionGroup -Identity $NAME2 -Confirm:$False -ErrorAction 'SilentlyContinue'

####################################################################
#------------ Managing memebers of distribution groups ------------#
####################################################################

#E: Example 1 - Добавление пользователя в члены группы
$UPN="user1@domain.int"  #User principal name
$FIO="Тестовый пользователь"
$ALIAS="user1"
$NAME="FINGROUP"

# Проверяем существование пользователя
$ru=ExistsUser($UPN)
if ($ru -eq 0) {Write-Host -ForegroundColor Red "    User " $UPN " is not exists in Active Directory!"
}
elseif ($ru -eq 2) {Write-Host -ForegroundColor Red "    User " $UPN " exists, but is Disabled in LDAP!"}
else {

# Проверяем является ли членом группы FINGROUP пользователь user1
$rm=ExistsGroupMember $NAME $ALIAS
if ($rm -eq 0) {

# Проверяем имеется ли email у пользователя user1. Email должен существовать, иначе рассылка по этому пользователю не будет работать.
$re=ExistsEmail($UPN)
if ($re -eq 1) {
# Добавляем пользователя user1 в группу FINGROUP
Write-Host -ForegroundColor Magenta "    ADD user: " $UPN " to " $NAME
Add-DistributionGroupMember -Identity $NAME -Member $UPN -Confirm:$False -ErrorAction 'SilentlyContinue'

}
}
else {
Write-Host -ForegroundColor Magenta "    User: " $UPN " already exists in " $NAME
}
}

#E: Example 2 - Перевод пользователя user1 из группы FINGROUP в группу BUHGROUP
$NAME2="BUHGROUP"
Write-Host -ForegroundColor Magenta "    ADD user: " $FIO " into " $NAME2
# Удаляем пользователя из группы FINGROUP
Remove-DistributionGroupMember -Identity $NAME -Member $FIO -Confirm:$False -ErrorAction 'SilentlyContinue'
# Добавляем пользователя в группу BUHGROUP
Add-DistributionGroupMember -Identity $NAME2 -Member $FIO -Confirm:$False -ErrorAction 'SilentlyContinue'

##############################################
#------------ Отправка сообщения ------------#
##############################################

$bodymess = "ALL OK!"
SendEmail($bodymess)

########################################################
#------------ Close connect to MS Exchange ------------#
########################################################
Remove-PSSession $session
Реклама