Перейти к содержимому

Get aduser не распознано как имя командлета

  • автор:

Некоторые особенности PowerShell при работе с учетными записями пользователей

Я считал, что неплохо разбираюсь в powershell, но мне никогда не приходилось работать с учетными данными пользователей. Однако сейчас я в поиске работы и на одном из собеседований мне поставили тестовое задание написать скрипт, который должен был:

  1. Проверить наличие и статус (включена/отключена) учетной записи пользователя.
  2. Проверить включена ли учетная запись в группу «Администраторы»
  3. Если учетная запись отсутствует, то создать учетную запись и добавить ее в группу администраторы, проставить флаги «Запретить смену пароля пользователем» и «Срок действия пароля не ограничен»
  4. Если учетная запись существует, но отключена либо не входит в группу «Администраторы», то включить учетную запись и добавить ее в группу «Администраторы», проставить флаги «Запретить смену пароля пользователем» и «Срок действия пароля не ограничен»
  5. Скрипт не должен зависеть от языка операционной системы.
Get-User admin

И тут же получил ошибку

Get-User : Имя «Get-User» не распознано как имя командлета, функции, файла сценария или выполняемой программы.

Немного опешив, от того, что такая полезная команда и не распознала я погуглил и обнаружил, что команда Get-User работает только в консоли Powershell для Exchange. Для работы с локальными пользователями необходимо использовать Get-Localuser, а для доменных Get-Aduser. Осознав свою ошибку, я вбил:

Get-Localuser admin

И получил ответ

Name Enabled Description ---- ------- ----------- Admin True Встроенная учетная запись администратора компьютера/домена

Ну теперь проверить есть пользователь или нет, не составит большого труда, однако и тут меня ждал очередной подвох. Через условный оператор if else сделать это оказалось не так-то просто.

Дело в том, что если пользователь есть в системе, то на выход мы получаем не значение true, а целый набор данных, с именем, описанием пользователя, включена эта учетная запись или нет. А если пользователя нет, то powershell выдает ошибку. Побродив по просторам интернета, я обнаружил, что для этих целей лучше использовать оператор try сatch.

$user = 'admin' try < Get-LocalUser $user -ErrorAction Stop | Out-Null write-host пользователь $user есть -foregroundcolor Green >Catch

Я добавил переменную $user, чтобы было проще менять имена пользователя во всем скрипте. ErrorAction Stop необходим, чтобы скрипт не прервался на этом шаге из-за ошибки. Знак | разделяет шаги конвейера, а Out-Null скроет вывод текста ошибки. Так же я добавил вывод текста с подсветкой, для удобства проверки скрипта.

Далее я захотел проверить, включена или отключена учетная запись. Как я уже говорил, команда Get-LocalUser выдает целый набор данных и для проверки, мне нужно было выделить только один параметр Enabled со значением true или false. Для этого я воспользовался следующей командой:

(Get-LocalUser $user).enabled

Убедившись, что он работает, я сделал следующую проверку и добавил команду включения пользователя.

$user = 'admin' if ((Get-LocalUser $user).enabled -eq "True") < write-host учетная запись включена -foregroundcolor Green >else

Для включения пользователя, естественно необходимо запускать консоль под правами администратора.

Во втором пункте задания, необходимо было определить входит ли пользователь в группу администраторов. Для проверки наличия пользователя в той или иной группе есть команда Get-LocalGroupMember. Однако имя группы администраторов, меняется от языка операционной системы. Поэтому мне пришлось воспользоваться стандартным SID S-1-5-32-544. Проверку я также сделал через try сatch.

$user = 'admin' try < Get-LocalGroupMember -SID S-1-5-32-544 -Member $user -ErrorAction Stop | Out-Null write-host пользователь $user состоит в группе администраторы -foregroundcolor Green >Catch

В случае, если пользователь не состоит в группе, администраторов он будет в нее добавлен.
На следующем этапе, у меня стояла задача определить отключена настройка смены пароля у пользователя или нет. Тут я наткнулся на очередные подводные камни. Дело в том, что если у пользователя, срок действия пароля не ограничен, то параметр PasswordExpires не выдает никаких значений. А если эта галочка отключена, то у разных пользователей будет стоять разная дата смены пароля. Выход из этого положения я всё-таки придумал:

if ((Get-LocalUser $user).PasswordExpires -eq $null) < write-host срок действия паролья не ограничен -foregroundcolor Green >else

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

new-LocalUser -User $user -password P@ssW0rD!

Не удается привязать параметр «Password». Не удается преобразовать значение «P@ssW0rD!» типа «System.String» в тип «System.Security.SecureString».

Дело в том, что параметр -password должен использовать SecureString, вместо обычной текстовой строки. Для этого я сделал переменную $password и сконвертировал её в securestring.

$password = convertto-securestring "P@ssW0rD!" -asplaintext -force

А сам скрипт по созданию пользователя и добавления его в группу администраторов

new-LocalUser -User $user -password $password -PasswordNeverExpires:$true -AccountNeverExpires:$true Add-LocalGroupMember -SID S-1-5-32-544 -Member $user

Готовый скрипт учитывающий все условия у меня получился таким образом:

$user = 'admin' $password = convertto-securestring "P@ssW0rD!" -asplaintext -force try < Get-LocalUser $user -ErrorAction Stop | Out-Null cls write-host пользователь $user есть -foregroundcolor Green if ((Get-LocalUser $user).enabled -eq "True") < write-host учетная запись включена -foregroundcolor Green >else < write-host учетная запись отключена -foregroundcolor Red Enable-LocalUser $user write-host учетная запись включена -foregroundcolor Green >if ((Get-LocalUser $user).PasswordExpires -eq $null) < write-host срок действия паролья не ограничен -foregroundcolor Green >else < write-host срок действия пароля ограничен -foregroundcolor Red set-LocalUser $user -PasswordNeverExpires:$true write-host срок действия паролья не ограничен -foregroundcolor Green >try < Get-LocalGroupMember -SID S-1-5-32-544 -Member $user -ErrorAction Stop | Out-Null write-host пользователь $user состоит в группе администраторы -foregroundcolor Green >Catch < write-host пользователь $user не состоит в группе администраторы -foregroundcolor Red Add-LocalGroupMember -SID S-1-5-32-544 -Member $user write-host пользователь $user состоит в группе администраторы -foregroundcolor Green >> Catch

Однако хранение пароля администратора в скрипте — это не лучшая практика с точки зрения безопасности. Для этого можно использовать хэш пароля, а не сам пароль.

$user = 'admin1' $hash = "01000000d08c9ddf0115d1118c7a00c04fc297eb0100000048baf1b47a72d845b4eeda8659da9fd70000000002000000000010660000000100002000000004d2a3bf03aac92c2e172dc002d1fe8759da4655850462aface5c25f52921e05000000000e8000000002000020000000bfa652b6f7cc6845e3cee1831b54ab93dc272d0b2203024c3de8bc4789a2698a10000000923fb50dcf01125913534d0c1ba6d827400000002757df7d8a8b39c8e84b81323acff1d72419580a0022cf610926e5f081a2e895320088d482eb407f8157aad82f091abee7427b357e871d12238a8f74131238e7" $hash $password = ConvertTo-SecureString -String $hash $password new-LocalUser -User $user -password $password -PasswordNeverExpires:$true -AccountNeverExpires:$true Add-LocalGroupMember -SID S-1-5-32-544 -Member $user 

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

$Secure = Read-Host -AsSecureString $Secure $hash = ConvertFrom-SecureString -SecureString $Secure $hash

Который запросит ввод пароля с клавиатуры.

И маленький бонус для вывода всех отключенных записей

Get-LocalUser | Where-Object

Надеюсь, потраченное мною время поможет кому-то в работе. Да и для себя будет полезно не забыть этот бесценный опыт.

Get-ADGroupMember возвращает ошибку для локальной группы домена членам из удаленных лесов

Эта статья поможет устранить ошибку Get-ADGroupMember , которая возникает при выполнении командлета в сценарии, где группа имеет участника из удаленного леса.

Применяется к: Windows Server 2012 R2
Исходный номер базы знаний: 3171600

Симптомы

Предположим, что вы используете Get-ADGroupMember командлет для идентификации членов группы в доменные службы Active Directory (AD DS). Однако при выполнении командлета для локальной группы домена возвращается следующую ошибку:

Get-ADGroupMember -verbose -identity «CN=Test-Local1,OU=Test Accounts,DC=contoso,DC=com»
Get-ADGroupMember: произошла неуказанная ошибка
В строке:1 char:1
+ Get-ADGroupMember -verbose -identity «CN=Test-Local1,OU=Test Accounts,DC=contoso .
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (CN=Test-Local1. bertm-w7,DC=com:ADGroup) [Get-ADGroupMember], ADExceptionon + FullyQualifiedErrorId : ActiveDirectoryServer:0,Microsoft.ActiveDirectory.Management.Commands.GetADGroupMember

При одностороннем Get-ADGroupMember доверии при использовании командлета в группе из доверенного леса вы получаете следующие ошибки, если группа содержит участников из доверенного леса:

  • «Произошла неуказанная ошибка»
  • «Серверу не удалось обработать запрос из-за внутренней ошибки»

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

Причина

Эта проблема возникает, если группа содержит участника из другого леса, учетная запись которого была удалена из леса учетной записи. Член представлен в локальном домене субъектом внешней безопасности (FSP). В экспорте LDIFDE группы членство отображается следующим образом:

dn: CN=Test-Local1,OU=Test Accounts,DC=contoso,DC=com

При удалении исходной учетной записи с идентификатором безопасности FSP не обновляется и не удаляется с учетом этого удаления. Необходимо вручную убедиться, что эти ссылки FSP удалены.

Решение

Чтобы устранить эту проблему, включите ведение журнала для запросов на разрешение, которые касаются этих идентификаторов безопасности и выполняются веб-службой Active Directory. Таким образом можно определить учетные записи, для которых не удается выполнить разрешение. Для этого выполните командлет Get-ADGroupMember contoso.com на контроллере домена (где заполнитель представляет указанный домен).

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

Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa" -Name LspDbgInfoLevel -Value 0x800 -Type dword -Force Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa" -Name LspDbgTraceOptions -Value 0x1 -Type dword -Force 

Не забудьте отключить ведение журнала при наличии журнала:

Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa" -Name LspDbgInfoLevel -Value 0x0 -Type dword -Force 

Вы увидите файл с именем c:\windows\debug\lsp.log, который отслеживает попытки SID-Name разрешения. При повторном запуске командлета на контроллере домена, где был выполнен командлет, файл регистрирует сбои и будет выглядеть следующим образом:

LspDsLookup — ввод функции LsapLookupSidsLspDsLookup — запрос LookupSids для 1 идентификаторов безопасности с level=1, mappedcount=0, options=0x0, clientRevision=2 обрабатывается. Идентификаторы безопасности: LspDsLookup — Sids[ 0 ] = S-1-5-21-3110691720-3620623707-1182478234-698540LspDsLookup — Requestor details: Local Machine, Process Process Name = C:\Windows\ADWS\Microsoft.ActiveDirectory.WebServices.exe LspDsLookup — Entering function LsapDbLookupSidsUsingIdentityCacheLspDsLookup — 1 sids remain unmappedLspDsLookup — Exiting function LsapDbLookupSidsUsingIdentityCache с состоянием 0x0LspDsLookup — запрос цепочки LookupSids (с помощью Netlogon) к \ dc3.northwindtraders.com для 1 sids будет выполнен с level=6, mappedcount=0, options=0x0, serverRevision=0. Идентификаторы безопасности: LspDsLookup — Sids[ 0 ] = S-1-5-21-3110691720-3620623707-1182478234-698540 LspDsLookup — Lookup request (using Netlogon) to \ dc3.northwindtraders.com returned with 0xc0000073 and mappedcount=0, serverRevision=0LspDsLookup — выход из функции LsapLookupSids с состоянием 0xc0000073

Проверьте наличие следующих элементов, чтобы убедиться, что это соответствующий раздел для этой проблемы (в предыдущем примере выходных данных):

  • Процесс выполняется C:\Windows\ADWS\Microsoft.ActiveDirectory.WebServices.exe.
  • Например, запрос отправляется контроллеру домена в другом лесу northwindtraders.com .
  • Код возврата — это 0xc0000073, что равно STATUS_NONE_MAPPED.

Чтобы найти объект FSP, выполните следующую команду (замените доменные имена и идентификаторы безопасности):

get-AdObject -Searchbase "CN=ForeignSecurityPrincipals,DC=contoso,DC=com" -ldapfilter "(cn=S-1-5-21-3110691720-3620623707-1182478234-698540)" 

Исходный объект для этого FSP больше не существует, поэтому его можно безопасно удалить. Это также приведет к удалению из всех групп, в которых он входит:

get-AdObject -Searchbase "CN=ForeignSecurityPrincipals,DC=contoso,DC=com" -ldapfilter "(cn=S-1-5-21-3110691720-3620623707-1182478234-698540)" | Remove-AdObject -Confirm:$false 

Get aduser не распознано как имя командлета

Сообщения: 2
Благодарности: 0

Необходим такой скрипт:
Для каждого пользователя Active Directory (включая вложенные OU) провести проверку на заполнение поля e-mail.
Если в этом поле уже есть хоть один символ, то пропускаем.
Иначе надо заполнить это поле по следующему принципу:
берем значение «user logon name» текущего пользователя и конкатенируем без пробела с константой «@mail.ru»

Большое спасибо всем откликнувшимся!

Сообщения: 1259
Благодарности: 861

Get-ADUser -Filter | Foreach
Это сообщение посчитали полезным следующие участники:

Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Сообщения: 2
Благодарности: 0

Спасибо!
Знание — сила!

Сообщения: 21
Благодарности: 0

не сработало. На контроллере домена создал файл ADfillemails.vbs , вставил в него эту строку.. ничего не произошло..

Windows PowerShell
(C) Корпорация Майкрософт, 2009. Все права защищены.

PS F:\Users\Администратор.IPIP> Get-ADUser -Filter | Foreach $_ -EmailAddress «$($_.samaccountname)@kamastretch.com»>
Имя «Get-ADUser» не распознано как имя командлета, функции, файла скрипта или выполняемой программы. Проверьте правильн
ость написания имени, а также наличие и правильность пути, после чего повторите попытку.
строка:1 знак:11
+ Get-ADUser <<<< -Filter | Foreach samaccountname)@kamastretch.com">
+ CategoryInfo : ObjectNotFound: (Get-ADUser:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException

Get-ADComputer: получить информацию о компьютерах Active Directory через PowerShell

date

05.10.2022

user

itpro

directory

PowerShell

comments

комментариев 59

Для получения различной информации об учетных записях компьютера (серверах и рабочих станциях) в домене Active Directory можно использовать PowerShell командлет Get-ADComputer. Это один из наиболее полезных командлетов для выборки и поиска компьютеров по разным критериям в домене AD

Допустим, ваша задача – найти в Active Directory все неактивные компьютеры, которые не регистрировались в домене более 120 дней и заблокировать учетные записи этих компьютеров.

Прежде чем приступить к работе с командлетом Get-ADComputer, необходимо установить и импортировать модуль Active Directory Module для Windows PowerShell.

Совет. В версии PowerShell 3.0 (представлен в Windows Server 2012) и выше этот модуль подключается по умолчанию при установке компонента Remote Server Administration Tools -> Role Administration Tools -> AD DS and AD LDS Tools -> Active Directory модуль для Windows PowerShell. Чтобы использовать командлет Get-ADComputer в клиентских Windows 11 или 10 нужно скачать и установить компонент RSAT для вашей версии ОС и включить модуль AD-PowerShell из панели управления или командой:
Add-WindowsCapability –online –Name “Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0”

Модуль Active Directory для Windows PowerShell

Вывести атрибуты компьютера с помощью Get-ADComputer

Справка о параметрах командлета Get-ADComputer вызывается стандартно с помощью Get-Help:

синтаксис командлета Get-ADComputer

Для получения информации из AD с помощью командлетов модуля AD для Powershell не обязательно иметь права администратора домена, достаточно чтобы учетная запись под которой запускается командлет входила в группу пользователей домена (Authenticated Users / Domain Users).

Чтобы получить информацию о доменной учетной записи конкретного компьютера или сервера, укажите его имя в качестве аргумента параметра —Identity:

Get-ADComputer -Identity SRV-DB01

get-adcomputer identity вывести базовую информацию о компьютере в домене Active Directory

DistinguishedName : CN=DB01,OU=Servers,OU=MSK,DC=winitpro,DC=ru DNSHostName : DB01.winitpro.ru Enabled : True Name : DB01 ObjectClass : computer ObjectGUID : 1234567c-13f8-4a2c-8b00-b30a32324103 SamAccountName : DB01$ SID : S-1-5-21-3243682314-1360322815-2238451561-4318 UserPrincipalName :

Командлет вернул только базовые свойства объекта Computer из AD . Нас интересует время последней регистрации компьютера в домене AD, но этой информация в выводе команды нет. Выведем все доступные свойства (атрибуты) данного компьютера из Active Directory:

get-adcomputer вывести все свойства компьютера в AD

Get-ADComputer -Identity SRV-DB01 -Properties *

Этот список атрибутов компьютера также доступен в графической консоли Active Directory Users and Computers ( dsa.msc ) на вкладке редактора атрибутов.

список атрибутов компьютера в консоли ADUC

С помощью Get-Member можно получить список всех свойств класса Computer в AD:

Get-ADComputer -Filter * -Properties * | Get-Member

Как вы видите, время последнего входа данного компьютера в сеть указано в атрибуте компьютера LastLogonDate – 6/2/2022 3:59:30 AM.

Командлет Get-ADComputer позволяет вывести в результатах команды любые из свойств компьютера. Уберем всю лишнюю информацию, оставив в выводе только значения атрибутов Name и LastLogonDate.

Get-ADComputer -identity SRV-DB01 -Properties * | FT Name, LastLogonDate -Autosize

Итак, мы получили данные о последнем времени регистрации в домене для одного компьютера. Теперь нам нужно изменить команду так, чтобы она возвращала информацию о времени последней регистрации в сети для всех компьютеров домена. Для этого заменим параметр –Identity на —Filter:

get-adcomputer вывести врямя посленей загрузки для всех компьютеров

Get-ADComputer -Filter * -Properties * | FT Name, LastLogonDate -Autosize

Мы получили таблицу, которая содержит только 2 поля: имя компьютера и дата LastLogonData. Вы можете добавить в эту таблицу другие поля объекта Computer из AD. Чтобы вывести данные о компьютерах в определенном контейнере домена (OU), воспользуйтесь параметром SearchBase:
Get-ADComputer -SearchBase ‘OU=Moscow,DC=winitpro,DC=loc’ -Filter * -Properties * | FT Name, LastLogonDate -Autosize

Отсортируем результаты запроса по времени последнего логина в сеть (поле LastLogonDate) с помощью команды Sort:

Get-ADComputer -Filter * -Properties * | Sort LastLogonDate | FT Name, LastLogonDate -Autosize

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

С помощью Get-Date получим в переменной значение текущей даты и вычтем из текущей даты 120 дней:

Полученную переменную с датой можно использовать в качестве фильтра запроса Get-ADComputer по полю LastLogonDate

Get-ADComputer -Properties LastLogonDate -Filter | Sort LastLogonDate | FT Name, LastLogonDate -Autosize

Таким образом, мы получили список неактивных компьютеров, которые не регистрировались в домене более 120 дней. С помощью командлета Set-ADComputer или Disable-ADAccount вы можете отключить эти учетные записи.

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

Get-ADComputer -Properties LastLogonDate -Filter | Set-ADComputer -Enabled $false -whatif

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

Get-ADComputer -Properties LastLogonDate -Filter | Set-ADComputer -Enabled $false

Совет. Список заблокированных, отключенных и неактивных компьютеров и пользователей домена можно получить также с помощью отдельного командлета Search-ADAccount.

Использование фильтров в Get-ADComputer

С помощью аргумента -Filter командлета Get-ADComputer вы можете выбрать несколько компьютеров Active Directory по определенным критериями. Здесь можно использовать подстановочные знаки (wildcards) и логические операторы сравнения. В качестве фильтров можно использовать только базовые атрибуты компьютера.

Если вам нужно использовать фильтры по расширенными атрибутам компьютеров, их можно задавать через where-object. Несколько примеров есть в следующем разделе статьи.

Получить общее количество активных (незаблокированных) компьютеров в Active Directory:

Вы можете использовать множественные фильтры для поиска компьютеров по нескольким параметрам сразу. Для этого используются логические операторы сравнения PowerShell (-and, -eq , -ne , -gt , -ge , -lt , -le , -like , -notlike , -and , -or , и т.д.).

Посчитать количество серверов с Windows Server в домене:

посчитать количество компьютеров и серверов в AD

Получить список компьютеров в определенном OU, имена которых начинаются с BuhPC:

Get-ADComputer -Filter -SearchBase ‘OU=Moscow,DC=winitpro,DC=loc’ -Properties IPv4Address | Format-table Name,DNSHostName,IPv4Address | ft -Wrap –Auto

При поиске по OU вы можете использовать дополнительный параметр -SearchScope 1, который означает, что нужно искать только в корневом разделе. Параметр -SearchScope 2 означает рекурсивный поиск компьютеров во всех вложенных OU.

Выбрать все рабочие станции с ОС Windows 10:

Получить список серверов в домене с версией ОС, IP адресом и установленным Service Pack:
Get-ADComputer -Filter ‘operatingsystem -like «*Windows server*» -and enabled -eq «true»‘ -Properties Name,Operatingsystem, OperatingSystemVersion, OperatingSystemServicePack,IPv4Address | Sort-Object -Property Operatingsystem | Select-Object -Property Name,Operatingsystem, OperatingSystemVersion, OperatingSystemServicePack, IPv4Address| ft -Wrap –Auto

На выходе получили такую красивую таблицу со списком Windows Server в AD.

вывести версии windowsи ip адреса в домене с помощью powershell

Полезные примеры использования командлета Get-ADComputer

Ниже представлены еще несколько полезных примеров команд с использованием командлета Get-ADComputer, которые можно использовать для выборки и поиска компьютеров домена по определенными критериям.
Атрибут -LDAPFilter позволяет использовать в качестве параметра командлета Get-ADComputer различные LDAP запросы, например:

Get-ADComputer -LDAPFilter «(name=*db*)»|ft

Выбрать заблокированные компьютеры в определенном OU:

Get-ADComputer -filter * -SearchBase ‘OU=Computers, dc=winitpro,dc=loc’ | Where-Object

Чтобы удалить все аккаунты компьютеров в домене, не авторизовавшиеся в домене более 6 месяцев, можете воспользоваться командой:

get-adcomputer -properties lastLogonDate -filter * | where < $_.lastLogonDate -lt (get-date).addmonths(-6) >| Remove-ADComputer

Вывести время последней смены пароля компьютера в Active Directory. По умолчанию пароль должен меняться компьютером автоматически раз в 30 дней, если пароль компьютера не совпадает с паролем в AD, доверительные отношения компьютера с доменом будут нарушены:

Get-ADComputer –Identity pc123456 -Properties PasswordLastSet

Результат выполнения команды Get-ADComputer можно выгрузить в текстовый файл:

Get-ADComputer -Filter < OperatingSystem -Like '*Windows Server 2019*' >-Properties OperatingSystem | Select DNSHostName, OperatingSystem | Format-Table -AutoSize C:\Script\server_system.txt

Также вы можете получить выборку компьютеров и экспортировать его в CSV файл:

Get-ADComputer -Filter * -Property * | Select-Object Name,OperatingSystem,OperatingSystemServicePack | Export-CSV All-Windows.csv -NoTypeInformation -Encoding UTF8

Или получить HTML файл отчета со списком компьютеров и нужных атрибутов компьютера:

Get-ADComputer -Filter -Properties * | Select-Object Name,OperatingSystem | ConvertTo-Html | Out-File C:\ps\ad_computer.html

html отчеи по компьютерам в домене active directory

Можно удалено получить различную информацию с компьютеров AD через WMI (или CIM). Например, вывести серийные номера всех серверов в домене:

Get-ADComputer -Filter ‘operatingsystem -like «*Windows server*» -and enabled -eq «true»‘ | Select-Object Name | Foreach-Object

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

$Computers = Get-ADComputer -Filter
Foreach ($Computer in $Computers)
$Hostname = $Computer.Name
$ComputerInfo = (Get-WmiObject -Computername $Hostname Win32_ComputerSystem)
$Manufacturer = $Computer.Manufacturer
$Model = $Computer.Model
Write-Host «Name: $Hostname»
Write-Host «Manufacturer: $Manufacturer»
Write-Host «Model: $Model»
Write-Host » «
$Content = «$Hostname;$Manufacturer;$Model»
Add-Content -Value $Content -Path «C:\PS\ServersInfo.txt»
>

Либо можно использовать более короткий синтаксис цикла. Допустим нам нужно выполнить определенную команду на всех компьютерах в определенном OU. В этом примере мы с помощью Invoke-Command выполним на всех серверах команду обновления настроек групповых политик:

По аналогии вы можете получить различную полезную информацию со всех компьютеров в домене:

  • Проверить статус активации Windows на компьютерах
  • Проверить свободное место на дисках
  • Проверить и обновить версию PowerShell
  • Собрать сетевые настройки компьютеров и серверов
  • Получить имена пользователей со всех компьютеров

С помощью Get-ADComputer и логон скриптов PowerShell вы можете контролировать различные параметры компьютера или хранить различную полезную информацию в атрибутах компьютера в AD (можно например добавить имя пользователя в описание компьютера).

Я, например, контролирую состояние агента SCCM на компьютерах пользователей. При загрузке каждого компьютера на нем отрабатывает логон скрипт, который с помощью Set-ADComputer сохраняет состояние службы ccmexec в свободный атрибут компьютера — extensionAttribute10.

Затем с помощью следующей команды я могу найти компьютеры, на которых отсутствует или не запушена служба CCMExec:

get-adcomputer -filter -SearchBase “OU=Computers,OU=MSK,DC=winitpro,DC=ru” -properties dNSHostName,extensionAttribute10,LastLogonDate |select-object dNSHostName,extensionAttribute10,LastLogonDate

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

Для получения информации об учетных записях пользователей AD используется другой командлет — Get-ADUser .

Предыдущая статьяПредыдущая статья Следующая статья Следующая статья

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *