Удаление сиротских SID-ов


Скрипт запускать из Posh окна с административными правами (.\script.ps1 -path d:\), в качестве параметра -path правильнее давать корень диска, поскольку наследованные права скрипт не удаляет.

Param(
  [Parameter(HelpMessage = 'Enter a directory or file path')]
    [ValidateScript({if ($_ -match '\\'){Test-Path $_}else{$True}})]
    [string]$path
)
$global:arr = @()
   Get-ChildItem -Path $path -Recurse | ForEach-Object -Process {
    $path = $_.fullname.Replace("[", "`[").Replace("]", "`]")
    $acl = Get-Acl -LiteralPath $path
    $sid = $acl.access | Where-Object -FilterScript {
    $_.identityreference -match 'S-1-.*' -and !($_.isinherited)
  }
if($sid)
{
    $sid| ForEach-Object -Process {
    $co = [pscustomobject]@{
    Path = $path
    RemovedSID = $_.identityreference
    }
  $co|Format-List
  $arr += $co
  $null = $acl.removeaccessrule($_)
}
  Set-Acl -LiteralPath $path -AclObject $acl
}
}
'- Report'
$arr|Format-Table -AutoSize

Редактируем список рассылки через Outlook

Создаём список рассылки (Distribution List) через ECP или ADUC, владельцем назначаем ответственного товарища :-). Таким образом у товарища будет право на изменение состава списка через ECP. Для возможности редактирования списка в Outlook продолжим — в powershell консоли  создаём новую группу для роли менеджера:

New-RoleGroup DistributionGroupManagement -Roles "Distribution Groups"

Затем в эту группу добавляем этого ответственного:

Add-RoleGroupMember DistributionGroupManagement -Member exchange-test

Вот после этого можно через Адресную книгу в Outlook менять состав списка, в котором ответственный товарищ поставлен в качестве хозяина (Owner). 


PS. Ответственных товарищей может быть и группа. 

PPS. Get-RoleGruppMember и Remove-RoleGruppMember тоже работают :-)

Поиск причин блокировки учёток AD

С помощью скрипта сохранияем в файл список учёток с записями об их блокировке :

Set-Location C:\scripts\AccLockouts

$Pdce = (Get-AdDomain).PDCEmulator

$users = get-content adaccounts.txt

foreach ( $username in $users )

{

$GweParams = @{

‘Computername’ = $Pdce

‘LogName’ = ‘Security’

‘FilterXPath’ = "*[System[EventID=4740] and EventData[Data[@Name='TargetUserName']='$username']]"

}

$Events = Get-WinEvent @GweParams

$username  | out-file log.txt -append

$Events | foreach {$_.Properties[1].value + ' ' + $_.TimeCreated} | out-file log.txt -append }

Для аудита блокировок на найденной машине необходимо включить ряд локальных политик аудита Windows. Для этого на локальном компьютере, на котором нужно отследить источник блокировки, открываем редактор групповых политик Gpedit.msc и в разделе Compute Configurations -> Windows Settings -> Security Settings -> Local Policies -> Audit Policy включяем политики:


  • Audit process tracking: Success , Failure

  • Audit logon events: Success , Failure

Дождались очередной блокировки учетной записи и найходим в журнале безопасности (Security) события с Event ID 4625. После окончания анализа,  выявления и наказания виновника не забываем  отключить действие активированных групповых политик аудита.

В том случае, если так и не смогли выяснить причину блокировки учетной записи на конкретном компьютере, чтобы избежать постоянной блокировки учетки, стоит попробовать переименовать имя учетной записи пользователя в Active Directory. Это как правило самый действенный метод защиты от внезапных блокировок определенного пользователя.

Поиск и восстановление удалённых писем

Сначала надо разрешить восстановление отдельных писем (по умолчанию выключено)

Set-Mailbox -Identity "UserName" -SingleItemRecoveryEnabled $true -RetainDeletedItemsFor 30

Разрешить восстановление всем пользователям 

Get-Mailbox -ResultSize unlimited -Filter {(RecipientTypeDetails -eq 'UserMailbox')} | Set-Mailbox -SingleItemRecoveryEnabled $true -RetainDeletedItemsFor 30

Поиск писем в ящике пользователя, результаты сохраняются в ящике админа (в ящик, в котором ищем — нельзя)

Search-Mailbox "UserName" -SearchQuery "from:'SenderName'" -TargetMailbox "AdminUser" -TargetFolder "UserName Recovery" -LogLevel Full

.pst импорт прямо в сервер Exchange 2016

Перед выполненем команды New-MailboxImportRequest дать себе права импорта\экспорта командой New-ManagementRoleAssignment -Role "Mailbox Import Export" –User domain\user.name

Импорт только календаря New-MailboxImportRequest -Mailbox user -FilePath \\exchange\g$\migration\Calendar.pst -TargetRootFolder "Calendar"

Проверить процесс импорта командой Get-MailboxImportRequest  | select BatchName,Status

Более детально проверить процесс Get-MailboxImportRequest | Get-MailboxImportRequestStatistics | ft BatchName,Percent*,BytesTransferred*

Убрать ненужные записи о миграциях Get-MailboxImportRequest -Status Completed | Remove-MailboxImportRequest


Служба поиска в Exchange 2016

После переноса ящиков в новую базу и удаления старой базы перестал работать поиск как в OWA, так и в Outlook. Проверяем, что индексы в нерабочем состоянии:

Get-MailboxDatabaseCopyStatus * | sort name | Select name,status,contentindexstate

Ответом будет статус базы FailedAndSuspended.

Решением является пересоздание индекса базы с ящиками:

— остановить службы MSExchangeFastSearch (Microsoft Exchange Search) и HostControllerService (Microsoft Exchange Search Host Controller), 

— удалить каталог с GUID базы (лежит в каталоге с базой),

— запустить остановленные службы.

Индекс будет пересоздан автоматически, время работы зависит от размера базы (2 Гб база, индексация около 30 минут). Состояние в процессе будет Crawling, по окончании — Healthy.

Удаление Exchange 2016

При запуске мастера установки он ругается на не удалённые/не перенесённые почтовые ящики. Удаляем:

Get-Mailbox  |  Disable-Mailbox

Get-Mailbox -PublicFolder | Disable-Mailbox -PublicFolder

Get-Mailbox -Arbitration| Disable-Mailbox -Arbitration -DisableArbitrationMailboxWithOABsAllow –DisableLastArbitrationMailboxAllowed

Get-Mailbox -AuditLog | Disable-Mailbox

Get-Mailbox -Monitoring | Disable-Mailbox

Обязательный рестарт сервера !!! После рестарта запускаем установщик, проверка пререквизитов проходит и начинается процесс удаления, состоящий из 14 этапов. Потом опять рестарт. 


Exchange 2013/16 и процесс mscorsvw

Данный процесс является выполняемым модулем NGEN  для ускорения запуска приложений .NET. Его отсутствие является требованием установцика кумулятивного обновления. Решений 2:

1. Подождать, пока он сам не завершится (нормально, если он берёт до 30 минут).

2. Дать ему больше ядер (по умолчанию 1, можно дать до 6) командой из под админских прав — c:\Windows\Microsoft.NET\Framework\v4.0.30319\ngen.exe executeQueuedItems