Powershell имя компьютера: Получаем через Powershell имя компьютера

Содержание

Сбор информации о компьютерах — PowerShell


  • Статья

  • Чтение занимает 4 мин

Этот пример применяется только к платформам Windows.

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

Перечисление параметров рабочего стола

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

Get-CimInstance -ClassName Win32_Desktop

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

Примечание

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

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

Get-CimInstance -ClassName Win32_Desktop | Select-Object -ExcludeProperty "CIM*"

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

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

Get-CimInstance -ClassName Win32_BIOS

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

Get-CimInstance -ClassName Win32_Processor | Select-Object -ExcludeProperty "CIM*"

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

Get-CimInstance -ClassName Win32_ComputerSystem | Select-Object -Property SystemType
SystemType
----------
X86-based PC

Перечисление изготовителя и модели компьютера

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

Get-CimInstance -ClassName Win32_ComputerSystem
Name PrimaryOwnerName Domain    TotalPhysicalMemory Model                   Manufacturer
---- ---------------- ------    ------------------- -----                   ------------
MyPC Jane Doe         WORKGROUP 804765696           DA243A-ABA 6415cl NA910 Compaq Presario 06

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

Список установленных исправлений

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

Get-CimInstance -ClassName Win32_QuickFixEngineering

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

Source Description     HotFixID  InstalledBy   InstalledOn PSComputerName
------ -----------     --------  -----------   ----------- --------------
       Security Update KB4048951 Administrator 12/16/2017  . 

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

Get-CimInstance -ClassName Win32_QuickFixEngineering -Property HotFixID
InstalledOn           :
Caption               :
Description           :
InstallDate           :
Name                  :
Status                :
CSName                :
FixComments           :
HotFixID              : KB4533002
InstalledBy           :
ServicePackInEffect   :
PSComputerName        :
CimClass              : root/cimv2:Win32_QuickFixEngineering
CimInstanceProperties : {Caption, Description, InstallDate, Name…}
CimSystemProperties   : Microsoft.Management.Infrastructure.CimSystemProperties
...

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

Get-CimInstance -ClassName Win32_QuickFixEngineering -Property HotFixId |
    Select-Object -Property HotFixId
HotFixId
--------
KB4048951

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

Get-CimInstance -ClassName Win32_OperatingSystem |
  Select-Object -Property BuildNumber,BuildType,OSType,ServicePackMajorVersion,ServicePackMinorVersion

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

Get-CimInstance -ClassName Win32_OperatingSystem |
    Select-Object -Property Build*,OSType,ServicePack*
BuildNumber             : 18362
BuildType               : Multiprocessor Free
OSType                  : 18
ServicePackMajorVersion : 0
ServicePackMinorVersion : 0

Перечисление локальных пользователей и владельцев

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

Get-CimInstance -ClassName Win32_OperatingSystem |
    Select-Object -Property NumberOfLicensedUsers, NumberOfUsers, RegisteredUser

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

Get-CimInstance -ClassName Win32_OperatingSystem | Select-Object -Property *user*

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

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

Get-CimInstance -ClassName Win32_LogicalDisk -Filter "DriveType=3"
DeviceID DriveType ProviderName VolumeName Size         FreeSpace   PSComputerName
-------- --------- ------------ ---------- ----         ---------   --------------
C:       3                      Local Disk 203912880128 65541357568 . 
Q:       3                      New Volume 122934034432 44298250240 .
Get-CimInstance -ClassName Win32_LogicalDisk -Filter "DriveType=3" |
    Measure-Object -Property FreeSpace,Size -Sum |
    Select-Object -Property Property,Sum
Property           Sum
--------           ---
FreeSpace 109839607808
Size      326846914560

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

Get-CimInstance -ClassName Win32_LogonSession

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

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

Get-CimInstance -ClassName Win32_ComputerSystem -Property UserName

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

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

Get-CimInstance -ClassName Win32_LocalTime
Day            : 23
DayOfWeek      : 1
Hour           : 8
Milliseconds   :
Minute         : 52
Month          : 12
Quarter        : 4
Second         : 55
WeekInMonth    : 4
Year           : 2019
PSComputerName :

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

Get-CimInstance -ClassName Win32_Service |
    Select-Object -Property Status,Name,DisplayName

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

Get-CimInstance -ClassName Win32_Service |
    Format-Table -Property Status, Name, DisplayName -AutoSize -Wrap

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

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

Содержание:

  • Вывести атрибуты компьютера с помощью Get-ADComputer
  • Использование фильтров в Get-ADComputer
  • Полезные примеры использования командлета Get-ADComputer

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

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

Import-Module activedirectory

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

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

Get-Help Get-ADComputer

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

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

Get-ADComputer -Identity SRV-DB01

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 -Identity SRV-DB01 -Properties *

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

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

$date_with_offset= (Get-Date).AddDays(-120)

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

Get-ADComputer  -Properties LastLogonDate -Filter {LastLogonDate -lt $date_with_offset } | Sort LastLogonDate | FT Name, LastLogonDate -Autosize

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

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

Get-ADComputer -Properties LastLogonDate -Filter {LastLogonData -lt $date_with_offset } | Set-ADComputer -Enabled $false -whatif

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

Get-ADComputer -Properties LastLogonDate -Filter {LastLogonData -lt $date_with_offset} | Set-ADComputer -Enabled $false

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

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

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

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

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

 

(Get-ADComputer -Filter {enabled -eq "true"}).count

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

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

(Get-ADComputer -Filter {enabled -eq "true" -and OperatingSystem -Like '*Windows Server*' }).count

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

Get-ADComputer -Filter {Name -like "BuhPC*"} -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:

Get-ADComputer -Filter {OperatingSystem -like '*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

Ниже представлены еще несколько полезных примеров команд с использованием командлета 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 {$_.enabled -eq $False}

Чтобы удалить все аккаунты компьютеров в домене, не авторизовавшиеся в домене более 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 {OperatingSystem -Like '*Windows Server 2012*' } -Properties * | Select-Object Name,OperatingSystem | ConvertTo-Html | Out-File C:\ps\ad_computer.html

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

Get-ADComputer -Filter 'operatingsystem -like "*Windows server*" -and enabled -eq "true"' | Select-Object Name | Foreach-Object {Get-CimInstance Win32_Bios -ComputerName $_.Name -ErrorAction SilentlyContinue | Select-Object PSComputerName,SerialNumber}

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

$Computers = Get-ADComputer -Filter {OperatingSystem -Like '*Windows Server*'}
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 -SearchBase "OU=Servers,DC=winitpro,DC=loc" -Filter * | %{ Invoke-Command -Computer $_. Name -ScriptBlock {gpupdate /force} }

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

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

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

get-adcomputer -filter {extensionAttribute10 -ne "SCCM Agent:Running"} -SearchBase “OU=Computers,OU=MSK,DC=winitpro,DC=ru” -properties dNSHostName,extensionAttribute10,LastLogonDate  |select-object dNSHostName,extensionAttribute10,LastLogonDate

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

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

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

Не читатель? Посмотрите соответствующий видеоурок!

Не видите видео? Убедитесь, что ваш блокировщик рекламы отключен.

Предпосылки

Сократите количество обращений в службу поддержки и обновите учетные данные кэша для удаленных пользователей, даже если они не подключены к VPN, с помощью решения для самостоятельного сброса пароля. Получите демо-версию Specops uReset!

Эта статья представляет собой практическое руководство. Если вы хотите применить концепции, которые вы изучите в этом руководстве, убедитесь, что у вас есть PowerShell. Вот и все! В статье будет использоваться PowerShell 7 (последняя на момент написания этой статьи), но Windows PowerShell, вероятно, будет работать так же хорошо.

Использование команды

Hostname в PowerShell для получения имени компьютера

Еще до появления PowerShell единственным интерпретатором команд Windows, который у нас был, был старый добрый cmd .exe . Тогда нам не нужен был вонючий PowerShell, чтобы получить имя компьютера; у нас была команда hostname !

Команда hostname проще некуда. Откройте PowerShell (или даже командную строку cmd.exe) и введите hostname . Сделанный. Эта команда возвращает одну строку (имя локального компьютера).

Запуск команды hostname

Использование

System.Net.DNS Класс .NET

Если вы предпочитаете более ориентированный на PowerShell подход, вы также можете сослаться на статический метод с именем GetHostByName() , расположенный в System. Net.DNS Класс .NET или, возможно, метод GetHostName() .

Метод

GetHostName()

Использование метода GetHostName() , вероятно, является самым простым способом использования PowerShell для получения имени компьютера. Просто вызовите этот статический метод без аргументов, как показано ниже. Эта команда вернет одну строку точно так же, как 9Команда 0023 hostname делает.

 [Система.Net.Dns]::GetHostName()
 

Метод

GetHostByName()

Альтернативный, но похожий метод класса System.Net.DNS , который можно использовать для получения имени компьютера, называется GetHostByName() . Этот метод на самом деле является распознавателем DNS и может использоваться для поиска других имен хостов.

Если, например, вы хотите найти имя хоста локального компьютера, запустите [System.NET.DNS]::GetHostByName($null) или [System. NET.DNS]::GetHostByName('') ​​ .

 [System.Net.DNS]::GetHostByName('')
[System.Net.DNS]::GetHostByName($Null)
 

Вы увидите, что этот метод не предназначен строго для поиска имен компьютеров; вы также можете искать IP-адреса через свойство AddressList , как показано ниже.

Использование метода GetHostByName()

Если, однако, вы хотите найти только имя локального компьютера; ссылайтесь на свойство HostName , и PowerShell вернет только имя хоста.

 [System.Net.DNS]::GetHostByName('').HostName
[System.Net.DNS]::GetHostByName($Null).HostName
 

Использование переменных среды

Переменные среды — это всегда отличное место для поиска информации о компьютерах Windows; использование PowerShell для получения имени компьютера ничем не отличается.

Переменная среды ComputerName

Каждый компьютер Windows хранит переменную среды с именем ComputerName . Как и все другие переменные среды, вы можете получить доступ к пользовательским переменным среды через $env Конструкция PowerShell.

Чтобы сослаться на переменную среды COMPUTERNAME , откройте PowerShell и предварите имя переменной среды $env: . Затем PowerShell вернет имя локального компьютера в виде одной строки.

 $env:ИМЯ КОМПЬЮТЕРА
 

Свойство MachineName

В качестве альтернативы, если по какой-либо причине пользовательская переменная среды COMPUTERNAME не работает в вашей ситуации, вы также можете использовать переменную Свойство MachineName , являющееся частью класса .NET Environment .

Ссылка на свойство MachineName в классе Environment .NET, как показано ниже.

 [Окружающая среда]:: ИмяМашины
 

Использование WMI

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

Если вы хотите использовать WMI для запроса имени локального компьютера, используйте Get-CimInstance для запроса класса Win32_ComputerSystem , как показано ниже. Поскольку Get-CimInstance возвращает не имя компьютера, а объект, представляющий экземпляр CIM, обратитесь к свойству Name , чтобы вернуть только имя компьютера.

 Get-CimInstance-ClassName Win32_ComputerSystem
(Get-CimInstance -ClassName Win32_ComputerSystem).Имя
 

Win32_ComputerSystem Запрос

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

Возможно, вы управляете многими компьютерами и вам необходимо найти имя хоста для всех из них. Как правило, имя хоста будет представлено в Active Directory (AD), если вы находитесь в такой среде или собраны каким-либо другим инструментом управления активами. Но если это не так, вы всегда можете вернуться к PowerShell.

Чтобы использовать PowerShell для получения имен удаленных компьютеров, у вас есть два варианта. Вы можете либо обернуть методы, которые вы узнали выше, в блок сценария PowerShell Remoting, либо использовать WMI.

Использование PowerShell Remoting

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

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

Предполагая, что у вас есть только IP-адрес и вам нужно найти имя хоста компьютера с IP-адресом 192.168.1.2 и вы не находитесь в среде AD, вызовите Invoke-Command , как показано ниже.

 ## Создайте объект pcredential для передачи в Invoke-Command
$credential = Получить учетные данные
## Запускаем команду на удаленном компьютере
Invoke-Command -ComputerName 192. 168.1.2 -ScriptBlock { [System.Net.Dns]::GetHostName() } -Credential $credential
 

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

Использование WMI

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

 Get-CimInstance - имя класса Win32_ComputerSystem - имя компьютера 192.168.1.2
(Get-CimInstance -ClassName Win32_ComputerSystem -ComputerName 192.168.1.2).Имя
 

Get-CimInstance требует аутентификации. Если вы находитесь в среде AD, вам не нужно будет предоставлять какие-либо учетные данные, как показано выше. Однако, если вы не находитесь в среде AD, вам потребуется установить новый сеанс CIM с помощью командлета New-CimSession , использовать Get-CimInstance для использования этого сеанса, а затем самостоятельно удалить сеанс CIM. Ниже приведен фрагмент кода о том, как это сделать.

 ## Создайте объект PSCredential
$credential = Получить учетные данные
## Подключаемся к удаленному компьютеру, передавая кредиты и создавая удаленную сессию
$cimSession = New-CimSession -ComputerName 192.168.1.5 -Учетные данные $учетные данные
## Используйте сеанс для запроса WMI и ссылки на свойство Name
(Get-CimInstance -Session $cimSession -ClassName Win32_ComputerSystem).Имя
 

Следующие шаги

Перестаньте бороться со сбросом пароля и блокировкой учетных записей в Active Directory. Получите БЕСПЛАТНУЮ пробную версию Specops uReset.

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

Теперь, когда вы знаете, как выполнить эту задачу, попробуйте создать сценарий, который будет получать имена компьютеров в цикле, возможно, через CSV или текстовый файл!

PowerShell имя_компьютера | Способы найти имя компьютера

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

Способы определения имени компьютера

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

  • Из переменной среды
  • Использование пути процесса имени хоста
  • Использование WMI/CIM
  • Использование машинного значения .Net
  • Из функции ядра
  • Использование функции Gethostname() .Net

Мы подробно рассмотрим все вышеперечисленное.

1. Поиск имени компьютера по переменной среды

Самый простой способ узнать имя компьютера — прочитать переменную среды. Это самый простой, эффективный и быстрый способ. Он также имеет большой недостаток, поскольку переменная окружения может быть легко перезаписана, что сопряжено с небольшим фактором риска. Результат может быть искажен.

Ввод:

$env:computername

Вывод:

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

Get-Childitem env:

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

Вход:

GET-CHILDITEM ENV: COMPUTERNAME

Выход:

2. Использование имени хоста. . Выполнение hostname.exe вернет имя компьютера. Выполнение приведенной ниже команды отобразит имя компьютера 9.0003

Ввод:

hostname.exe

Вывод:

В предыдущих версиях это был внешний пакет. То же самое может быть достигнуто с помощью экземпляра CIM.

Ввод:

Get-WMIObject Win32_ComputerSystem | Select-Object -ExpandProperty name
(Get-CIMInstance CIM_ComputerSystem).Name

Выходные данные:

4. Использование класса .Net

Имя компьютера можно найти с помощью класса .Net.

Ввод:

[system.environment]::MachineName
Аналогичным образом с помощью функции gethostname можно узнать имя компьютера.
[System.Net.Dns]::GetHostName()

Вывод:

5. Переименование имени компьютера

Иногда администратору необходимо переименовать имя компьютера. В этом случае можно использовать командлет Rename-Computer.

Синтаксис:

ИМЯ
Rename-Computer
СИНТАКСИС
Rename-Computer [-NewName] [-ComputerName ] [-PassThru] [-DomainCredential ] [-LocalCredential >] [-Force] [-Restart]
[-WsmanAuthentication {по умолчанию | Базовый | Переговоры | КредССП | Дайджест | Kerberos}] [-Протокол {DCOM | WSMan}] [-WhatIf] [-Confirm]  []
Псевдонимы
Нет

Параметры
  • -ComputerName: Обозначает компьютер, который нужно переименовать. Это может быть как локальная система, так и удаленный компьютер. По умолчанию это относится к локальной системе. Чтобы переименовать локальный компьютер, укажите его как localhost или. Чтобы переименовать удаленный компьютер, укажите IP-адрес или имя netbios или полное доменное имя удаленной системы. Его тип — строка. Он принимает входные данные конвейера, но подстановочные знаки не поддерживаются.
  • -Confirm: Это означает, что перед выполнением командлета должно быть показано подтверждающее сообщение. Тип данных является переключателем, доступ к которому также можно получить с помощью cf. Конвейерный ввод не принимается, а подстановочные знаки не допускаются.
  • -DomainCredential: Обозначает учетную запись для подключения к домену. Если система присоединена к домену, учетные данные являются обязательными. Его тип — PSCredential, а значение по умолчанию — none. Конвейерный ввод не принимается, а подстановочные знаки не допускаются.
  • -Force: Это означает, что командлет должен быть запущен без подтверждения пользователя.
  • -Local Credential: Обозначает учетную запись, которая имеет разрешение на доступ к компьютеру. По умолчанию используются текущие учетные данные пользователя. Если запрос учетных данных не должен отображаться, следует использовать параметр учетных данных домена. Его тип PSCredential. Он не принимает конвейерный ввод, а символы подстановки не допускаются.
  • -NewName: Это новое имя компьютера. Пробелы и точки не допускаются. Максимально допустимое количество символов — 63, и оно не может содержать только цифры. Это строка типа данных. Ввод конвейера принимается.
  • -PassThru: Используется для предварительного просмотра команды при запуске. Он не будет генерировать никакого вывода. Тип данных этого параметра — переключатель. По умолчанию значение равно false.
  • -Restart: Это означает, что система должна быть перезагружена после изменения имени. В большинстве случаев требуется перезагрузка, чтобы изменение имени вступило в силу. Его тип — переключатель. Его значение по умолчанию равно none. Он не принимает конвейерный ввод, и подстановочные знаки также не допускаются.
  • -Whatif: Это не приведет ни к какому результату. Это как превью. Тип данных параметра является переключателем и может быть доступен как wi. Если значение не указано, оно считается ложным.
  • -WsmanAuthentication: Обозначает механизм протокола WSman, который будет использоваться для аутентификации учетных данных. Возможные значения: базовый, Credssp, Default, Digest, Kerberos и согласование. Его тип — строка. Значение по умолчанию — нет. Он не принимает конвейерный ввод, и подстановочные знаки также не допускаются.

Пример имени компьютера PowerShell

Пример имени компьютера PowerShell приведен ниже:

Ввод:

Write-Host «Добро пожаловать в демонстрацию переименования имени компьютера»
Write-Host «Переименование локального компьютера»
Computer -NewName "vigneshnew" -DomainCredential home\vignesh
Write-Host "Компьютер успешно переименован"
Write-Host "Переименование удаленного компьютера"
Rename-Computer -ComputerName "testserver1" -NewName "testservernew" -DomainCredential test\vignesh - Сила
Write-Host "Компьютер успешно переименован"

Вывод:

Заключение

Итак, в статье подробно рассмотрена идентификация имени локального компьютера или имени удаленного компьютера в PowerShell.