Приветствую тебя, читатель. В предпоследний день марта решил я затронуть тему инвентаризации. Рано или поздно этим придётся заниматься. Зачастую всем сначала впопыхах выдаётся оборудование без накладных и прочих документов о приеме сдаче оборудования, а потом, когда волна приёма сотрудников заканчивается, бухгалтерия, или ещё какой-нибудь ответственный за это дело отдел, начинает задавать неинтересные вопросы. А сколько у нас всего ПК, ноутбуков, нетбуков и всего того что может подключаться к сети и использоваться как рабочая станция?
Снова чертим на полу пентаграмму и призываем всесильный PowerShell помочь нам в этот и сложном и простом деле. В 21 веке можно без жертвоприношений, так что простой пентаграммы на полу и произношения в слух заклинания "Win+R, PowerShell_ISE.exe, Enter! "3 раз вполне достаточно.
В первую очередь нам нужен список рабочих станций, которые мы будем инвентаризировать. Для этого смотрим мой предыдущий пост, о том как получить из нужной нам OU список Enabled компов.
Сохраняем все полученное в txt файл, каждое имя с новой строки.
Копируем код ниже, правим параметры ввода вывода, жмём F5 и идём пить кофе
$CompCol = $Comp = $null $CompCol = Get-Content "C:\users\ODMIN\desktop\AllComputers.txt" $PCInventory = New-Object System.Text.StringBuilder $null = $PCInventory.Append("PCName;Availability;Manufacturer;Model;Serial Number;CPU;HDD Capacity;HDD Caption;NAdapter Model;MAC Address;IP V4 Address;IP V6 Address;RAM;Monitor Model;Monitor Number;Operating System;SP;Video Adapter;VGA Ram;User logged In; Last LogOn;Last Reboot;PCType`n") #changed добавлены Monitor Model, Monitor Number foreach ($Comp in $CompCol) { $Availability = $Manufacturer = $Model = $SerialNumber = $CPU = $HDDCapacity = $HDDCaption = $RAM = $OperatingSystem = $SP = $LastLogOn = $LastReboot = $NAdapterModel = $LastLogOn = $MACAddress = $IPV4Address = $IPV6Address = $PCTypeT = $MonModel = $MonNumber =$UserLoggedIn = $null #changed добавлены $MonModel, $MonNumber if (Test-Connection -ComputerName $Comp -Count 1 -Quiet) { # Получаем данные от ПК $Availability = 1 $Manufacturer = (gwmi Win32_ComputerSystem -ComputerName $Comp).Manufacturer $Model = (gwmi Win32_ComputerSystem -ComputerName $Comp).Model $SerialNumber = (gwmi Win32_BIOS -ComputerName $Comp).SerialNumber $CPU = (gwmi Win32_Processor -ComputerName $Comp).Name foreach ($_ in gwmi Win32_DiskDrive -ComputerName $Comp) { $HDDCapacity = "$HDDCapacity, " + "$([int]($_.Size / 1gb))" $HDDCapacity = $HDDCapacity.trimstart(",", " ") $HDDCaption = "$HDDCaption, " + $_.Caption $HDDCaption = $HDDCaption.trimstart(",", " ") } foreach ($_ in gwmi Win32_NetworkAdapterConfiguration -ComputerName $Comp -Filter "IPEnabled='true'") { $NAdapterModel = "$NAdapterModel, " + $_.Description $NAdapterModel = $NAdapterModel.trimstart(",", " ") $MACAddress = "$MACAddress, " + $_.MacAddress $MACAddress = $MACAddress.trimstart(",", " ") $IPV4Address = "$IPV4Address, " + $_.IpAddress[0] $IPV4Address = $IPV4Address.trimstart(",", " ") $IPV6Address = "$IPV6Address, " + $_.IpAddress[1] $IPV6Address = $IPV6Address.trimstart(",", " ") } foreach ($_ in gwmi WmiMonitorID -Namespace root\wmi -ComputerName $Comp) { $MonModel = "$MonModel, " + [System.Text.Encoding]::ASCII.GetString($_.UserFriendlyName) $MonModel = $MonModel.trimstart(",", " ") $MonNumber = "$MonNumber, " + [System.Text.Encoding]::ASCII.GetString($_.SerialNumberID) $MonNumber = $MonNumber.trimstart(",", " ") } foreach ($_ in gwmi Win32_VideoController -ComputerName $Comp) { $VGAName = "$VGAName," + $_.Description $VGAName = $VGAName.trimstart(",", " ") $VGARam = "$VGARam, " + $_.AdapterRam/1Mb $VGARam = $VGARam.trimstart(",", " ") } $UserLoggedIn = ((gwmi win32_computersystem -comp $comp).UserName) $RAM = (gwmi Win32_ComputerSystem -ComputerName $Comp).TotalPhysicalMemory/1mb $RAM = [math]::Round($RAM) $OperatingSystem = (gwmi Win32_OperatingSystem -ComputerName $Comp).Caption $SP = (gwmi Win32_OperatingSystem -ComputerName $Comp).ServicePackMajorVersion $LastLogOn = ((Get-ADComputer -Identity $Comp -Properties LastLogonDate).LastLogonDate).ToShortDateString() $LastReboot = [Management.ManagementDateTimeConverter]::toDateTime((gwmi Win32_OperatingSystem -ComputerName $Comp).LastBootUpTime).toString() # Типы ПК в зависимости от значения ChassisTypes указаны здесь http://marckean.com/2010/12/21/sccm-2007-r2-collection-queries/ $PCType = (gwmi Win32_SystemEnclosure -ComputerName $Comp).ChassisTypes switch ($PCType) { 1 {$PCTypeT = "Other"} 2 {$PCTypeT = "Unknown"} 3 {$PCTypeT = "Desktop (Virtual machines as well)"} 4 {$PCTypeT = "Low Profile Desktop"} 5 {$PCTypeT = "Pizza Box"} 6 {$PCTypeT = "Mini Tower"} 7 {$PCTypeT = "Tower"} 8 {$PCTypeT = "Portable (Laptop or Notebook)"} 9 {$PCTypeT = "Laptop (Not as popular)"} 10 {$PCTypeT = "Notebook (Popular)"} 11 {$PCTypeT = "Hand Held"} 12 {$PCTypeT = "Docking Station (Laptop or Notebook)"} 13 {$PCTypeT = "All in One"} 14 {$PCTypeT = "Sub Notebook"} 15 {$PCTypeT = "Space-Saving"} 16 {$PCTypeT = "Lunch Box"} 17 {$PCTypeT = "Main System Chassis (Physical Server)"} 18 {$PCTypeT = "Expansion Chassis"} 19 {$PCTypeT = "Sub Chassis"} 20 {$PCTypeT = "Bus Expansion Chassis"} 21 {$PCTypeT = "Peripheral Chassis (Laptop or Notebook)"} 22 {$PCTypeT = "Storage Chassis"} 23 {$PCTypeT = "Rack Mount Chassis (Physical Server)"} 24 {$PCTypeT = "Sealed-Case PC"} default {$PCTypeT = "Not provided"} } # Пишем в лог $null = $PCInventory.Append("$Comp;$Availability;$Manufacturer;$Model;$SerialNumber;$CPU;$HDDCapacity;$HDDCaption;$NAdapterModel;$MACAddress;$IPV4Address;$IPV6Address;$RAM;$MonModel;$MonNumber;$OperatingSystem;$SP;$VGAName;$VGARam;$UserloggedIn;$LastLogOn;$LastReboot;$PCTypeT`n") #changed добавлены $MonModel, $MonName } else { # Пишем в лог, что нет связи с ПК $Availability = 0 $null = $PCInventory.Append("$Comp;$Availability`n") } } $PCInventoryStr = $PCInventory.ToString() Set-Content -Value $PCInventoryStr -Path "C:\Users\odmin\Desktop\PCInventory.csv"После того как всё это отработало смотрим наш файл и извлекаем всё полезное для себя. Сразу точно могу сказать что мониторы Dell не инвентаризируются по WMI в принципе. Серийный номер выдаваемый скриптом из WMI не имеет ничего общего с настоящим. Плюс некоторые производители могут хранить серийники мониторов в другом месте.
Комментариев нет:
Отправить комментарий