Napísal som skript v PowerShell, ktorý ma zaúlohu pomôcť v inventarizácií majetku

Zisťuje:

  • Hostname
  • Serial Number (SN)
  • RAM, aká je momentalne použitá a do akej kapacity ju môžeme rozšíriť
  • TMP modul
  • Stav batérie
  • Disk – model a kapacita
  • a na konci urobí report v html formáte

Príprava skriptu:

Vytvoríme priečinok na disku C a pomenujeme ho Tools

C:\Tools

Tu vytvoríme TXT súbor a pomenujeme ho: system_info.ps1

Vložíme skript

# system_info.ps1
Clear-Host
Write-Host "=== SYSTEM INFORMATION ===" -ForegroundColor Cyan

# SYSTEM
# SYSTEM
$computer = Get-CimInstance Win32_ComputerSystem
$os = Get-CimInstance Win32_OperatingSystem
$sysProduct = Get-CimInstance Win32_ComputerSystemProduct

Write-Host "Computer Name: $($computer.Name)"
Write-Host "Manufacturer: $($computer.Manufacturer)"
Write-Host "Model: $($computer.Model)"
Write-Host "Part Number: $(if ($sysProduct.PartNumber) { $sysProduct.PartNumber } else { 'N/A' })"
Write-Host "Serial Number: $(if ($sysProduct.IdentifyingNumber) { $sysProduct.IdentifyingNumber } else { 'N/A' })"
Write-Host "OS: $($os.Caption) $($os.OSArchitecture)"
$computer = Get-CimInstance Win32_ComputerSystem
$os = Get-CimInstance Win32_OperatingSystem
Write-Host "Computer Name: $($computer.Name)"
Write-Host "Manufacturer: $($computer.Manufacturer)"
Write-Host "Model: $($computer.Model)"
Write-Host "OS: $($os.Caption) $($os.OSArchitecture)"

# MEMORY
Write-Host "`n=== MEMORY ===" -ForegroundColor Cyan
$totalRam = [math]::Round($computer.TotalPhysicalMemory / 1GB, 2)
$ramMax = (Get-CimInstance Win32_PhysicalMemoryArray | Measure-Object MaxCapacity -Sum).Sum
$ramMaxGB = if ($ramMax) { [math]::Round($ramMax / 1024,2) } else { "N/A" }

Write-Host ("Installed RAM: {0:N2} GB" -f $totalRam)
Write-Host ("Max Supported RAM: {0} GB" -f $ramMaxGB)

Write-Host "Memory Modules:"
Get-CimInstance Win32_PhysicalMemory | ForEach-Object {
    $sizeGB = [math]::Round($_.Capacity / 1GB, 2)
    Write-Host "  Slot $($_.DeviceLocator): $sizeGB GB, Speed: $($_.Speed) MHz, Manufacturer: $($_.Manufacturer)"
}

# TPM
Write-Host "`n=== TPM ===" -ForegroundColor Cyan
$tpm = Get-CimInstance -Namespace "Root\CIMv2\Security\MicrosoftTpm" -Class Win32_Tpm -ErrorAction SilentlyContinue
if ($tpm) {
    Write-Host "TPM Present: Yes"
    Write-Host "TPM Version: $($tpm.SpecVersion)"
    Write-Host "TPM Manufacturer: $($tpm.ManufacturerID)"
} else {
    Write-Host "TPM Present: No"
}

# BATTERY
Write-Host "`n=== BATTERY ===" -ForegroundColor Cyan
$batteries = Get-CimInstance Win32_Battery -ErrorAction SilentlyContinue
if ($batteries) {
    foreach ($bat in $batteries) {
        $status = switch ($bat.BatteryStatus) {
            1 {"Discharging"}
            2 {"Charging"}
            3 {"Fully Charged"}
            4 {"Low"}
            5 {"Critical"}
            6 {"Charging and High"}
            7 {"Charging and Low"}
            8 {"Charging and Critical"}
            9 {"Undefined"}
            10 {"Partially Charged"}
            default {"Unknown"}
        }

        $chem = switch ($bat.Chemistry) {
            1 {"Other"}
            2 {"Unknown"}
            3 {"Lead Acid"}
            4 {"Nickel Cadmium"}
            5 {"Nickel Metal Hydride"}
            6 {"Lithium-ion"}
            7 {"Zinc air"}
            8 {"Lithium Polymer"}
            default {"Unknown"}
        }

        Write-Host "Name: $($bat.Name)"
        Write-Host "Chemistry: $chem"
        Write-Host "Status: $status"
        Write-Host "Design Capacity: $(if ($bat.DesignCapacity) { $bat.DesignCapacity } else { 'N/A' }) mWh"
        Write-Host "Full Charge Capacity: $(if ($bat.FullChargeCapacity) { $bat.FullChargeCapacity } else { 'N/A' }) mWh"
        Write-Host "Cycle Count: $(if ($bat.CycleCount) { $bat.CycleCount } else { 'N/A' })"
        Write-Host "Charge Remaining: $(if ($bat.EstimatedChargeRemaining) { $bat.EstimatedChargeRemaining } else { 'N/A' }) %"
    }
} else {
    Write-Host "No battery detected"
}

# DISKS
Write-Host "`n=== DISKS ===" -ForegroundColor Cyan
$disks = Get-CimInstance Win32_DiskDrive
foreach ($disk in $disks) {
    $sizeGB = if ($disk.Size) { [math]::Round($disk.Size / 1GB, 2) } else { 0 }
    Write-Host "Drive Model: $($disk.Model)"
    Write-Host "Interface: $($disk.InterfaceType)"
    Write-Host "Size: $sizeGB GB"
}

Write-Host "`n=== END OF REPORT ===" -ForegroundColor Cyan

# Vygeneruje detailný battery report do Tools
$BatteryReportPath = "C:\Tools\battery_report.html"
powercfg /batteryreport /output $BatteryReportPath
Write-Host "`nBattery report generated at: $BatteryReportPath" -ForegroundColor Cyan

Read-Host "Press Enter to continue..."

Teraz ho uložíme

Aby sa nam skript dal spustiť, tak musíme prepísať príponu z txt na ps1

Vo Windows 11 klikneme na View

Potom na Show a File name extensions

Zobrazia sa nám prípony

TXT nahradíme txz na ps1

Spúštanie skriptu

Ako prvé musíme spustiť PowerShell, ako admin

Zadáme príkaz, aby sa skript mohol spúšťať.
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

A spustíme skript

& "C:\Tools\system_info.ps1"

A potom zistíte, že v priečinku sa nachádza ďaľší súbor v html battery_report.html