Get adcomputer не распознано как имя командлета
Перейти к содержимому

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

  • автор:

The term 'get-ADComputer' is not recognized as the name of a cmdlet

I’m watching this tutorial (https://www.youtube.com/watch?v=UVUd9_k9C6A&t=1640s) about PowerShell. At 2:57:50, the instructor runs Get-ADComputer . But when I try to run the same command, I get the following error message:

How can I make it work?

Know someone who can answer? Share a link to this question via email, Twitter, or Facebook.

    The Overflow Blog
Related
Hot Network Questions

Subscribe to RSS

To subscribe to this RSS feed, copy and paste this URL into your RSS reader.

Site design / logo © 2023 Stack Exchange Inc; user contributions licensed under CC BY-SA . rev 2023.3.3.43278

By clicking “Accept all cookies”, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy.

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

Командлет Get-ADObject может не запускаться в Windows Server 2008 R2 , несмотря на то, что в документации Microsoft написано, что он присутсвует в данном дистрибутиве Windows.

При запуске Get-ADObject появляется ошибка:

Имя "Get-ADObject" не распознано как имя командлета, функции, файла скрипта или выполняемой программы. Проверьте правильность написания имени, а также наличие и правильность пути, после чего повторите попытку.

+ CategoryInfo : ObjectNotFound: (Get-ADObject:String) [], CommandNotFoundException

На самом деле этот командлет есть, и располагается он в инструменте "Active Directory Administration with Windows PowerShell" ( https://technet.microsoft.com/ru-RU/library/dd378937.aspx ). По опыту, данный инструмент нормально работает как минимум в Power Shell v.2.

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

После этой команды все командлеты для управления доменом станут доступны. Доступны они будут в текущем сеансе Windows Power Shell.

Не распознано как имя командлета Что делать

ПК

PowerShell может быть пугающим инструментом. Иногда что-то может пойти не так, а когда это происходит, сообщения об ошибках часто невероятно загадочны и далеко не всегда полезны. Термин ‘term is not recognized as the name of a cmdlet’ — это, пожалуй, самая распространенная ошибка, которую пользователи получают в PowerShell, и она легко может привести к куче потраченных впустую часов, заполненных неудачными попытками выяснить, в чем причина.

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

Ошибки правописания

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

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

Не распознано как имя командлета Что делатьОшибки пути

Использование неправильного пути — более распространенная ошибка, чем вы думаете. Например, если вы попытаетесь запустить скрипт, перейдя в папку scripts и запустив его, он сработает. В противном случае, если вы попытаетесь выполнить его из корневой папки, может возникнуть ошибка командлета.

Аналогично, вы можете получить ошибку «не распознано имя командлета», если вызовете внешнюю функцию, не указав предварительно путь. Если вы получаете ту же ошибку, даже если функция существует в том же сценарии, скорее всего, причина в ошибке написания или пути. Избежать этой проблемы можно, сделав функцию глобальной (добавьте слово ‘global’ к имени функции).

Пропущенные модули

Если ни один из двух предыдущих вариантов возникновения ошибки не подходит к вашей проблеме (но, пожалуйста, тщательно проверьте наличие вышеперечисленных причин), сообщение об ошибке команды может появиться из-за того, что не загружен определенный модуль. Модули — это наборы команд, которые расширяют функциональность PowerShell. Обычно команда в модуле связана с определенным продуктом, ролью Windows или функцией. Например, модуль содержит команды, связанные с Hyper-V, Microsoft Azure или Exchange Server.

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

Другие ошибки

Хотя три вышеупомянутые ошибки являются наиболее распространенными причинами ошибок командлета, существует также множество других. Неправильные диапазоны функций тоже входят в их число, но многие из этих ошибок, как правило, специфичны для конкретного компьютера. Возможно, вам поможет поиск решения с помощью команды «[введите точную ошибку]» в Google. Скорее всего, другие люди сталкиваются с такой же ошибкой, и решение может уже существовать.

Когда речь идет о PowerShell, никогда не следует воздерживаться от обращения к Google, даже если речь идет о простой орфографической ошибке.

PowerShell и Windows

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

Не распознано как имя командлета Что делать

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

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

date05.10.2022
useritpro
directoryPowerShell
commentsкомментария 54

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

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

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

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

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

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

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

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

Get-ADComputer -Identity SRV-DB01

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

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

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

Get-ADComputer -Identity SRV-DB01 -Properties *

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

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

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 вы можете отключить эти учетные записи.

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

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

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

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

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

Получить общее количество активных (незаблокированных) компьютеров в 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 выполним на всех серверах команду обновления настроек групповых политик:

С помощью 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

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

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