Получение серийных номеров с компьютеров AD с Powershell


21 сентября 2019


Получение серийных номеров с компьютеров AD с Powershell

Разберем ситуацию в которой нам нужно получить список серийных номеров компьютеров, которые находятся в Active Directory используя Powershell. Сразу оговорюсь, что не все компьютеры хранят серийные номера и вероятнее всего, что это относится только к компьютерам брендовой сборки, например HP. Описанные способ никак не заменят автоматизированные сервисы по сбору данных и инвентаризации.

Для начала нам нужно узнать, где эти серийные номера хранятся. Можно использовать старую команду CMD WMIC:

wmic bios get serialnumber

Но так как эта статья про Powershell будем использовать только его:

Get-WmiObject -Class 'win32_bios' | Select Serialnumber

Я использую виртуальную машину и из-за этого серийный номер относится к VMWare:

Powershell серийный номер

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

Можно использовать и CIM:

Get-CimInstance 'Win32_Bios' | Select-Object SerialNumber

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

Get-ADComputer -Filter *

Если нужно получить компьютеры из определенной OU, то можно добавить ключ SearchBase. В моем случае я ищу в домене domain.local, организационной единице Moscow:

Get-ADComputer -Filter * -SearchBase "OU=Moscow,DC=domain,DC=local"

Далее сценарий может меняться от того, какой способ удаленного выполнения команд вы хотите использовать. Вы можете использовать CIM, если у вас доступен такой способ в виде открытых портов и сервисов:

$computers = Get-ADComputer -Filter *
$computers.Name | 
Foreach-Object {Get-CimInstance Win32_Bios -ComputerName $_ -ErrorAction SilentlyContinue | 
Select-Object PSComputerName,SerialNumber}

Powershell скриптТак как какие-то компьютеры могут быть выключены могут появляться ошибки и что бы они не мешали я добавил параметр -ErrorAction SilentlyContinue, который такие ошибки не будет показывать.

Так же можно использовать WMI. В этом скрипте я добавил экспорт в CSV, которой потом можно открыть в Excel:

$computers = Get-ADComputer -Filter *
$serials = $computers.Name | 
Foreach-Object {Get-WMIObject Win32_Bios -ComputerName $_ -ErrorAction SilentlyContinue | 
Select-Object PSComputerName,SerialNumber}
Export-Csv -Path 'C:\serials.csv' -NoTypeInformation -InputObject $serials

С параметром NoTypeInformation в CSV файле не будет сохраняться техническая информация.

Ну и можно использовать PSRemoting, который позволяет выполнять удаленные команды в Powershell. Для работы может потребоваться дополнительная настройка:

$computers = Get-ADComputer -Filter *
Invoke-Command -ComputerName $computers.Name -ErrorAction SilentlyContinue -ScriptBlock {Get-CimInstance Win32_Bios -ErrorAction SilentlyContinue | select PSComputerName,SerialNumber}

 

...

Теги: #powershell #ad


Популярные тэги
О блоге
Этот блог представляет собой конспекты выученного материала, преобретенного опыта и лучшие практики в системном администрировании и программировании.