Перейти к содержимому

Exchange

Как узнать кто давно не подключался к почтовому ящику в exchange.

Задача вывести кто давно не подключался к почтовому ящику в exchange 2016

Function New-Array {,$args}
$Report = New-Array

$days = "30"

$date_last = (Get-Date).AddDays(-$days) 
$mailboxes = Get-Mailbox  -ResultSize unlimited

foreach($mailbox in $mailboxes) 
{ 
  $mbx_DN = $mailbox.DistinguishedName 
  $email = $mailbox.PrimarySmtpAddress.toString()
  $Stat = Get-MailboxStatistics -Identity $mbx_DN | Where-Object {$_.lastLogonTime -lt $date_last -and $_.LastLogonTime -ne $null }  |`
  Select-Object DisplayName,  @{Name="TotalItemSizeGB"; Expression={[math]::Round(($_.TotalItemSize.ToString().Split("(")[1].Split(" ")[0].Replace(",","")/1GB),0)}},LastLogonTime,DatabaseName,DatabaseProhibitSendReceiveQuota

 if ($Stat){
  $tmp = New-Object System.Object
  $tmp | Add-Member -type NoteProperty -name DisplayName -value $($stat.DisplayName)
  $tmp | Add-Member -type NoteProperty -name Email -value $email
  $tmp | Add-Member -type NoteProperty -name TotalSize_MB -value $($stat.TotalItemSizeGB)
  $tmp | Add-Member -type NoteProperty -name LastLogon 
Читать далее

Как мигрировать почтовый архив exchange в другую базу топ 10 по размеру архивного ящика

Задача переместить самые большие архивные ящики пользователей в другую базу

$resul=Get-Mailbox -ResultSize Unlimited | Where-Object { $_.ArchiveDatabase -like "*ARC03*" } | ForEach-Object {
    $PrimarySmtpAddress=$_.PrimarySmtpAddress
    $alias = $_.Alias
    $ArchiveDatabase=$_.ArchiveDatabase
    $totalItemSize = (Get-MailboxStatistics -Identity $alias -Archive).TotalItemSize
    [PSCustomObject]@{
        Alias = $alias
        TotalItemSize = $totalItemSize
        ArchiveDatabase=$ArchiveDatabase
    }
}
$resul1=$resul |Where-Object  { $_.TotalItemSize -like "*gb*" } | Select-Object  *,@{Name="TotalItemSizeGB"; Expression={[math]::Round(($_.TotalItemSize.ToString().Split("(")[1].Split(" ")[0].Replace(",","")/1GB),0)}}  |`
 Sort-Object TotalItemSizeGB -Descending | select -first 10 

 <#

 $resul1| ForEach-Object {
    $alias = $_.Alias
    New-MoveRequest -Identity $alias -ArchiveOnly -ArchiveTargetDatabase ARC07
}

#>

 

Как обновить политику адресов электронной почты и скрипт для удаление дополнительных псевдонимов из OU.

Задача при переноси уз с почтовыми адресами (adminbd.ru) в ou на которую назначена политика адресов электронной, необходимо обновить политику что бы создался новый псевдоним (alias email) и удалить старый email адрес.

Add-PSSnapin Microsoft.Exchange.Management.PowerShell.SnapIn
 
 
Get-EmailAddressPolicy (имя политики) | Update-EmailAddressPolicy
$ouName = "НазваниеOU"
$domainToRemove = "adminbd.ru"
$logFilePath = "C:\Scripts\delet_alias_LGC\log.txt"
Remove-item $logFilePath
$emailAddresses1 = Get-Mailbox -OrganizationalUnit $ouName -ResultSize Unlimited
$emailAddresses1 = $emailAddresses1 | Where-Object { $_.PrimarySmtpAddress -notlike "*@adminbd.ru" }
 
foreach ($user in $emailAddresses1) {
    $voxysAddresses = $user.EmailAddresses -split ',' | Where-Object { $_ -like "smtp:*@$domainToRemove" }
    $voxysAddresses = $adminbdAddresses -replace "^smtp:", ""
 
    if ($voxysAddresses.Count -ge 1) {
        # Удаляем все псевдонимы *@adminbd.ru*
        Set-Mailbox 
Читать далее

Как вывести список почтовых ящиков с информацией отключены пользователи и есть ли редиректор exchange

Задача сделать список почтовых ящиков с информацией отключена или нет учетная запись и есть ли редирект.

# Подключение к Exchange PowerShell
$session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri "http://<ExchangeServerFQDN>/PowerShell/" -Authentication Kerberos
Import-PSSession $session

# Получение списка ящиков
$mailboxes = Get-Mailbox -ResultSize Unlimited

# Путь к CSV-файлу для вывода
$csvPath = "C:\Path\To\Output.csv"

# Создание пустого массива для хранения данных
$exportData = @()

# Обработка каждого ящика
foreach ($mailbox in $mailboxes) {
    $primarySMTPAddress = $mailbox.PrimarySMTPAddress

    # Получение данных ящика и статуса отключения
    $adUser = Get-ADUser -Filter "ProxyAddresses -like '*$primarySMTPAddress'" -Properties Enabled
    
    if ($adUser) {
        $forwardingAddress = $mailbox.ForwardingAddress
        $forwardingSmtpAddress = ""

        if ($forwardingAddress) {
            
Читать далее

Как сделать автоматическую смену пароля у пользователя exchange и отправка нового пароля на email.

Авто смена пароля пользователей AD OU=External

Скрипт проверяет дату окончания действия пароля пользователе

<# .SYNOPSIS
    Авто смена пароля пользователей AD OU=External
.DESCRIPTION
    Скрипт проверяет дату окончания действия пароля пользователей и меняет его в день окончания. Новый пароль отправляется на почту в поле mail.
#>
#╔════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╗#
$Host.UI.RawUI.WindowTitle = "Авто смена пароля пользователей AD"
#╚════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝#
 
Import-Module ActiveDirectory
 
#------ Logging section ------#
 
$dp0 = ($MyInvocation.MyCommand.Path | Split-Path -Parent)
$fileLocation = (gi $MyInvocation.InvocationName) | ForEach-Object {
    $fileDirectory = "$($_.DirectoryName)\$($_.BaseName)";
    "$fileDirectory\$($_.BaseName)_$('{0:yyyy-MM-dd}'-f(date))";
    if (!(Test-Path "$fileDirectory")) {
        ni "$fileDirectory" -ItemType "directory" | Out-Null
    }
}
$watch = [System.Diagnostics.Stopwatch]::StartNew()
$watch.Start()
Start-Transcript "${fileLocation}.log" -append
 
#------ Initialization ------#
 
. $dp0\functions\Generate-Password.ps1
Читать далее

Как создать переадресацию с одного ящика на другой в exchange. Переезд в другой домен.

Задача. Есть два домена. Из одного домена люди перешли в другой. Нужно настроить переадресацию писем из одного домена в другой.

Скрипт вытягивает пользователей из домена adminbd1 находит соответствие в adminbd2 и создаёт правило пересылки.

<# .SYNOPSIS
    Создание переадресации писем сотрудников adminbd1 с adminbd2 на adminbd1
.DESCRIPTION
    Скрипт вытягивает пользователей из домена adminbd1 находит соответствие в adminbd2 и создаёт правило пересылки.
#>
#╔════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╗#
$Host.UI.RawUI.WindowTitle = "Создание переадресации писем с adminbd2 на adminbd1"
#╚════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝#
[system.gc]::Collect()
$ErrorActionPreference="Continue"
#------ Logging section ------#
 
#$dp0 = ($MyInvocation.MyCommand.Path | Split-Path -Parent)
$fileLocation = (gi $MyInvocation.InvocationName) | ForEach-Object {
    $fileDirectory = "$($_.DirectoryName)\$($_.BaseName)";
    "$fileDirectory\$($_.BaseName)_$('{0:yyyy-MM-dd}'-f(date))";
    if (!(Test-Path "$fileDirectory")) {
        ni 
Читать далее

Как создать контакты в exchange из другого домена.

Скрипт вытягивает пользователей из домена adminbd.ru и создаёт их контакты в домене adminbd2.ru . Так же прячет одноимённую почту домена adminbd2.ru

При создание файла с данными для входа $UserCredential = Import-CliXML -Path ‘D:\Programs\Scripts\Import_contact-arn_to_vx\mycredentials_adminbd.xml’ важно генерировать файл от того пользователя от которого будет производится запуск крипта.

<# .SYNOPSIS
    Заведение контактов - adminbd.ru to adminbd2.ru
.DESCRIPTION
    Скрипт вытягивает пользователей из домена adminbd.ru и создаёт их контакты в домене adminbd2.ru. Так же прячет одноиённую почту домена adminbd2.ru.
#>
#╔════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╗#
$Host.UI.RawUI.WindowTitle = "Заведение контактов - adminbd.ru to adminbd2.ru"
#╚════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝#
[system.gc]::Collect()
$ErrorActionPreference="Continue"
#------ Logging section ------#
 
#$dp0 = ($MyInvocation.MyCommand.Path | Split-Path -Parent)
$fileLocation = (gi 
Читать далее

Как сделать скрипт для архивировании почты exchange перед удаление учетной записи.

Задача архивировать почту перед удалением

 

#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 
Читать далее

Как сделать автоматическое создание почтовых ящиков с отключёнными ActiveSync и MAPI и добавить в группу G-Deny to send

Задача завести ящики для пользователей с отключёнными ActiveSync и MAPI и добавить в группу G-Deny to send.

 

<# .SYNOPSIS
    Заведение почты операторов adminbd
.DESCRIPTION
    Скрипт ищет пользователей с пустым полем mail и заводит почту в adminbd.ru. Исключение $OperatorsOU = "*Operators*".
#>
#╔════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╗#
$Host.UI.RawUI.WindowTitle = "Заведение почты операторов adminbd"
#╚════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝#
[system.gc]::Collect()
 
#------ Variables ------#
 
$BaseOU = "OU=Locations,DC=adminbd,DC=ru"
$OperatorsOU = "*Operators*"
$MailCorp = Get-ADUser -SearchBase $BaseOU -filter {Enabled -eq "True"} -properties 'mail','UserPrincipalName','SamAccountName','CanonicalName' |
Where-Object    {
        ($_.CanonicalName -like $OperatorsOU) -and ($_.mail -like $NULL)
    }
#$MailCorp = Get-ADUser -Identity Anastasiya.Bodrukh -properties 'mail','CanonicalName'
 
  
 #------ Execution ------#
 
$UserCredential = Import-CliXML -Path 'D:\Programs\Scripts\adminbd_operators\mycredentials_adminbd.xml'
$Sessionadminbd = New-PSSession 
Читать далее

Как сделать автоматическое создание почтового ящика exchange.

  • Выполняется каждый час ищет OU office и просматривает поле mail, если пустое то почта заводится в базу SK05/06 в зависимости какая свободна.
  • Политика хранения ставится Move to archive after 6 month.
  • Проставляется архив в зависимости от номера базы.

 

<# .SYNOPSIS
    Заведение почты  adminbd
.DESCRIPTION
    Скрипт ищет пользователей с пустым полем mail и заводит почту в adminbd.ru. Исключение $OfficeOU = "*Office*".
#>
#╔════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╗#
$Host.UI.RawUI.WindowTitle = "Заведение почты  adminbd"
#╚════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝#
[system.gc]::Collect()
 
#------ Variables ------#
 
$BaseOU = "OU=Locations,DC=adminbd,DC=ru"
$OfficeOU = "*Office*"
<#$MailCorp = Get-ADUser -SearchBase $BaseOU -filter {Enabled -eq "True"} -properties 'mail','UserPrincipalName','SamAccountName','CanonicalName'| Where-Object {$_.mail -Match ".*@corp.adminbd.ru"} |
    Where-Object    {
        !($(foreach ($u in 
Читать далее