Блог Квасникова Ивана

Мысли, статьи, размышления…

Browsing Posts in PowerShell

Давным-давно, когда я только познакомился с Sharepoint, мне хотелось сделать телефонный справочник, который бы брал данные из AD, да еще и синхронизировал бы все изменения. Появился PowerShell, и реализация моей хотелки стала проще-простого!
Представляю Вашему вниманию решение, которое берет список пользователей и контактов из базы AD и выкладывает в виде списка Sharepoint (WSS). Список является немного модифицированным стандартным шаблоном «Контакты» для лучшего визуального отображения контактов, удобного поиска и добавления фото сотрудников. Справочник  постоянно находится в актуальном состоянии благодаря ежедневной синхронизации.
продолжить чтение…

Если у вашей организации (группы компаний) несколько лесов с несколькими организациями Exchange, то как правило возникает задача иметь контакты всех организаций в единой адресной книге Exchange. Предлагаю вашему вниманию достаточно простое решение с использованием PowerShell, позволяющее собирать учетные записи из удаленных лесов и размещать их в виде контактов в основном лесу.

Причем скрипт отслеживает появление новых учетных записей, блокирование старых, либо изменение тех или иных атрибутов пользователя.

Ранее уже публиковались различные решения для выполнения данной задачи, однако они либо были слишком громоздки и дОроги (например на базе ILM 2007), либо не имели требуемого функционала (ранее опубликованные скрипты на PowerShell). продолжить чтение…

Практически в любой организации со временем образуется большое количество сетевых шар с огромным количеством подкаталогов. Зачастую права на эти шары даются и группам, и напрямую пользователям, причем если это делалось до вас, то определить текущие права доступа становится непростой задачей.
Привожу скрипт на PowerShell, который собирает информацию по всем подкаталогам и правам доступа к ним в заданной папке, а затем выгружает её в файл CSV в удобном для анализа виде — продолжить чтение…

Некоторое время назад я писАл о расширении оболочки ADUC для получении имени зарегистрированного на компьютере пользователя. На этот раз публикую скрипт на PowerShell 2.0 для задания описаний компьютеров в AD на основании имени текущегозарегистрированного на нём пользователя и его номера телефона. Для снижения таймаута WMI взята и немного доработана конструкция Test-Host, благодаря чему достигается достаточно высокая скорость работы.

Для использования измените выделенное красным (OU и домен) для своего окружения.

Import-Module ActiveDirectory

foreach ($comp in (Get-ADComputer -filter * -SearchBase "CN=Computers,DC=domain,DC=corp" | foreach {$_.name} ))
    {   $ping = new-object System.Net.NetworkInformation.Ping
        trap {Write-Verbose "Ошибка пинга"; $False; continue}
        if ($ping.send($comp,50).Status -eq "Success" )
        {
        $useroncomp = (Get-WmiObject -Class Win32_ComputerSystem -ComputerName $comp).username
        $lastuser = Get-ADUser ($useroncomp.split("\")[1]) -properties displayname, telephonenumber
        Set-ADComputer $comp -Description (($lastuser.DisplayName) + " (" + ($lastuser.telephonenumber) + ")")
        }
        else {Write-Host $comp "- недоступен"}
    }

[warning]Внимание! Скрипт работает только на Windows Server 2008 R2 и Windows 7, то есть там, где есть модуль Active Directory для PowerShell[/warning]

Небольшое добавление к предыдущей статье о получении времени последней регистрации(логона) пользователя в домене. После выхода Windows Server 2008 R2 и моответственного модуля Active Directory в PowerShell 2.0, стало возможным использовать простой скрипт для получения информации со всех контроллеров домена о времени последней регистрации пользователя.

Сам скрипт:

Import-Module ActiveDirectory

$threashold = (Get-Date).AddMonths(-3)
$dcs = Get-ADDomainController -Filter {Name -like "*"}
  $time = 0
  foreach($dc in $dcs)
  {
    $hostname = $dc.HostName
 $filter = "*"
    $user = Get-ADUser -Filter {Name -like $filter} |
            Get-ADObject -Properties lastLogon, DisplayName
  foreach($ull in $user)
     {
  $time = $ull.LastLogon
  $dt = [DateTime]::FromFileTime($time)
  if($dt -lt $threashold)
        {
      Write-Host $ull.displayName "last logged on at:" $dt
     }
  }
  }

С данным настройками скрипт вывод список пользователей со всех контроллеров домена, которые последний раз заходили в домен более трех месяцев назад.

[warning]Еще раз обращаю внимание, что скрипт будет работать только в Windows Server 2008 R2 или Windows 7![/warning]

PowerShell позволяет значительно автоматизировать обслуживание системы Exchange и AD. В данной статье я привел несколько скриптов, здорово пригодившихся мне при выполнении некоторых задач.

Сразу хочу поблагодарить Василия Гусева за его блог, а также всех, кто помог мне разобраться с PowerShell вообще и своими примерами сподвигшими к написанию данных скриптов в частности.

продолжить чтение…