Как узнать имя компьютера в powershell

Обновлено: 06.07.2024

Как я могу получить NetBIOS (также известное как «короткое») доменное имя текущего компьютера из PowerShell?

$ ENV: USERDOMAIN отображает домен текущего пользователя, но мне нужен домен, членом которого является текущий компьютер.

Я обнаружил, что вы можете сделать это довольно легко в VBScript, но, очевидно, ADSystemInfo не очень удобно использовать в PowerShell.

Вот мое окончательное решение, включающее предложение об использовании Win32_NTDomain , но фильтрация по домену текущего компьютера

В большинстве случаев имя домена NetBIOS по умолчанию - это крайняя левая метка в имени домена DNS до первых 15 байтов (имена NetBIOS имеют ограничение в 15 байтов). Имя домена NetBIOS может быть изменено во время установки Active Directory, но не может быть изменено.

WMI-объект WIN32_ComputerSystem предоставляет информацию на компьютере под управлением Windows.

Итак, доменное имя задается:

Но при установке домена дается имя DNS. В этом случае вы можете использовать команду nbtstat -n , чтобы найти имя домена NetBIOS, которое отображается как <DOMAIN><1B> .

Команда PowerShell может быть:

Вот еще один способ использования WMI

Использование COM-объекта ADSystemInfo должно работать без задержки поиска Win32_NTDomain:

В этом COM-объекте также доступны другие свойства, связанные с AD:

Использование NetGetJoinInformation и P / Invoke:

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

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

По приведенной выше ссылке есть тема и беседа.

Используйте командлет Active Directory Get-ADDomain:

OP находится после "компьютерного домена", поэтому ответ будет $GetComputerDomain (ниже), но я также добавлю $ GetUserDomain для справки.

Я считаю, что опция wmi (gwmi) работает очень медленно, особенно когда вы запрашиваете класс Win32_NTDomain. У меня есть среда с несколькими доверенными доменами, и на это уходит вечность, когда мне быстро нужна эта простая информация.

date

22.09.2021

directory

PowerShell

comments

комментария 42

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

Прежде чем приступить к работе с командлетом Get-ADComputer, необходимо подключить модуль Active Directory Module for 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 10,8.1 и Windows 7 нужно скачать и установить RSAT для вашей версии ОС и включить модуль AD-PowerShell из панели управления или командой:
Enable-WindowsOptionalFeature -Online -FeatureName RSATClient-Roles-AD-Powershell

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

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

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

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

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

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

Get-ADComputer -Identity SRV-DB01

Get-ADComputer -Identity

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

Get-ADComputer все параметры компьютера в Active Directory

Get-ADComputer -Identity SRV-DB01 -Properties *

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

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

Как вы видите, время последнего входа данного компьютера в сеть указано в атрибуте компьютера LastLogonDate – 21.09.2015 0:20:17.

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

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

Табличное представление Get-ADComputer

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

Получаем время входа для всех компьютеров домена

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-Date adddays

Полученную переменную с датой можно использовать в качестве фильтра запроса 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

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

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

Посчитать количество серверов с 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.

get-adcomputer информации о версии windows на компьютерах домена

Атрибут -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

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

Get-ADComputer -Filter < OperatingSystem -Like '*Windows Server 2008*' >-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

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

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

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

Командлеты из модуля CimCmdlets — самые важные для общих задач управления системой. Все ключевые параметры подсистемы доступны через инструментарий WMI. Более того, инструментарий WMI обрабатывает данные как объекты, сгруппированные в коллекции из одного или нескольких элементов. Поскольку Windows PowerShell также работает с объектами и имеет конвейер, позволяющий одинаково обрабатывать отдельный объект или несколько объектов, общий доступ к инструментарию WMI предоставляет возможность выполнять некоторые сложные задачи с небольшими затратами усилий.

Вывод параметров рабочего стола

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

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

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

Так как имена большинства этих свойств метаданных начинаются с Cim, эти свойства можно отфильтровать с помощью Select-Object . Укажите параметр -ExcludeProperty, используя "Cim*" как значение. Пример:

Чтобы отфильтровать метаданные, используйте оператор конвейера (|) для отправки результатов команды Get-CimInstance в Select-Object -ExcludeProperty "CIM*" .

Вывод сведений о BIOS

Класс WMI Win32_BIOS возвращает довольно компактные и полные сведения о системной BIOS локального компьютера:

Вывод сведений о процессоре

Общие сведения о процессоре можно получить с помощью класса Win32_Processor инструментария WMI, но вам, скорее всего, потребуется отфильтровать полученные данные:

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

Вывод производителя и модели компьютера

Сведения о модели компьютера также доступны в Win32_ComputerSystem. Чтобы получить данные поставщика вычислительной техники (OEM), стандартные отображаемые выходные данные фильтровать не нужно:

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

Вывод установленных исправлений

Список всех установленных исправлений можно получить с помощью Win32_QuickFixEngineering:

Этот класс возвращает список исправлений в следующем виде:

Для получения более кратких сведений нужно исключить некоторые свойства. Параметр Property в Get-CimInstance позволяет выбрать только идентификаторы HotFixID, однако на самом деле возвращается больше данных, так как по умолчанию отображаются все метаданные:

Дополнительные данные выводятся, так как параметр Property в Get-CimInstance ограничивает свойства, возвращаемые из экземпляров класса WMI, но не объекты, возвращаемые оболочке PowerShell. Командлет Select-Object позволяет сократить возвращаемые выходные данные:

Вывод сведений о версии операционной среды

Свойства класса Win32_OperatingSystem включают сведения о версии операционной системы и пакета обновления. Эти свойства можно выбрать явным образом, чтобы получить сводные данные по версиям из Win32_OperatingSystem:

С параметром Property в Select-Object можно использовать подстановочные символы. Поскольку в рассматриваемом случае важны все свойства, имена которых начинаются с Build либо с ServicePack, указанную строку можно сократить:

Вывод локальных пользователей и владельца

Общие сведения о локальных пользователях — количество лицензированных пользователей, текущее число пользователей и имя владельца — можно получить, выбрав свойства класса Win32_OperatingSystem. Отображаемые свойства можно указать явным образом:

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

Получение сведений о доступном месте на диске

Чтобы получить сведения о дисковом пространстве и свободном месте на локальных дисках, можно воспользоваться классом Win32_LogicalDisk инструментария WMI. Для просмотра следует выбрать только те экземпляры, у которых свойство DriveType принимает значение 3, так как именно оно используется инструментарием WMI для постоянных жестких дисков.

Получение сведений о сеансах входа в систему

Общие сведения о сеансах входа в систему, связанных с пользователями, можно получить через класс Win32_LogonSession инструментария WMI:

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

Имя пользователя, выполнившего вход на определенный компьютер, можно отобразить с помощью Win32_ComputerSystem. Приведенная ниже команда возвращает только пользователей, выполнивших вход на рабочий стол системы:

Получение сведений о местном времени компьютера

Сведения о текущем местном времени определенного компьютера можно получить с помощью класса Win32_LocalTime инструментария WMI.

Отображение состояния службы

Для просмотра состояния всех служб на определенном компьютере можно локально воспользоваться командлетом Get-Service . Для удаленных систем можно использовать класс Win32_Service инструментария WMI. Если использовать Select-Object для фильтрования Status, Name и DisplayName, формат вывода будет идентичен формату вывода командлета Get-Service :

Чтобы полностью отобразить службы с очень длинными именами, может потребоваться использовать командлет Format-Table с параметрами AutoSize и Wrap, позволяющими оптимизировать ширину столбцов и переносить длинные имена на следующие строки вместо их усечения:

Всё о PowerShell в Windows и на Linux. Системное администрирование Windows

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

Чтобы использовать командлет Get-ADComputer необходимо установить Модуль Active Directory для Windows PowerShell, в каких системах он уже присутствует и как его установить если он ещё не установлен, смотрите в статье «Как установить и использовать модуль Active Directory PowerShell». На рабочих станциях данный модуль вы можете установить следующей командой:

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

Чтобы получать информацию из AD с помощью командлетов из модуля AD для PowerShell, вам не нужны права администратора домена. Достаточно, чтобы учётная запись, под которой запускается командлет, была членом группы «Domain Users / Authenticated Users».

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


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



Используя Get-Member, вы можете получить список всех свойств объекта ADComputer:



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

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

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

У нас получилась простая таблица, которая содержит всего 2 поля: имя компьютера и дата LastLogonData. Вы можете добавить в эту таблицу другие поля объекта ADComputer.

Чтобы отобразить информацию об объектах компьютеров в определённом OU (организационном подразделении), используйте параметр -SearchBase:

Отсортируйте результаты запроса по дате последнего входа в систему с помощью командлета Sort-Object:

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

Используя Get-Date, мы можем получить значение текущей даты в переменной и уменьшить его до 120 дней:

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

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

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

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

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

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

Ниже приведены ещё несколько полезных примеров использования командлета Get-ADComputer для запроса и поиска компьютерных объектов в домене по определенным критериям.

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

Подсчёт количества экземпляров Windows Server в домене AD:

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

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

Чтобы найти все рабочие станции под управлением Windows 10:

Чтобы получить список серверов в домене с версией ОС, установленным пакетом обновлений и IP-адресом:

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

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

Чтобы найти все отключённые компьютеры в определённом подразделении Active Directory:

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

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

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

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

Чтобы выполнить определённое действие со всеми компьютерами в результирующем списке, необходимо использовать цикл ForEach-Object. В этом примере мы хотим создать список серверов в домене и запросить конкретную информацию с каждого сервера (файл результатов должен содержать имя сервера, производителя и модель сервера).

Вы можете использовать более короткий синтаксис цикла. Предположим, вам нужно запустить определённую команду на всех компьютерах в определённом OU (в этом примере я хочу запустить команду обновления групповой политики на всех серверах):

Используя Get-AdComputer в скриптах автозапуска PowerShell, вы можете управлять различными настройками компьютера. Например, я слежу за состоянием агента (службы) SCCM на компьютерах пользователей. Небольшой скрипт входа в систему выполняется на каждом компьютере во время запуска, он сохраняет статус службы ccmexec в неиспользуемый атрибут компьютера — extensionAttribute10.

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

Ещё примеры использования. Допустим, имеется задача получить информацию о всех компьютерах, у которых имя начинается с определённой строки. Для этого можно использовать опцию -Filter с оператором сравнения -like.

Следующая команда выведет имя, DNS-имя хоста и IPv4-адрес для всех компьютеров, чьё имя начинается на User01:

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

Предположим, нужно вывести все компьютеры, которые изменили свой пароль за определённый период времени. Следующая команда получает все компьютеры, которые изменили свой пароль за последние 90 дней.

Предположим имеется задача составить список аккаунтов компьютеров в определённой локации используя LDAPFilter. Следующая команда получает учётные записи компьютеров в расположении CN=Computers,DC=User01,DC=com, при этом с помощью LDAPFilter выбираются только компьютеры, которые указаны как ноутбуки.

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


Следующие команды покажут имя, имя хоста DNS и адрес IPv4 всех компьютеров, чьё имя начинается со строки «Computer01» И у которых пароль последний раз установлен в течение предшествующих 30 дней.

Читайте также: