Метка: PowerShell

  • Использование модуля Active Directory PowerShell без установки RSAT

    В одной из предыдущих статей мы показывали, как использовать командлет Set-ADComputer в логон-скрипте для сохранения информации о текущем пользователе в свойствах каждого компьютера в AD. Один из комментаторов вполне резонно отметил, что в таком случае придется устанавливать RSAT с модулем (далее…)

  • Set-ADComputer: изменить атрибуты компьютера в Active Directory

    При присоединении компьютера к домену Active Directory для него создается отдельная учетная запись типа Computer. У компьютера в AD есть набор обязательных атрибутов: sAMAccountName , distinguishedName , SID, версия и билд Windows ( operatingSystem , operatingSystemVersion ), userAccountControl, lastLogonTimeStamp и т.д. В необязательных атрибутах компьютера можно хранить информацию о его владельце, местоположении, описании, IP адресе. В этой статье мы покажем, как изменить значения атрибутов у учетной записи компьютера AD с помощью ADUC и PowerShell.

    Изменить свойства компьютера с помощью консоли Active Directory (ADUC)

    Администратор может изменить атрибуты компьютер в Active Directory с помощью графической консоли ADUC.

    Откройте консоль Active Directory Users and Computers ( dsa.msc ), найдите учетную запись нужного компьютера (как искать объекты в AD) и откройте его свойства. Здесь вы можете задать описание компьютера (поле Description ), указать местоположение, назначить пользователя, ответственного за это компьютер ( Managed by ).

    Вы можете отредактировать значения остальных атрибутов компьютера на вкладке Attribute Editor. Будьте внимательными при редактировании обязательных атрибутов компьютера. Редактор атрибутов объекта в AD не проверяет корректность введенных данных (проверяется только тип данных и длина значения), поэтому при некорректных значения атрибутов компьютера, он может потерять доверительные отношения с доменом.

    Изменить значение атрибута компьютера в AD с помощью PowerShell

    Командлет Set-ADComputer (из модуля Active Directory для PowerShell) позволяет изменить атрибуты учетной записи компьютера в Active Directory.

    Например, вы хотите добавить в свойства компьютера в AD его, название компании и департамента, которому он принадлежит.

    Чтобы изменить значение основных атрибутов компьютера, можно использовать встроенные параметры, таки как -Description , -DisplayName , -DNSHostName , -HomePage , -Location и т.д., Например указать местоположение компьютера:

    Set-ADComputer –Identity SRV-MAN01 –Location "Spb/Russia"

    Также можно изменить значение любого атрибута с помощью параметров Add , Replace , Clear и Remove .

    Задать новое описание учетной записи компьютера:

    Set-ADComputer -Identity SRV-MAN01 -Add @{"description"="Сервер управления инфраструктурой"}

    Если нужно задать несколько параметров компьютера, воспользуйтесь такой конструкцией PowerShell:

    $Server = Get-ADComputer -Identity SRV-MAN01
    $Server.company = "contoso"
    $Server.department = "IT"
    Set-ADComputer -Instance $Server

    С помощью Get-ADComputer можно получить текущие значения атрибутов:

    Get-ADComputer SRV-MAN01 -properties *|select-object dNSHostName,operatingSystem,company,department, description

    Теперь вы можете выбрать все компьютеры в AD, которые относятся к департаменту IT компании Contoso:

    Get-ADComputer -Filter {(company -eq 'contoso') -and (department -eq "IT")} -properties *|select-object dNSHostName,operatingSystem,company,department,description | ft

    С помощью Set-ADComputer вы также можете отключить или включить учетную запись компьютера в AD:

    Set-ADComputer srv-man01 -Enabled $false

    Как добавить имя пользователя и IP адрес в свойства компьютера в AD?

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

    IP адрес компьютера мы будем хранить в атрибуте description, а имя пользователя, который работает за компьютером – в атрибуте ManagedBy.

    Делегируйте права группе Domain Users на OU с компьютерами на изменение значений в полях объектов типа Computer: ManagedBy и description (Write Description + Write Managed By).

    Теперь создайте новую GPO со следующим Logon скриптом PowerShell (User Configuration -> Policies -> Windows Settings -> Scripts -> Logon), который должен запускаться при входе пользователя в систему:

    $curhostname=$env:computername
    $env:HostIP = (
    Get-NetIPConfiguration |
    Where-Object {
    $_.IPv4DefaultGateway -ne $null -and
    $_.NetAdapter.Status -ne "Disconnected"
    }
    ).IPv4Address.IPAddress
    $currus_cn=(get-aduser $env:UserName -properties *).DistinguishedName
    $ADComp = Get-ADComputer -Identity $curhostname
    $ADComp.ManagedBy = $currus_cn
    $ADComp.description = $env:HostIP
    Set-ADComputer -Instance $ADComp

    Данный PowerShell скрипт будет запускаться при входе пользователя, определять имя и IP адрес компьютера, CN пользователя и сохранит их в свойства компьютера в AD. Для работы скрипта на компьютерах должен быть установлен модуль AD PowerShell.

    Прилинкуйте GPO на OU с компьютерами и включить замыкание групповой политики Configure user Group Policy Loopback Processing mode (см. здесь).

    В консоли ADUC теперь отображаются IP адреса компьютеров, а в свойствах компьютера на вкладке Managed By теперь есть активная ссылка на учетную запись пользователя, который последним входил на компьютер.

    Теперь вы можете быстро найти компьютеры в домене по IP адресу:

    get-adcomputer -filter {description -like "10.10.1.*"} -properties *|select name,description,managedBy

    Или можно найти все компьютеры в домене, на которых залогинен конкретный пользователь (командлет Get-AdUser используется для получения DistinguishedName пользователя):
    $user='daivanov'
    $user_cn=(get-aduser $user -properties *).DistinguishedName
    Get-ADComputer -Filter "ManagedBy -eq '$user_cn'" -properties *|select name,description,managedBy|ft

    Аналогичным образом вы можете записать в свойства аккаунтов компьютеров в AD любую информацию о рабочей станции или пользователе, и использовать ее для поиска (выборки) компьютеров в AD. В статье по ссылке описано как записать в описание компьютера в AD информацию о модели, серийном номере оборудования.


  • Get-ADDomainController: получаем информацию о контроллерах домена AD с помощью PowerShell

    Командлет Get-ADDomainController можно использовать для получения информации о контроллерах домена в Active Directory. Данный командлет входит в состав модуля Active Directory для PowerShell и требует установки отдельного компонента RSAT (в Windows 10 1809 и выше RSAT устанавливается по-новому).

    Командлет Get-ADDomainController

    При запуске Get-ADDomainController без параметров командлет выводит информацию о текущем контроллере домена (LogonServer), который используется данным компьютером для аутентификации (DC выбирается при загрузке в соответствии с топологией сайтов AD).

    Командлет вернул все поля с информацией о контроллере домена, доступной в AD.

    ComputerObjectDN : CN=mskDC01,OU=Domain Controllers,DC=corp,DC=winitpro,DC=ru DefaultPartition : DC=corp,DC=winitpro,DC=ru Domain : corp.winitpro.ru Enabled : True Forest : winitpro.ru HostName : mskDC01.corp.winitpro.ru InvocationId : 96234a-7fc6-4a32-9e62-3b32343ab4ad IPv4Address : 10.1.10.6 IPv6Address : 
    IsGlobalCatalog : True IsReadOnly : False LdapPort : 389 Name : mskDC01 NTDSSettingsObjectDN : CN=NTDS Settings,CN=mskDC01,CN=Servers,CN=MskCenter,CN=Sites,CN=Configuration,DC=winitpro,DC =ru OperatingSystem : Windows Server 2008 R2 Standard OperatingSystemHotfix : OperatingSystemServicePack : Service Pack 1 OperatingSystemVersion : 6.1 (7601) OperationMasterRoles : {} Partitions : {DC=ForestDnsZones,DC=winitpro,DC=ru, DC=DomainDnsZones,DC=corp,DC=winitpro,DC=ru, CN=Schema,CN=Configuration,DC=winitpro,DC=ru...} ServerObjectDN : CN=mskDC01,CN=Servers,CN=MskCenter,CN=Sites,CN=Configuration,DC=winitpro,DC=ru ServerObjectGuid : 8052323-e294-4430-a326-9553234431d6 Site : MskCenter SslPort : 636

    Также вы можете найти контроллер домена, к которому должен относится ваш компьютер через механизм DCLocator:

    Get-ADDomainController –Discover

    Вы можете найти ближайший доступный DC с активной ролью AD Web Services:

    Get-ADDomainController –ForceDiscover -Discover -Service ADWS

    Параметр Service можно использовать, чтобы найти PDC в домене:

    Get-ADDomainController -Discover -Service PrimaryDC

    Если ваш контроллер домена не найден или не отвечает, вы можете найти контроллер домена в ближайшем сайте AD (определяется по весу межсайтовых связей):

    Get-ADDomainController –Discover –ForceDiscover -NextClosestSite

    Чтобы вывести список все контроллеров домена в текущем домене, выполните:

    Get-ADDomainController -Filter * | ft

    Посчитать количество контроллеров домена в AD можно с помощью команды:

    Get-ADDomainController -Filter * | Measure-Object

    Выведем более удобную таблицу, в которой указаны все контроллеры домена с их именем, IP адресом, версией ОС и именем сайта AD:

    Get-ADDomainController -Filter *| Select Name, ipv4Address, OperatingSystem, site | Sort-Object name

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

    Get-ADDomainController -Filter * -server dc01.contoso.cpm | Select Name, ipv4Address, IsGlobalCatalog, Site

    Используем Get-ADDomainController для выборки контроллеров домена по условиям

    Рассмотрим несколько полезных командлетов, которые можно использовать для получения списка контролеров домена в AD по определенным критериям.

    Найти контроллер домена по его IP адресу:

    Get-ADDomainController -Identity "10.1.1.120"

    Найти все DC, в имени которых есть символы DC04:

    Get-ADDomainController -Filter { name -like "*dc04*"} | Select Name, ipv4Address, OperatingSystem, site

    Поиск всех доступных DC в определенном сайте:

    Get-ADDomainController -Discover -ForceDiscover -Site "Site-Name"

    Вывести список DC в сайтах, имена которых начинаются с Mos*:

    Get-ADDomainController -Filter {site -like "Mos*"} | Select Name, ipv4Address, OperatingSystem, site

    Вывести список всех Read Only контроллеров домена:

    Get-ADDomainController -Filter { IsReadOnly -eq $true} | Select Name, ipv4Address, OperatingSystem, site

    Найти DC в сайте “Site Name”, на которых включена роль Global Catalog:

    Get-ADDomainController -Filter {site -eq "Site Name" -and IsGlobalCatalog -eq $true} | Select Name, ipv4Address, OperatingSystem, site

    PowerShell скрипт проверки доступности всех контроллеров домена

    Следующая конструкция позволяет перебрать все контроллеры домена в Active Directory и выполнить для каждого из них определенное действие:

    $AllDCs = Get-ADDomainController -Filter *
    ForEach($DC in $AllDCs)
    {
    do something
    }

    Ниже приведен пример простого PowerShell скрипта, который проверяет доступность LDAPS порта (TCP 636) на каждом DC в домене с помощью командлета Test-NetConnection. Если LDAPS порт на DC не доступен, появляется предупреждение.

    $AllDCs = Get-ADDomainController -Filter * | Select-Object Hostname,Ipv4address,isGlobalCatalog,Site,Forest,OperatingSystem
    ForEach($DC in $AllDCs)
    {
    $PortResult=Test-NetConnection -ComputerName $DC.Hostname -Port 636 -InformationLevel Quiet
    if ($PortResult -ne "$True"){
    write-host $DC.Hostname " не доступен" -BackgroundColor Red -ForegroundColor White
    }else {
    write-host $DC.Hostname " доступен" }
    }

    Получился простой скрипт мониторинга доступности DC. Ест еще различные сценарии перебора всех DC в домене. В предыдущих статьях мы уже показывали, как использовать Get-ADDomainController для поиска определенного события в журналах на всех контролерах домена. Например, для: поиска события блокировки учетной записи пользователя, поиска событий NTLMv1 аутентификации, поиска событий добавления пользователя в группу AD и т.д.


  • Используем модуль Active Directory PowerShell для администрирования домена

    Любой системный администратор Windows должен уметь пользоваться не только графическими оснастками AD (чаще всего это ADUC – Active Directory Users and Computer), но и командлетами PowerShell для выполнения повседневных задач администрирования (далее…)

  • Внедряем динамические группы в Active Directory с помощью PowerShell

    В некоторых сценариях для предоставления доступа в Active Directory удобно было бы использовать динамические группы безопасности. Идея динамической группы в том, что ее состав автоматически формируется на основе заданных параметров. Например, местоположении пользователя (город, OU), работе в (далее…)

  • Делегирование административных полномочий в Active Directory

    В этой статье мы рассмотрим особенности делегирования полномочий в домене Active Directory. Делегирование позволяет предоставить право на выполнение некоторых задач управления AD обычным пользователям домена, не включая их в привилегированные доменные группы, такие как Domain Admins, Account (далее…)

  • Изменить (сбросить) пароль пользователя Active Directory из ADUC и PowerShell

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

  • Как запретить/разрешить пользователям вход на определенные компьютеры в домене AD?

    По умолчанию пользователи Active Directory могут локально входить под своими учетками на любой доменный компьютер в сети. Это обеспечивается за счет того, что все новые пользователи создаваемые в Active Directory автоматически добавляются в группу Domain Users. А группа Domain Users в свою очередь (далее…)

  • Расшифровка значения атрибута userAccountControl в Active Directory

    UserAccountControl является одним из важных атрибутов учетных записей пользователей и компьютеров в Active Directory. Атрибут UserAccountControl определяет состояние учетной записи в домене: активна ли учетная запись или заблокирована, включена ли опция смены пароля при следующем входе, разрешено (далее…)

  • Оповещение при добавлении пользователя в группу администраторов Active Directory

    Если инфраструктурой домена Active Directory управляет несколько администраторов, бывает трудно отследить кто конкретно внес изменения, добавил или удалил пользователя из группы безопасности. В этой статье мы покажем, как с помощью политика аудита и скрипта PowerShell настроить отправку (далее…)