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

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

Browsing Posts in Active Directory

Фильтрация по WMI расширяет возможности применения групповых политик и упрощает их использование. Часто требуется применять те или иные групповые политики только к ноутбукам, или только к определенной версии ОС и т.д. Приведенные фильтры позволяют легко решить эти задачи. Пишу скорее памятку для себя, чем развернутый гайд по применению.

Итак, фильтрация по версии установленной ОС:

select * from Win32_OperatingSystem where Version like "6.1" and ProductType = "1"

Данное правило отфильтровывает только рабочие станции с ОС Windows 7

Возможные значения параметра версии (Version) -

  • Windows Server 2008 R2 или Windows 7 – 6.1
  • Windows Server 2008 или Windows Vista – 6.0
  • Windows Server 2003 – 5.2
  • Windows XP – 5.1
  • Windows 2000 – 5.0

Возможные значения типа версии (ProductType) -

  • Клиентские версии Windows – 1
  • Серверные версии Windows, выступающие в роли контроллера домена – 2
  • Серверные версии Windows, не выступающие в роли контроллера домена – 3

Фильтрация по разрядности ОС:

Данное правило будет применяться только к x64 ОС

Select * from Win32_Processor where AddressWidth = "64"

Возможные значения параметра разрядности (AddressWidth) -

  • 32
  • 64

Фильтрация ноутбуков:

Я видел много вариантов фильтров для фильтрации ноутбуков, однако приведенный ниже мне нравится больше всего благодаря своей универсальности и правильности применения

Select * from Win32_Battery where BatteryStatus <> 0

Основано на предположении, что в каждом ноуте имеется батарея :) ИБП в расчет не идут

Разумеется  приведенные типы фильтрации являются каплей в море, можно фильтровать на основе установленных приложений, обновлений ОС, свободного места и много чего еще, однако на практике наиболее часто использую приведенные выше.

Кто хочет поподробнее ознакомиться с возможностью WMI, выкладываю книгу

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

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

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

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

Некоторое время назад я писАл о расширении оболочки 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]

Все (ну или почти все) системные администраторы пользуются консолью Active Directory Users and Computers (ADUC) для создания записей, перемещения компьютеров, изменения атрибутов и т.д. Мне же захотелось несколько расширить её функционал путем добавления в стандартное меню двух дополнительных пунктов, вызывающих фукции, часто часто требующиеся мне в повседневной работе — получение информации о текущем зарегистрированном на компьютере пользователе, а также соединение с этим компьютером по RDP. продолжить чтение…

Скорее не статья а маленькая напоминалка для самого себя :)

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

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

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

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

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

При установке или обновлении программы 1С Предприятие многие администраторы сталкиваются с невозможностью корректного выполнения этих заданий с помощью групповых политик. Наиболее распространена ошибка 1720:

Product: 1C:Enterprise 8.1 — Error 1720.There is a problem with this Windows Installer package. A script required for this install to complete could not be run. Contact your support personnel or package vendor. Custom action customDetectPrevVersion script error -2147467259, Msi API Error: ProductInfo,Product,Attribute Line 7, Column 5

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