Powershell, ADMT и проверка административных шар


В статье Powershell – параллельное выполнение операций – меняем настройки DNS я немного описал Workflow и как использовать это средство для выполнения параллельных операций на множестве компьютеров на примере настройки DNS.

Вот еще один пример. При миграции компьютеров с помощью ADMT важно обеспечить удаленный доступ к компьютеру с сервера миграции. Фактически используются административные шары. И ADMT имеет режим PreCheck – выполнение проверки перед запуском фактической миграции. Но запускать проверку из ADMT не совсем удобно, т.к. ошибки он покажет, но их еще надо исправить, либо исключить проблемные компьютеры из списка миграции. Поэтому лучше проверку делать заранее, исправить ошибки доступа, потом только приступать к миграции. И поможет нам в этом простой скрипт:

workflow  checkAdmShares {

 

param($computerName)

 

foreach -parallel($computer in $computerName) {

   if  (Test-Connection  -Count 2  -ErrorAction SilentlyContinue -ComputerName $computer.DNSHostName)

             { if ( Test-Path  -Path «\\$($computer.DNSHostName)\admin$» ) {«$($computer.DNSHostName) — Ok»} else {«$($computer.DNSHostName) — not path»} } else { «$($computer.DNSHostName) — not ping»}

   }

 

}

 

$comps = Get-Content C:\list.txt | % {$_.Trim()} | % { Get-ADComputer  $_ }

checkAdmShares $comps

 

За счет распараллеливания скрипт работает очень быстро даже для большого списка компьютеров.

Powershell – поиск конфликтов при миграции лесов


При миграции учетных записей из одного леса (домена) в другой может возникнуть неприятная ситуация – одинаковые samaccountname у учетных записей пользователей. В случае использования ADMT в режиме merge обе записи склеиваются (!) – вообще забавно получается, а режиме replace – поди потом пойми кто есть кто. С почтовыми ящиками Exchange тоже будет пазл (нет ничего страшного, но все же неприятно).

В любом случае надо сделать правильно и до миграции найти все возможные конфликты и устранить их. В поиске совпадающих samaccountname поможет следующий скрипт:

$dserver = «domain1.ru«

$list1= Get-ADUser -Filter * -SearchBase «DC=domain1,DC=ru» -Server $dserver  | select -ExpandProperty SamAccountName

 

$dserver = «domain2.ru»

$list2= Get-ADUser -Filter * -SearchBase «DC=domain2,DC=ru» -Server $dserver  | select -ExpandProperty SamAccountName

 

$listconflict = $list1 | ? {$list2 -contains $_ }

 

ADMT 3.2 и Windows Server 2012


При подготовке к миграции леса Windows Server 2008 R2 в новый лес Windows Server 2012 возник интересный вопрос. Оказалось, что текущая версия ADMT 3.2 не ставится на Windows Server 2012 (в том числе PES 3.1 ).

Читать далее