PowerShell · 29.09.2023

Скажи мне, мать, модель свою

Логическое продолжение этого поста и ответвление этого поста. Все посты про wmic можно найти по этому тегу.

И снова пост про Get-WmiObject и железо на удаленных хостах. Теперь речь пойдёт о сборе исключительно моделей материнских плат с компьютеров в домене с использованием скрипта на PowerShell и Active Directory.

Приведённый ниже скрипт соберёт список компьютеров из указанного подразделения в домене, обратится к ним, составит список моделей материнских плат, сохранит данные в текстовый документ models.txt и разместит его рядом с ps1.

Всё, что нужно — задать нужное подразделение в переменной $unit.

## Заголовок скрипта ##
[System.Console]::Title = "Получение модели материнской платы"

## Импорт модулей ##
Import-Module -Name ActiveDirectory

## Блок переменных ##
$unit = "OU=PC,OU=COMPANY,DC=org,DC=domain,DC=ru" # <-- Подразделение для поиска компьютеров
$mbfile = "models.txt" # <-- Имя файла для сохранения данных

## Работа скрипта ##
try
{
    # Получение списка компьютеров из подразделения #
    Write-Host "Формирование списка компьютеров..." -ForegroundColor Cyan
    $pcs = (Get-ADComputer -SearchBase "$unit" -Filter * -Properties *).Name
    Write-Host "Формирование списка завершено!" -ForegroundColor Green
    Sleep(5)
}
catch
{
    Write-Host "Ошибка обращения к Active Directory или подразделению!" -ForegroundColor Red
    Read-Host
}

# Цикл для получения модели материнской платы компьютеров #
if ($pcs -eq $null)
{
    Write-Host "Не удалось получить данные из массива!" -ForegroundColor Red
    Write-Host "Возможно подразделение $unit не содержит учётных записей компьютеров." -ForegroundColor Red
    Read-Host
}
else
{
    Clear
    foreach($pc in $pcs)
    {
        try
        {
            Write-Host
            Write-Host "Получение модели материнской платы на $pc..." -ForegroundColor Cyan
            $mbmodel = (Get-WmiObject -ComputerName $pc -Class win32_baseboard -ErrorAction Ignore).Product
            if ($mbmodel -ne $null) 
            {
                Write-Host "Модель материнской платы для $pc успешно получена!" -ForegroundColor Green
                Write-Host "Идёт запись файла..." -ForegroundColor Cyan
                $content = "$pc, $mbmodel"
                $content | Out-File -FilePath $mbfile -Append -ErrorAction Stop
                Write-Host "Данные внесены в файл $mbfile!" -ForegroundColor Green
            }
            else { Write-Host "Не удалось получить модель материнской платы $pc..." -ForegroundColor Red }
        }
        catch
        {
            Write-Host "Ошибка получения модели материнской платы для $pc..." -ForegroundColor Red
        }
    }
}

Метод удобен, когда надо собрать модели материнских плат компьютеров из какого-то определённого подразделения в домене. Единственный минус заключается в том, что сбор осуществляется только с доступных (на момент работы скрипта) компьютеров.