как узнать имя компьютера powershell
Получаем имя компьютера через Powershell
Навигация по посту
Самый быстрый способ
Есть много способов получить через Powershell имя компьютера. Отличаются они только условиями, в которых вы планируете это сделать. Начнем с самого простого:
Этот командлет работает так же как и NSLOOKUP в cmd.
Узнаем имена компьютеров через Powershell используя PSremoting
Мы так же можем использовать PSremoting, но для него может потребоваться предварительная настройка, т.к. будет использоваться NTLM. Настройка обсуждалась в этой статье. Если с помощью встроенной переменной мы получаем имя своего компьютера:
То у множества компьютеров имя мы можем получить так:
Узнаем имена множества компьютеров
Если мы хотим узнать имена у множества компьютеров через Powershell, не используя PSremoting, то это тоже возможно. Допустим есть TXT файл с именем ip.txt, где IP адреса хранятся так:
Мы этот файл открываем, разделяем значения по запятым и передаем в Resolve-DNSName:
Имя компьютера через Powershell используя WMI
Для того что бы узнать имя используя WMI можно сделать:
Более подробно WMI в Powershell рассматривался тут.
Информация о компьютере: просто и быстро
Довольно часто нужно быстро, кратко, но информативно получить информацию о стационарном компьютере или ноутбуке, без дополнительного ПО и не «вскрывая крышку».
Это можно реализовать, например, средствами командной строки ОС Windows или PowerShell.
CMD — проверенный временем функционал, который есть в любой версии Windows.
Кроме того, для простых задач администрирования cmd использовать привычнее, а где-то и удобнее.
Что лучше — CMD или PowerShell? Я не готов однозначно ответить на этот вопрос.
Впрочем, ничто не мешает нам пользоваться и тем и другим, все зависит от поставленной задачи.
Мы не будем собирать всю информацию о ПК — для этого существует множество специализированного ПО!
Реализация с помощью CMD.
Сбор информации будем осуществлять использованием переменных среды Windows и выполнением сценариев WMI.
Для вывода всех переменных окружения в Windows и их значений служит команда set.
Для получения сведений об оборудовании и системе, управления процессами и их компонентами, а также изменения настроек с использованием возможностей инструментария управления Windows (Windows Management Instrumentation или WMI) служит команда WMIC.
Реализация с помощью PowerShell.
В оболочке PowerShell, перед тем как запускать скрипт, нужно выполнить команду, разрешающую выполнение неподписанных скриптов для текущего сеанса оболочки:
Есть небольшие сложности при определении IP-адреса активной сетевой карты. Для этого применяем фильтр NetConnectionStatus — «2», после берем информацию mac-адрес от класса Win32_NetworkAdapter и IP-адрес из класса Win32_NetworkAdapterConfiguration и объединяем в один запрос:
Для получения параметров сети по MACAddress активной сетевой карты дополнительно считываем Win32_NetworkAdapterConfiguration.
Сбор информации о компьютерах
Командлеты из модуля CimCmdlets — самые важные для общих задач управления системой. Все ключевые параметры подсистемы доступны через инструментарий WMI. Более того, инструментарий WMI обрабатывает данные как объекты, сгруппированные в коллекции из одного или нескольких элементов. Поскольку Windows PowerShell также работает с объектами и имеет конвейер, позволяющий одинаково обрабатывать отдельный объект или несколько объектов, общий доступ к инструментарию WMI предоставляет возможность выполнять некоторые сложные задачи с небольшими затратами усилий.
Вывод параметров рабочего стола
Для начала рассмотрим команду, собирающую сведения о рабочих столах локального компьютера.
Эта команда возвращает сведения обо всех рабочих столах, вне зависимости от их использования.
Сведения, возвращаемые некоторыми классами WMI, могут быть очень подробными и часто содержат метаданные о классе WMI.
Вывод сведений о 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.
Отображение состояния службы
Чтобы полностью отобразить службы с очень длинными именами, может потребоваться использовать командлет Format-Table с параметрами AutoSize и Wrap, позволяющими оптимизировать ширину столбцов и переносить длинные имена на следующие строки вместо их усечения:
Get-ADComputer: вывод информации о компьютерах в Active Directory через PowerShell
PowerShell командлет Get-ADComputer можно использовать для получения различных сведений об учётных записях компьютеров (серверах и рабочих станциях) в домене Active Directory. Это один из наиболее полезных командлетов для выборки и поиска компьютеров по разным критериям в домене AD ( для получения информации об учетных записях пользователей AD используется другой командлет — Get-ADUser).
Допустим, ваша задача – найти в Active Directory все неактивные компьютеры, которые не регистрировались в домене более 120 дней и заблокировать учетные записи этих компьютеров.
Прежде чем приступить к работе с командлетом Get-ADComputer, необходимо подключить модуль Active Directory Module for Windows PowerShell.
Основы синтаксиса и использование командлета Get-ADComputer
Справка о параметрах командлета Get-ADComputer вызывается стандартно с помощью Get-Help:
Чтобы получить информацию о доменной учетной записи конкретного компьютера или сервера, укажите его имя в качестве аргумента параметра —Identity:
Командлет вернул только базовые свойства объекта Computer из AD. Нас интересует время последней регистрации компьютера в домене AD, но этой информация в выводе команды нет. Выведем все доступные свойства данного компьютера из Active Directory:
Как вы видите, время последнего входа данного компьютера в сеть указано в атрибуте компьютера LastLogonDate – 21.09.2015 0:20:17.
Командлет Get-ADComputer позволяет вывести в результатах команды любые из свойств компьютера. Уберем всю лишнюю информацию, оставив в выводе только значения полей Name и LastLogonDate.
Итак, мы получили данные о последнем времени регистрации в домене для одного компьютера. Теперь нам нужно изменить команду так, чтобы она возвращала информацию о времени последней регистрации в сети для всех компьютеров домена. Для этого заменим параметр –Identity на —Filter:
Отсортируем результаты запроса по времени последнего логина в сеть (поле LastLogonDate) с помощью команды Sort:
Итак, мы получили список компьютеров домена и время их последнего входа в сеть Active Directory. Теперь мы хотим заблокировать учетные записи компьютеров, которые не использовались более 120 дней.
С помощью Get-Date получим в переменной значение текущей даты и вычтем из текущей даты 120 дней:
Полученную переменную с датой можно использовать в качестве фильтра запроса Get-ADComputer по полю LastLogonDate
Таким образом, мы получили список неактивных компьютеров, не регистрировавшихся в сети более 120 дней. С помощью командлета Set-ADComputer или Disable-ADAccount вы можете отключить эти учетные записи.
Теперь можно заблокировать все полученные учетные записи компьютеров:
Примеры использования командлета Get-ADComputer
Ниже представлены еще несколько полезных примеров команд с использованием командлета Get-ADComputer, которые можно использовать для выборки и поиска компьютеров домена по определенными критериям.
Получить общее количество активных (незаблокированных) компьютеров в Active Directory:
Почитать количество серверов с Windows Server в домене:
Получить список компьютеров в определенном OU, имена которых начинаются с BuhPC:
При поиске по OU вы можете использовать дополнительный параметр -SearchScope 1, который означает, что нужно искать только в корневом разделе. Параметр -SearchScope 2 означает рекурсивный поиск компьютеров во всех вложенных OU.
Выбрать все рабочие станции с ОС Windows 10:
На выходе получили такую красивую таблицу со списком Windows Server в AD.
Выбрать заблокированные компьютеры в определенном OU:
Чтобы удалить все аккаунты компьютеров в домене, не авторизовавшиеся в домене более 6 месяцев, можете воспользоваться командой:
Результат выполнения команды Get-ADComputer можно выгрузить в текстовый файл:
Также вы можете получить выборку компьютеров и экспортировать его в CSV файл:
Или получить HTML файл отчета со списком компьютеров и нужных атрибутов компьютера:
Чтобы выполнить определенной действие со всеми компьютерами из полученного списка нужно использовать цикл Foreach. В этом примере мы хотим получить список серверов в домене с моделью и производителем:
Либо можно использовать более короткий синтаксис цикла. Допустим нам нужно выполнить определенную команду на всех компьютерах в определенном OU (в этом примере мы хотим запустить на всех серверах команду обновления настроек групповых политик):
С помощью Get-AdComputer и логон скрипта PowerShell вы можете контролировать различные параметры компьютера. Я, например, контролирую состояние агента SCCM на компьютерах пользователей. При загрузке каждого компьютера на нем отрабатывает логон скрипт, который с помощью Set-ADComputer сохраняет состояние службы ccmexec в свободный атрибут компьютера — extensionAttribute10.
Затем с помощью следующей команды я могу найти компьютеры, на которых отсутствует или не запушена служба CCMExec:
Как узнать имя пользователя на удаленном компьютере?
Довольно часто администратору нужно быстро узнать имя пользователя, который выполнил вход на удаленном компьютере Windows. В это статье мы рассмотрим несколько утилит и PowerShell скриптов, которые помогут вам узнать имена пользователей, залогиненых на удаленных компьютерах в сети.
Утилиты PSLoggedOn и Qwinsta
В комплекте утилит SysInternals PSTools от Microsoft есть консольная утилита PSLoggedOn.exe, которую можно использовать для получения имени пользователя, который вошел на удаленный компьютер, а также список подключенных к нему SMB сеансов.
Скачайте утилиту и запустите ее в формате:
Как вы видите, утилита вернула имя залогиненного пользователя (Users logged on locally), а также список пользователей, которые по сети используют ресурсы с этого компьютера (Users logged on via resource shares).
Если нужно получить только имя пользователя, вошедшего локально, используйте опцию –l:
Psloggedon.exe \\wks215s1 –l
Утилита Psloggedon подключается к реестру и проверяет в нем имя пользователя, вошедшего локально. Для этого должна быть включена служба RemoteRegistry. Вы можете запустить ее и настроить автозапуск службы с помощью PowerShell:
Set-Service RemoteRegistry –startuptype automatic –passthru
Start-Service RemoteRegistry
Утилита возвращает список всех сессий (активных и отключенных по таймауту) на RDS сервере или десктопной редакции Windows 10 (даже если вы разрешили к ней множественные RDP подключения).
reg add «HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server» /v «AllowRemoteRPC» /t «REG_DWORD» /d «1» /f
Получаем имя пользователя на удаленном компьютере через PowerShell
Вы можете получить имя пользователя, который залогинен на компьютере через WMI класс Win32_ComputerSystem. Откройте консоль PowerShell и выполните команду:
Команда вернула имя пользователя, который выполнил вход на компьютер.
У командлета Get-WmiObject есть параметр –ComputerName, который можно использовать для получения доступа к WMI объектам на удаленном компьютере. Следующая команда вернет имя пользователя с удаленного компьютера:
Данная команда показывает только пользователя, вошедшего на консоль (не через RDP).
Если нужно получить только имя пользователя на компьютере (без домена), воспользуетесь следующими командами:
Get-CimInstance –ComputerName wks215s1 –ClassName Win32_ComputerSystem | Select-Object UserName
GetCiminstance использует WinRM для подключения к удаленным компьютерам, поэтому на них нужно включить и настроить WinRM через GPO или командой:
PowerShell скрипт для проверки пользователей на удаленных компьютерах
Если вам нужно собрать информацию о пользователях сразу с нескольких компьютерах, можете использовать следующую PowerShell функцию получить имена пользователей.
На вход функции Get-LoggedUser нужно передать имена компьютеров, на которых нужно проверить имена пользователей:
Если для какого-то компьютера функция вернула пустое имя пользователя, значит на компьютер никто не залогинен.
Можно получить имена пользователей, которые работают на компьютерах в домене Active Directory. Для получения списка компьютеров нужно использовать командлет Get-ADComputer. В следующем примере мы получим имена пользователей, которые работают за активными компьютерами в определенном OU домена. Чтобы скрипт работал быстрее перед тем, как обратится к обратится к удаленному компьютеру, я добавил проверку его доступности по сети через ICMP пинг с помощью командлета Test-NetConnection:
Также обратите внимание, что вы можете хранить в свойствах компьютеров в AD имя пользователя, который выполнил вход. Для этого можно использовать логон скрипт, описанный в статье “Set-ADComputer: добавляем информацию о пользователе в свойства компьютеров AD”
После этого вам не нужно сканировать все компьютеры, чтобы найти где залогинен определенный пользователь. Можно найти компьютер пользователя простым запросом к Active Directory: