Крипт для сбора информации о ПК

This commit is contained in:
2026-02-26 09:23:13 +00:00
parent 1a0d93d89e
commit 5f28527ff2

View File

@@ -1,344 +1,344 @@
# Get-FullHWInventory.ps1 - ВЕРСИЯ ДЛЯ СОХРАНЕНИЯ В XML # Get-FullHWInventory.ps1 - ВЕРСИЯ ДЛЯ СОХРАНЕНИЯ В XML!
# Переменные # Переменные
$Computer = $env:COMPUTERNAME $Computer = $env:COMPUTERNAME
$User = $env:USERNAME $User = $env:USERNAME
$Date = Get-Date -Format "yyyy-MM-dd HH:mm:ss" $Date = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
Write-Host "Собираем информацию о системе для $Computer..." -ForegroundColor Yellow Write-Host "Собираем информацию о системе для $Computer..." -ForegroundColor Yellow
# Функция для получения установленного ПО # Функция для получения установленного ПО
function Get-InstalledSoftware { function Get-InstalledSoftware {
$software = @() $software = @()
# Из реестра (32-bit и 64-bit программы) # Из реестра (32-bit и 64-bit программы)
$paths = @( $paths = @(
"HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*", "HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*",
"HKLM:\Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*" "HKLM:\Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*"
) )
foreach ($path in $paths) { foreach ($path in $paths) {
if (Test-Path $path) { if (Test-Path $path) {
$software += Get-ItemProperty $path | $software += Get-ItemProperty $path |
Where-Object { $_.DisplayName -and $_.DisplayName -notlike "*Update for*" -and $_.DisplayName -notlike "*KB*" } | Where-Object { $_.DisplayName -and $_.DisplayName -notlike "*Update for*" -and $_.DisplayName -notlike "*KB*" } |
Select-Object @{Name="Name";Expression={$_.DisplayName}}, Select-Object @{Name="Name";Expression={$_.DisplayName}},
@{Name="Version";Expression={$_.DisplayVersion}}, @{Name="Version";Expression={$_.DisplayVersion}},
@{Name="Publisher";Expression={$_.Publisher}}, @{Name="Publisher";Expression={$_.Publisher}},
@{Name="InstallDate";Expression={$_.InstallDate}}, @{Name="InstallDate";Expression={$_.InstallDate}},
@{Name="UninstallString";Expression={$_.UninstallString}} @{Name="UninstallString";Expression={$_.UninstallString}}
} }
} }
# Сортируем и возвращаем # Сортируем и возвращаем
return ($software | Sort-Object Name | Select-Object -First 100) return ($software | Sort-Object Name | Select-Object -First 100)
} }
# Функция для получения сервисов # Функция для получения сервисов
function Get-ServiceInfo { function Get-ServiceInfo {
return (Get-Service | Where-Object { $_.Status -eq "Running" } | Select-Object Name, DisplayName, Status | Sort-Object Name) return (Get-Service | Where-Object { $_.Status -eq "Running" } | Select-Object Name, DisplayName, Status | Sort-Object Name)
} }
# Функция для получения процессов # Функция для получения процессов
function Get-ProcessInfo { function Get-ProcessInfo {
return (Get-Process | Select-Object Name, CPU, WorkingSet, StartTime | Sort-Object CPU -Descending | Select-Object -First 50) return (Get-Process | Select-Object Name, CPU, WorkingSet, StartTime | Sort-Object CPU -Descending | Select-Object -First 50)
} }
# Сбор основной информации о системе # Сбор основной информации о системе
Write-Host "Сбор информации об оборудовании..." -ForegroundColor Yellow Write-Host "Сбор информации об оборудовании..." -ForegroundColor Yellow
$CS = Get-WmiObject -Class Win32_ComputerSystem $CS = Get-WmiObject -Class Win32_ComputerSystem
$OS = Get-WmiObject -Class Win32_OperatingSystem $OS = Get-WmiObject -Class Win32_OperatingSystem
$Proc = Get-WmiObject -Class Win32_Processor $Proc = Get-WmiObject -Class Win32_Processor
$RAM = [math]::Round($CS.TotalPhysicalMemory / 1GB, 2) $RAM = [math]::Round($CS.TotalPhysicalMemory / 1GB, 2)
$Motherboard = Get-WmiObject -Class Win32_BaseBoard $Motherboard = Get-WmiObject -Class Win32_BaseBoard
$BIOS = Get-WmiObject -Class Win32_BIOS $BIOS = Get-WmiObject -Class Win32_BIOS
# Сбор информации о дисках # Сбор информации о дисках
$diskList = @() $diskList = @()
$disks = Get-WmiObject -Class Win32_LogicalDisk -Filter "DriveType=3" $disks = Get-WmiObject -Class Win32_LogicalDisk -Filter "DriveType=3"
foreach ($disk in $disks) { foreach ($disk in $disks) {
$diskInfo = [PSCustomObject]@{ $diskInfo = [PSCustomObject]@{
Drive = $disk.DeviceID Drive = $disk.DeviceID
SizeGB = [math]::Round($disk.Size/1GB, 0) SizeGB = [math]::Round($disk.Size/1GB, 0)
FreeSpaceGB = [math]::Round($disk.FreeSpace/1GB, 0) FreeSpaceGB = [math]::Round($disk.FreeSpace/1GB, 0)
FileSystem = $disk.FileSystem FileSystem = $disk.FileSystem
VolumeName = $disk.VolumeName VolumeName = $disk.VolumeName
} }
$diskList += $diskInfo $diskList += $diskInfo
} }
# Физические диски # Физические диски
$physicalDiskList = @() $physicalDiskList = @()
$physDisks = Get-WmiObject -Class Win32_DiskDrive $physDisks = Get-WmiObject -Class Win32_DiskDrive
foreach ($physDisk in $physDisks) { foreach ($physDisk in $physDisks) {
$physDiskInfo = [PSCustomObject]@{ $physDiskInfo = [PSCustomObject]@{
Model = $physDisk.Model Model = $physDisk.Model
SizeGB = [math]::Round($physDisk.Size/1GB, 0) SizeGB = [math]::Round($physDisk.Size/1GB, 0)
InterfaceType = $physDisk.InterfaceType InterfaceType = $physDisk.InterfaceType
SerialNumber = $physDisk.SerialNumber SerialNumber = $physDisk.SerialNumber
} }
$physicalDiskList += $physDiskInfo $physicalDiskList += $physDiskInfo
} }
# Видеокарта # Видеокарта
$videoList = @() $videoList = @()
$videoCards = Get-WmiObject -Class Win32_VideoController $videoCards = Get-WmiObject -Class Win32_VideoController
foreach ($video in $videoCards) { foreach ($video in $videoCards) {
$videoInfo = [PSCustomObject]@{ $videoInfo = [PSCustomObject]@{
Name = $video.Name Name = $video.Name
RAM = if ($video.AdapterRAM) { [math]::Round($video.AdapterRAM/1MB, 0) } else { 0 } RAM = if ($video.AdapterRAM) { [math]::Round($video.AdapterRAM/1MB, 0) } else { 0 }
DriverVersion = $video.DriverVersion DriverVersion = $video.DriverVersion
RefreshRate = $video.CurrentRefreshRate RefreshRate = $video.CurrentRefreshRate
} }
$videoList += $videoInfo $videoList += $videoInfo
} }
# Сетевые адаптеры # Сетевые адаптеры
$networkList = @() $networkList = @()
$netAdapters = Get-WmiObject -Class Win32_NetworkAdapterConfiguration | Where-Object { $_.IPEnabled -eq $true } $netAdapters = Get-WmiObject -Class Win32_NetworkAdapterConfiguration | Where-Object { $_.IPEnabled -eq $true }
foreach ($netAdapter in $netAdapters) { foreach ($netAdapter in $netAdapters) {
$netName = (Get-WmiObject -Class Win32_NetworkAdapter | Where-Object { $_.Index -eq $netAdapter.Index }).Name $netName = (Get-WmiObject -Class Win32_NetworkAdapter | Where-Object { $_.Index -eq $netAdapter.Index }).Name
$networkInfo = [PSCustomObject]@{ $networkInfo = [PSCustomObject]@{
Name = $netName Name = $netName
IPAddress = $netAdapter.IPAddress -join ", " IPAddress = $netAdapter.IPAddress -join ", "
MACAddress = $netAdapter.MACAddress MACAddress = $netAdapter.MACAddress
DHCPEnabled = $netAdapter.DHCPEnabled DHCPEnabled = $netAdapter.DHCPEnabled
DNSServers = $netAdapter.DNSServerSearchOrder -join ", " DNSServers = $netAdapter.DNSServerSearchOrder -join ", "
} }
$networkList += $networkInfo $networkList += $networkInfo
} }
# Мониторы # Мониторы
$monitorList = @() $monitorList = @()
try { try {
$monitors = Get-WmiObject -Class WmiMonitorID -Namespace root\wmi -ErrorAction SilentlyContinue $monitors = Get-WmiObject -Class WmiMonitorID -Namespace root\wmi -ErrorAction SilentlyContinue
foreach ($monitor in $monitors) { foreach ($monitor in $monitors) {
$manufacturer = if ($monitor.ManufacturerName) { $manufacturer = if ($monitor.ManufacturerName) {
[System.Text.Encoding]::ASCII.GetString($monitor.ManufacturerName -ne 0) [System.Text.Encoding]::ASCII.GetString($monitor.ManufacturerName -ne 0)
} else { "Unknown" } } else { "Unknown" }
$name = if ($monitor.UserFriendlyName) { $name = if ($monitor.UserFriendlyName) {
[System.Text.Encoding]::ASCII.GetString($monitor.UserFriendlyName -ne 0) [System.Text.Encoding]::ASCII.GetString($monitor.UserFriendlyName -ne 0)
} else { "Unknown" } } else { "Unknown" }
$serial = if ($monitor.SerialNumberID) { $serial = if ($monitor.SerialNumberID) {
[System.Text.Encoding]::ASCII.GetString($monitor.SerialNumberID -ne 0) [System.Text.Encoding]::ASCII.GetString($monitor.SerialNumberID -ne 0)
} else { "Unknown" } } else { "Unknown" }
$monitorInfo = [PSCustomObject]@{ $monitorInfo = [PSCustomObject]@{
Manufacturer = $manufacturer Manufacturer = $manufacturer
Name = $name Name = $name
SerialNumber = $serial SerialNumber = $serial
YearOfManufacture = $monitor.YearOfManufacture YearOfManufacture = $monitor.YearOfManufacture
} }
$monitorList += $monitorInfo $monitorList += $monitorInfo
} }
} }
catch { catch {
Write-Host "⚠️ Не удалось получить информацию о мониторах" -ForegroundColor Yellow Write-Host "⚠️ Не удалось получить информацию о мониторах" -ForegroundColor Yellow
} }
# Принтеры # Принтеры
$printerList = @() $printerList = @()
$printers = Get-WmiObject -Class Win32_Printer | Where-Object { $printers = Get-WmiObject -Class Win32_Printer | Where-Object {
$_.Name -notlike "*Microsoft*" -and $_.Name -notlike "*Microsoft*" -and
$_.Name -notlike "*OneNote*" -and $_.Name -notlike "*OneNote*" -and
$_.Name -notlike "*Fax*" -and $_.Name -notlike "*Fax*" -and
$_.Name -notlike "*XPS*" $_.Name -notlike "*XPS*"
} }
foreach ($printer in $printers) { foreach ($printer in $printers) {
$printerInfo = [PSCustomObject]@{ $printerInfo = [PSCustomObject]@{
Name = $printer.Name Name = $printer.Name
Default = $printer.Default Default = $printer.Default
Network = $printer.Network Network = $printer.Network
DriverName = $printer.DriverName DriverName = $printer.DriverName
PortName = $printer.PortName PortName = $printer.PortName
Shared = $printer.Shared Shared = $printer.Shared
} }
$printerList += $printerInfo $printerList += $printerInfo
} }
# USB устройства # USB устройства
$usbList = @() $usbList = @()
try { try {
$usbDevices = Get-WmiObject -Class Win32_USBControllerDevice | ForEach-Object { [wmi]($_.Dependent) } $usbDevices = Get-WmiObject -Class Win32_USBControllerDevice | ForEach-Object { [wmi]($_.Dependent) }
$uniqueUSB = $usbDevices | Where-Object { $uniqueUSB = $usbDevices | Where-Object {
$_.Name -and $_.Name -and
$_.Name -notlike "*USB Root Hub*" -and $_.Name -notlike "*USB Root Hub*" -and
$_.Name -notlike "*Generic USB Hub*" $_.Name -notlike "*Generic USB Hub*"
} | Select-Object -Unique Name, Description, Manufacturer } | Select-Object -Unique Name, Description, Manufacturer
foreach ($device in $uniqueUSB) { foreach ($device in $uniqueUSB) {
$usbInfo = [PSCustomObject]@{ $usbInfo = [PSCustomObject]@{
Name = $device.Name Name = $device.Name
Description = $device.Description Description = $device.Description
Manufacturer = $device.Manufacturer Manufacturer = $device.Manufacturer
} }
$usbList += $usbInfo $usbList += $usbInfo
} }
} }
catch { catch {
Write-Host "⚠️ Не удалось получить информацию о USB устройствах" -ForegroundColor Yellow Write-Host "⚠️ Не удалось получить информацию о USB устройствах" -ForegroundColor Yellow
} }
# Клавиатуры и мыши # Клавиатуры и мыши
$mouseList = @() $mouseList = @()
$mice = Get-WmiObject -Class Win32_PointingDevice $mice = Get-WmiObject -Class Win32_PointingDevice
foreach ($mouse in $mice) { foreach ($mouse in $mice) {
$mouseInfo = [PSCustomObject]@{ $mouseInfo = [PSCustomObject]@{
Name = $mouse.Name Name = $mouse.Name
Manufacturer = $mouse.Manufacturer Manufacturer = $mouse.Manufacturer
HardwareType = $mouse.HardwareType HardwareType = $mouse.HardwareType
NumberOfButtons = $mouse.NumberOfButtons NumberOfButtons = $mouse.NumberOfButtons
} }
$mouseList += $mouseInfo $mouseList += $mouseInfo
} }
$keyboardList = @() $keyboardList = @()
$keyboards = Get-WmiObject -Class Win32_Keyboard $keyboards = Get-WmiObject -Class Win32_Keyboard
foreach ($keyboard in $keyboards) { foreach ($keyboard in $keyboards) {
$keyboardInfo = [PSCustomObject]@{ $keyboardInfo = [PSCustomObject]@{
Name = $keyboard.Name Name = $keyboard.Name
Description = $keyboard.Description Description = $keyboard.Description
} }
$keyboardList += $keyboardInfo $keyboardList += $keyboardInfo
} }
# Установленное ПО # Установленное ПО
Write-Host "Сбор информации об установленном ПО..." -ForegroundColor Yellow Write-Host "Сбор информации об установленном ПО..." -ForegroundColor Yellow
$InstalledSoftware = Get-InstalledSoftware $InstalledSoftware = Get-InstalledSoftware
# Сервисы # Сервисы
Write-Host "Сбор информации о сервисах..." -ForegroundColor Yellow Write-Host "Сбор информации о сервисах..." -ForegroundColor Yellow
$Services = Get-ServiceInfo $Services = Get-ServiceInfo
# Процессы # Процессы
Write-Host "Сбор информации о процессах..." -ForegroundColor Yellow Write-Host "Сбор информации о процессах..." -ForegroundColor Yellow
$Processes = Get-ProcessInfo $Processes = Get-ProcessInfo
# Создаем главный объект со всей информацией # Создаем главный объект со всей информацией
$Inventory = [PSCustomObject]@{ $Inventory = [PSCustomObject]@{
# Информация о сборе # Информация о сборе
ScanInfo = [PSCustomObject]@{ ScanInfo = [PSCustomObject]@{
Date = $Date Date = $Date
ComputerName = $Computer ComputerName = $Computer
UserName = $User UserName = $User
ScanVersion = "1.0" ScanVersion = "1.0"
} }
# Системная информация # Системная информация
SystemInfo = [PSCustomObject]@{ SystemInfo = [PSCustomObject]@{
Manufacturer = $CS.Manufacturer Manufacturer = $CS.Manufacturer
Model = $CS.Model Model = $CS.Model
SerialNumber = $BIOS.SerialNumber SerialNumber = $BIOS.SerialNumber
Motherboard = "$($Motherboard.Manufacturer) $($Motherboard.Product)" Motherboard = "$($Motherboard.Manufacturer) $($Motherboard.Product)"
BIOSVersion = $BIOS.SMBIOSBIOSVersion BIOSVersion = $BIOS.SMBIOSBIOSVersion
BIOSDate = $BIOS.ReleaseDate BIOSDate = $BIOS.ReleaseDate
} }
# Процессоры # Процессоры
Processors = $Proc | ForEach-Object { Processors = $Proc | ForEach-Object {
[PSCustomObject]@{ [PSCustomObject]@{
Name = $_.Name Name = $_.Name
Cores = $_.NumberOfCores Cores = $_.NumberOfCores
LogicalProcessors = $_.NumberOfLogicalProcessors LogicalProcessors = $_.NumberOfLogicalProcessors
MaxClockSpeed = $_.MaxClockSpeed MaxClockSpeed = $_.MaxClockSpeed
Socket = $_.SocketDesignation Socket = $_.SocketDesignation
} }
} }
# Оперативная память # Оперативная память
RAM = @{ RAM = @{
TotalGB = $RAM TotalGB = $RAM
# Можно добавить информацию по каждому модулю # Можно добавить информацию по каждому модулю
} }
# Диски # Диски
LogicalDisks = $diskList LogicalDisks = $diskList
PhysicalDisks = $physicalDiskList PhysicalDisks = $physicalDiskList
# Видеокарты # Видеокарты
VideoCards = $videoList VideoCards = $videoList
# Сеть # Сеть
NetworkAdapters = $networkList NetworkAdapters = $networkList
# Периферия # Периферия
Peripherals = [PSCustomObject]@{ Peripherals = [PSCustomObject]@{
Monitors = $monitorList Monitors = $monitorList
Printers = $printerList Printers = $printerList
Keyboards = $keyboardList Keyboards = $keyboardList
Mice = $mouseList Mice = $mouseList
USBDevices = $usbList USBDevices = $usbList
} }
# Операционная система # Операционная система
OperatingSystem = [PSCustomObject]@{ OperatingSystem = [PSCustomObject]@{
Name = $OS.Caption Name = $OS.Caption
Version = $OS.Version Version = $OS.Version
Architecture = $OS.OSArchitecture Architecture = $OS.OSArchitecture
InstallDate = $OS.InstallDate InstallDate = $OS.InstallDate
LastBootTime = $OS.LastBootUpTime LastBootTime = $OS.LastBootUpTime
RegisteredUser = $OS.RegisteredUser RegisteredUser = $OS.RegisteredUser
Organization = $OS.Organization Organization = $OS.Organization
SerialNumber = $OS.SerialNumber SerialNumber = $OS.SerialNumber
} }
# Установленное ПО # Установленное ПО
InstalledSoftware = $InstalledSoftware InstalledSoftware = $InstalledSoftware
# Сервисы # Сервисы
Services = $Services Services = $Services
# Процессы # Процессы
Processes = $Processes Processes = $Processes
} }
# СОХРАНЯЕМ В XML # СОХРАНЯЕМ В XML
Write-Host "Сохранение данных в XML..." -ForegroundColor Yellow Write-Host "Сохранение данных в XML..." -ForegroundColor Yellow
try { try {
# Создаем папку, если её нет # Создаем папку, если её нет
$saveDir = "C:\ProgramData\Inventory" $saveDir = "C:\ProgramData\Inventory"
if (-not (Test-Path $saveDir)) { if (-not (Test-Path $saveDir)) {
New-Item -ItemType Directory -Path $saveDir -Force | Out-Null New-Item -ItemType Directory -Path $saveDir -Force | Out-Null
} }
# Формируем имя файла с датой # Формируем имя файла с датой
$dateStr = Get-Date -Format "yyyyMMdd_HHmmss" $dateStr = Get-Date -Format "yyyyMMdd_HHmmss"
$savePath = "$saveDir\Inventory_${Computer}_${dateStr}.xml" $savePath = "$saveDir\Inventory_${Computer}_${dateStr}.xml"
# Сохраняем в XML # Сохраняем в XML
$Inventory | Export-Clixml -Path $savePath -Depth 5 $Inventory | Export-Clixml -Path $savePath -Depth 5
Write-Host "✅ Данные успешно сохранены в: $savePath" -ForegroundColor Green Write-Host "✅ Данные успешно сохранены в: $savePath" -ForegroundColor Green
Write-Host " Размер файла: $([math]::Round((Get-Item $savePath).Length/1KB, 2)) KB" -ForegroundColor Green Write-Host " Размер файла: $([math]::Round((Get-Item $savePath).Length/1KB, 2)) KB" -ForegroundColor Green
# Создаем симлинк или копию с постоянным именем для удобства # Создаем симлинк или копию с постоянным именем для удобства
$latestPath = "$saveDir\Inventory_$Computer-latest.xml" $latestPath = "$saveDir\Inventory_$Computer-latest.xml"
if (Test-Path $latestPath) { if (Test-Path $latestPath) {
Remove-Item $latestPath -Force Remove-Item $latestPath -Force
} }
Copy-Item $savePath -Destination $latestPath Copy-Item $savePath -Destination $latestPath
Write-Host " 📎 Последняя версия: $latestPath" -ForegroundColor Cyan Write-Host " 📎 Последняя версия: $latestPath" -ForegroundColor Cyan
} }
catch { catch {
Write-Host "❌ Ошибка при сохранении XML: $_" -ForegroundColor Red Write-Host "❌ Ошибка при сохранении XML: $_" -ForegroundColor Red
# Пробуем сохранить в корень C:\ # Пробуем сохранить в корень C:\
try { try {
$savePath = "C:\Inventory_${Computer}_$(Get-Date -Format 'yyyyMMdd_HHmmss').xml" $savePath = "C:\Inventory_${Computer}_$(Get-Date -Format 'yyyyMMdd_HHmmss').xml"
$Inventory | Export-Clixml -Path $savePath -Depth 5 $Inventory | Export-Clixml -Path $savePath -Depth 5
Write-Host "✅ Данные сохранены в: $savePath" -ForegroundColor Yellow Write-Host "✅ Данные сохранены в: $savePath" -ForegroundColor Yellow
} }
catch { catch {
Write-Host "❌ Критическая ошибка сохранения: $_" -ForegroundColor Red Write-Host "❌ Критическая ошибка сохранения: $_" -ForegroundColor Red
} }
} }
# Показываем статистику # Показываем статистику
Write-Host "`n📊 Статистика сбора:" -ForegroundColor Cyan Write-Host "`n📊 Статистика сбора:" -ForegroundColor Cyan
Write-Host " - Программ установлено: $($Inventory.InstalledSoftware.Count)" -ForegroundColor White Write-Host " - Программ установлено: $($Inventory.InstalledSoftware.Count)" -ForegroundColor White
Write-Host " - Сервисов запущено: $($Inventory.Services.Count)" -ForegroundColor White Write-Host " - Сервисов запущено: $($Inventory.Services.Count)" -ForegroundColor White
Write-Host " - Процессов: $($Inventory.Processes.Count)" -ForegroundColor White Write-Host " - Процессов: $($Inventory.Processes.Count)" -ForegroundColor White
Write-Host " - Дисков: $($Inventory.LogicalDisks.Count)" -ForegroundColor White Write-Host " - Дисков: $($Inventory.LogicalDisks.Count)" -ForegroundColor White
Write-Host " - Сетевых адаптеров: $($Inventory.NetworkAdapters.Count)" -ForegroundColor White Write-Host " - Сетевых адаптеров: $($Inventory.NetworkAdapters.Count)" -ForegroundColor White
Write-Host " - USB устройств: $($Inventory.Peripherals.USBDevices.Count)" -ForegroundColor White Write-Host " - USB устройств: $($Inventory.Peripherals.USBDevices.Count)" -ForegroundColor White
Write-Host "`n✅ Готово!" -ForegroundColor Green Write-Host "`n✅ Готово!" -ForegroundColor Green