Cписок версий и последних апдейтов для SQL, Exchange, Sharepoint

Upgrade Paths for CU’s & .NET
https://eightwone.com/2017/12/21/upgrade-paths-for-cus-net/

The Most Recent Updates for Microsoft SQL Server
https://sqlserverupdates.com/

Exchange Server build numbers and release dates
https://docs.microsoft.com/en-us/Exchange/new-features/build-numbers-and-release-dates?view=exchserver-2019

SharePoint updates
https://docs.microsoft.com/en-us/officeupdates/sharepoint-updates

Список всех ящиков и групп рассылки в csv

Скрипт для выгрузки всех ящиков и групп рассылки в csv:

$FileExport = "c:\ab_company.csv"
$dgs = Get-DistributionGroup
$mbx = Get-Mailbox
$CSVrows = @()
foreach ($m in $mbx) {
	$CSVrows += $m | Select DisplayName, PrimarySmtpAddress, HiddenFromAddressListsEnabled
}
foreach ($dg in $dgs) {
	$CSVrows += $dg | Select DisplayName, PrimarySmtpAddress, HiddenFromAddressListsEnabled
}
$CSVrows | Export-CSV -Path $FileExport -force -NoTypeInformation -Encoding "UTF8" -Delimiter ";"

Скрипт для выгрузки состава групп рассылки:

$FileExport = "c:\dgs.csv"
$dgs = Get-DistributionGroup
$mbx = Get-Mailbox
$CSVrows = @()
foreach ($dg in $dgs) {
	Write-Host $dg.Name -fore Green
	Get-DistributionGroupMember -Identity $dg.Identity | % {
		#Write-Host "`t"$_.DisplayName"`t"$_.PrimarySmtpAddress"`t"$_.RecipientType
		$CSVrow = "" | Select DistributionGroup,DG_email,Member_DisplayName,Member_PrimarySmtpAddress,Member_RecipientType
		$CSVrow.DistributionGroup = $dg.Name
		$CSVrow.DG_email = $dg.PrimarySmtpAddress
		$CSVrow.Member_DisplayName = $_.DisplayName
		$CSVrow.Member_PrimarySmtpAddress = $_.PrimarySmtpAddress
		$CSVrow.Member_RecipientType = $_.RecipientType
		$CSVrows += $CSVrow
	}
}
$CSVrows | Export-CSV -Path $FileExport -force -NoTypeInformation -Encoding "UTF8" -Delimiter ";"

Восстановление Exchange

Если полностью умер сервер и надо восстановить с чистой установки ОС:
https://docs.microsoft.com/ru-ru/Exchange/high-availability/disaster-recovery/recover-exchange-servers?view=exchserver-2019

Основная идея такая: не убивать учётку компьютера в домене, запускать установку Exchange со специальным ключом.

How to downgrade or change Exchange Server Edition

1. Run ADSI Edit tool: adsi.msc
2. Connect to
3. In connection settings Select a well known Naming Context – Configuration
4. Expand Configuration – Services – Microsoft Exchange – <Name of your Organization> – Administrative Groups – Exchange Administrative Group (FYDIBOHF23SPDLT) – Servers
5. Click Exchange server Properties
6. Clear msExchProductID attribute
7. Restart Microsoft Exchange Information Store service if server holds mailbox role
8. Enter New Product Key using Exchange Management Console or PowerShell

Set-ExchangeServer -Identity Server1 -ProductKey xxxxx-xxxxx-xxxxx-xxxxx-xxxxx

9. Restart Microsoft Exchange Information Store service

Здесь описано, как понизить лицензию на сервере с ролью Edge Transport:
https://okrylov.wordpress.com/2016/11/07/downgrade-exchange-server-edition/

Exchange: экспорт/иморт ящиков

Экспорт ящиков

$user="Vasya.Pupkin";New-MailboxExportRequest -Mailbox "$user@company.com" -FilePath "\\DUB-MAIL2-K\R$\MB_Export\$user.pst"
Get-MailboxExportRequest | Get-MailboxExportRequestStatistics | ft Name, Status, PercentComplete, OverallDuration, EstimatedTransferSize,BytesTransferred,BytesTransferredPerMinute,EstimatedTransferItemCount,ItemsTransferred
Get-MailboxExportRequest | where {$_.status -eq "Completed"} | Remove-MailboxExportRequest

Импорт ящиков:

$user="Vasya.Pupkin";New-MailboxImportRequest -Name "$user Import" -FilePath "\\DUB-MAIL2-01\T$\MB_Import\$user.pst" -Mailbox "$user@company.com"
Get-MailboxImportRequest | Get-MailboxImportRequestStatistics| ft Name, StatusDetail, PercentComplete, OverallDuration, EstimatedTransferSize, BytesTransferred, EstimatedTransferItemCount, ItemsTransferred
Get-MailboxImportRequest -Status Completed | Remove-MailboxImportRequest

Exchange: Создание почтовых ящиков

Создание пользователя в Active Directory

$OU='OU=Company1,OU=USERS,OU=ACCOUNTS,DC=DOMAIN,DC=LOCAL'
$u='Vasya.Pupkin'; $pwd='Xcee3Dj*i'; New-ADUser -GivenName $u.split(".")[0] -Surname $u.split(".")[1] -DisplayName ($u.split(".")[1] + " " + $u.split(".")[0]).trim() -Name ($u.split(".")[1] + " " + $u.split(".")[0] + " (Company1)").trim() -SamAccountName (($u[0..15] -join "")+'.cmp1') -UserPrincipalName ($u+"@company1.com") -Path $OU -AccountPassword(ConvertTo-SecureString $pwd -AsPlainText -force) -Enabled $true -ChangePasswordAtLogon $true

Активировать ящик:

$Database="Mail_DB_01"
$user="Vasya.Pupkin";
	$identity=$($user+"@company1.com")
	Enable-Mailbox -Identity $identity -Alias (($user[0..15] -join "")+'.cmp1') -Database $Database
	Get-Mailbox –Identity $identity | Set-Mailbox `
	-EmailAddressPolicyEnabled $false `
	-EmailAddresses "SMTP:$($user+"@company1.com")", `
	 "X500:/o=DOMAIN/ou=Exchange Administrative Group (FYDIBOHF23SPDLT)/cn=Recipients/cn=Pupkin Vasya (company1)f40";

Создать контакт в AD и Exchange:

New-MailContact -Name "Pupkin Vasya (GR)" -DisplayName "Pupkin Vasya" -FirstName "Vasya" -LastName "Pupkin" -ExternalEmailAddress "Vasya.Pupkin@domain.com" -Alias "Vasya.Pupkin.gr.contact" -OrganizationalUnit "OU=Contacts,OU=MAIL,OU=ACCOUNTS,DC=DOMAIN,DC=LOCAL"
$u = "Vasya.Pupkin"; New-MailContact -Name ($u.split(".")[1] + " " + $u.split(".")[0] + " (GR)").trim() -DisplayName ($u.split(".")[1] + " " + $u.split(".")[0]).trim() -FirstName $u.split(".")[0] -LastName $u.split(".")[1] -ExternalEmailAddress ($u+"@domain.com") -Alias ($u+".gr.contact") -OrganizationalUnit "OU=GR,OU=Mail_Contacts,OU=USERS,OU=ACCOUNTS,DC=DOMAIN,DC=LOCAL"; Set-MailContact -Identity ($u+".gr.contact") -HiddenFromAddressListsEnabled $true;