Forum Discussion

GEEK_21's avatar
GEEK_21
Brass Contributor
Oct 25, 2024

Need to export laptop specs to my usb

 

Hi all

So I created an iso image with ADK to run my info.bat

Now I have encountered a new problem I need to export the info.txt file that contains the computer information on my usb.

2. And it will be better if I can loop the "CD" commands and execute directly info.bat without having to write all these commands at startup



info.bat 

 

 

 

wpeinit
@echo off
setlocal enabledelayedexpansion
set ScriptName=bat.ps1
set USBDrivePath=X:\Windows\System32\Apps\

echo Checking for the script in %USBDrivePath%...

rem Check if the specified path exists
if exist "%USBDrivePath%%ScriptName%" (
    echo USB drive found at %USBDrivePath%.
    echo Executing script: %USBDrivePath%%ScriptName%
    powershell -ExecutionPolicy Bypass -File "%USBDrivePath%%ScriptName%"
) else (
    echo USB drive not found or script not present.
    pause
)

endlocal

 

 

 


bat.ps1 :

 

 

 

# Set the path for the USB drive
$usbDrivePath = "X:\Windows\System32\Apps\"

# Gather system information
$namespace = "ROOT\cimv2"

# Battery Information
$battery = Get-CimInstance -Namespace $namespace -ClassName "Win32_Battery"
$namespace = "ROOT\WMI"
$FullChargedCapacity = (Get-CimInstance -Namespace $namespace -ClassName "BatteryFullChargedCapacity").FullChargedCapacity
$DesignedCapacity = (Get-WmiObject -Namespace $namespace -ClassName "BatteryStaticData").DesignedCapacity
$batteryInfo = "No battery information available."
if ($battery) {
    $batteryInfo = @"
$([math]::Round(($FullChargedCapacity / $DesignedCapacity) * 100)) %
"@
}

# Device Info
$ComputerModel = (Get-WmiObject -Class:Win32_ComputerSystem).Model

# CPU Information
$cpu = Get-CimInstance -ClassName Win32_Processor
$cpuName = $cpu.Name

# GPU Information
$gpu = Get-CimInstance -Namespace root\cimv2 -ClassName Win32_VideoController
$gpuName = $gpu.Name -join "; "  # Join multiple GPUs if present

# Memory Information
$memory = Get-CimInstance -ClassName Win32_PhysicalMemory
$totalMemory = 0
foreach ($m in $memory) {
    $totalMemory += $m.Capacity
}
$totalMemoryGB = [math]::Round($totalMemory / 1GB)

# Physical Disk Information
$diskInfo = ""
$primaryDisk = Get-CimInstance -ClassName Win32_DiskDrive | Where-Object { $_.Index -eq 0 }

if ($primaryDisk) {
    $totalSizeGB = [math]::Round($primaryDisk.Size / 1GB, 2)
    $diskInfo = "$totalSizeGB GB"
} else {
    $diskInfo = "No primary disk found."
}

# Prompt the user for BIOS information
$biosInfo = Read-Host "Please enter BIOS information"

# Display system information
Write-Host "-------------------------------------"
Write-Host "Computer Model: $ComputerModel"
Write-Host "Battery Info: $batteryInfo"
Write-Host "CPU: $cpuName"
Write-Host "GPU: $gpuName"
Write-Host "Memory: $totalMemoryGB GB"
Write-Host "Disk: $diskInfo"
Write-Host "BIOS Information: $biosInfo"
Write-Host "-------------------------------------"

# Set the path for the output text file
$txtFilePath = "${usbDrivePath}Info.txt"  # Save to the USB drive

# Function to gather additional information
function Gather-Information {
    $screenInfo = Read-Host "Please enter screen information"
    $keyboardInfo = Read-Host "Please enter keyboard information"
    $otherInfo = Read-Host "Please enter other information"
    $priceInfo = Read-Host "Please enter price information"

    return @{
        Screen = $screenInfo
        Keyboard = $keyboardInfo
        Other = $otherInfo
        Price = $priceInfo
    }
}

# Function to export information to a text file with UTF-8 encoding
function Export-Information {
    param (
        [hashtable]$systemInfo,
        [hashtable]$userInfo,
        [int]$entryNumber  # Accept the entry number
    )

    # Create a formatted string for output
    $output = @"
Date: $(Get-Date)
Number: $entryNumber
Computer Model: $($systemInfo.ComputerModel)
Battery Info: $($systemInfo.BatteryInfo)
CPU: $($systemInfo.CPU)
GPU: $($systemInfo.GPU)
Memory: $($systemInfo.MemoryGB) GB
Disk: $($systemInfo.DiskInfo)
BIOS Information: $($systemInfo.BIOSInfo)
Screen: $($userInfo.Screen)
Keyboard: $($userInfo.Keyboard)
Other Information: $($userInfo.Other)
Price: $($userInfo.Price)
"@

    # Append the information to the text file with UTF-8 encoding
    $output | Out-File -FilePath $txtFilePath -Encoding UTF8 -Append
    Write-Host "System information saved to $txtFilePath"
}

# Function to run the keyboard test utility
function Run-keytest {
    $keyboardTestPath = "${usbDrivePath}keytest.exe"

    if (-Not (Test-Path $keyboardTestPath)) {
        Write-Host "keytest not found in $usbDrivePath."
        return $false
    }

    try {
        Start-Process -FilePath $keyboardTestPath -Wait
        return $true
    } catch {
        Write-Host "Failed to run keytest: $_"
        return $false
    }
}

# Function to eject the USB drive
function Eject-USB {
    $ejectCommand = "powershell -command ""(New-Object -COMObject Shell.Application).Namespace('$usbDrivePath').InvokeVerb('Eject')"""
    Start-Process -FilePath powershell -ArgumentList $ejectCommand -Wait
    Write-Host "USB drive '$usbDrivePath' ejected."
}

# Main script execution
Write-Host "Starting keyboard test utility..."

# Prompt the user for the starting number
$startingNumber = Read-Host "Please enter the starting number"

if (-not [int]::TryParse($startingNumber, [ref]$null)) {
    Write-Host "Invalid number entered. Please enter a valid integer."
    exit 1
}

if (Run-keytest) {
    Write-Host "Keyboard test completed. Proceeding to enter additional information."
    
    # Gather system information into a hashtable
    $systemInfo = @{
        ComputerModel = $ComputerModel
        BatteryInfo = $batteryInfo
        CPU = $cpuName
        GPU = $gpuName
        MemoryGB = $totalMemoryGB
        DiskInfo = $diskInfo
        BIOSInfo = $biosInfo  # Include user-entered BIOS information
    }
    
    # Call the function to gather additional information
    $userInfo = Gather-Information 
    
    # Export everything to a text file with the user-defined starting number
    Export-Information -systemInfo $systemInfo -userInfo $userInfo -entryNumber $startingNumber  

    # Eject the USB drive
    Eject-USB

    # Shutdown the PC
    Stop-Computer -Force
} else {
    Write-Host "Keyboard test was not completed successfully."
}

 

 

 



 
 
 
  • Shierven's avatar
    Shierven
    Copper Contributor
    By modifying your batch file as outlined, you should be able to easily export your laptop specifications to a USB drive without needing to manually enter commands on startup. It's always a good idea to test your scripts in a controlled environment to ensure everything works as expected!
  • AprilPatel's avatar
    AprilPatel
    Copper Contributor

    You’d like to execute info.bat without manually writing the cd commands each time you start up. You can simplify this by making sure your batch file knows where to go directly by embedding the path in the script. Just use the full path for your commands.

  • garland's avatar
    garland
    Copper Contributor

    Right-click on the screenshot and select Copy.
    Go to your USB drive in File Explorer, right-click in the blank area, and select Paste.

Resources