Auto-commit: 2025-10-31 08:58:35
This commit is contained in:
190
Bios-Configuration-HP/HpBiosConfigGui.ps1
Normal file
190
Bios-Configuration-HP/HpBiosConfigGui.ps1
Normal file
@@ -0,0 +1,190 @@
|
||||
Add-Type -AssemblyName PresentationFramework
|
||||
|
||||
# Expected BIOS values
|
||||
$expectedValues = @{
|
||||
"USB Storage Boot" = "Disable"
|
||||
"IPv6 during UEFI Boot" = "Disable"
|
||||
"Prompt on Memory Size Change" = "Disable"
|
||||
"Embedded LAN Controller" = "Disable"
|
||||
"LAN / WLAN Auto Switching" = "Enable"
|
||||
"Wake on WLAN" = "Enable"
|
||||
"HUB Wake on LAN" = "Enable"
|
||||
"Secure Boot" = "Disable"
|
||||
}
|
||||
|
||||
# Function to retrieve BIOS settings
|
||||
function Get-BIOSValues {
|
||||
$biosSettings = @{}
|
||||
$BiosInfo = Get-WmiObject -Namespace root/hp/instrumentedBIOS -Class hp_biosEnumeration
|
||||
|
||||
foreach ($Conf in $BiosInfo) {
|
||||
$Param = $Conf.Name
|
||||
$Value = $Conf.Value -join ", " # Convert array to text
|
||||
$ActiveValue = ($Conf.Value -split "," | Where-Object {$_ -match "\*"}) -replace "\*", "" # Extract active value
|
||||
|
||||
$biosSettings[$Param] = @{
|
||||
"AllValues" = $Value
|
||||
"ActiveValue" = $ActiveValue
|
||||
}
|
||||
}
|
||||
return $biosSettings
|
||||
}
|
||||
|
||||
# Retrieve initial BIOS settings
|
||||
$BiosSetup = Get-WmiObject -Class hp_biossettinginterface -Namespace root/hp/instrumentedBIOS
|
||||
$biosSettings = Get-BIOSValues
|
||||
|
||||
# Create main window
|
||||
$window = New-Object System.Windows.Window
|
||||
$window.Title = "HP BIOS Configuration - Component Status"
|
||||
$window.Width = 550
|
||||
$window.Height = 450
|
||||
$window.WindowStartupLocation = "CenterScreen"
|
||||
$window.FontFamily = "Segoe UI"
|
||||
$window.FontSize = 14
|
||||
|
||||
# Create grid
|
||||
$grid = New-Object System.Windows.Controls.Grid
|
||||
$grid.Margin = "15"
|
||||
$window.Content = $grid
|
||||
|
||||
# Define grid columns
|
||||
$grid.ColumnDefinitions.Add((New-Object System.Windows.Controls.ColumnDefinition)) # Configuration Name
|
||||
$grid.ColumnDefinitions.Add((New-Object System.Windows.Controls.ColumnDefinition)) # Status
|
||||
|
||||
# Settings list
|
||||
$settings = $expectedValues.Keys
|
||||
$statusLabels = @{} # Store UI labels for dynamic updates
|
||||
|
||||
# Function to refresh the UI with updated BIOS values
|
||||
function Refresh-UI {
|
||||
$biosSettings = Get-BIOSValues # Retrieve latest BIOS values
|
||||
|
||||
foreach ($setting in $settings) {
|
||||
if ($biosSettings.ContainsKey($setting)) {
|
||||
$ActiveValue = $biosSettings[$setting]["ActiveValue"]
|
||||
} else {
|
||||
$ActiveValue = "Unknown"
|
||||
}
|
||||
|
||||
# Check if the value matches the expected setting
|
||||
$color = if ($expectedValues.ContainsKey($setting) -and $ActiveValue -eq $expectedValues[$setting]) { "Green" } else { "Red" }
|
||||
|
||||
# Update the UI dynamically
|
||||
$statusLabels[$setting].Content = $ActiveValue
|
||||
$statusLabels[$setting].Foreground = $color
|
||||
}
|
||||
}
|
||||
|
||||
# Add rows for each setting
|
||||
$rowIndex = 0
|
||||
foreach ($setting in $settings) {
|
||||
# Configuration name label
|
||||
$label = New-Object System.Windows.Controls.Label
|
||||
$label.Content = $setting
|
||||
$label.Margin = "5"
|
||||
$label.HorizontalAlignment = "Left"
|
||||
[System.Windows.Controls.Grid]::SetRow($label, $rowIndex)
|
||||
[System.Windows.Controls.Grid]::SetColumn($label, 0)
|
||||
$grid.Children.Add($label)
|
||||
|
||||
# Get current value
|
||||
if ($biosSettings.ContainsKey($setting)) {
|
||||
$ActiveValue = $biosSettings[$setting]["ActiveValue"]
|
||||
} else {
|
||||
$ActiveValue = "Unknown"
|
||||
}
|
||||
|
||||
# Compare with expected values
|
||||
$color = if ($expectedValues.ContainsKey($setting) -and $ActiveValue -eq $expectedValues[$setting]) { "Green" } else { "Red" }
|
||||
|
||||
# Status label
|
||||
$statusLabel = New-Object System.Windows.Controls.Label
|
||||
$statusLabel.Content = $ActiveValue
|
||||
$statusLabel.Margin = "5"
|
||||
$statusLabel.FontWeight = "Bold"
|
||||
$statusLabel.HorizontalAlignment = "Right"
|
||||
$statusLabel.Foreground = $color
|
||||
$statusLabels[$setting] = $statusLabel # Store reference for later updates
|
||||
|
||||
[System.Windows.Controls.Grid]::SetRow($statusLabel, $rowIndex)
|
||||
[System.Windows.Controls.Grid]::SetColumn($statusLabel, 1)
|
||||
$grid.Children.Add($statusLabel)
|
||||
|
||||
$rowIndex++
|
||||
}
|
||||
|
||||
# Add rows dynamically
|
||||
for ($i = 0; $i -lt $settings.Count; $i++) {
|
||||
$grid.RowDefinitions.Add((New-Object System.Windows.Controls.RowDefinition))
|
||||
}
|
||||
|
||||
# Visual separator
|
||||
$separator = New-Object System.Windows.Controls.Separator
|
||||
$separator.Margin = "5,10,5,10"
|
||||
[System.Windows.Controls.Grid]::SetRow($separator, $settings.Count)
|
||||
[System.Windows.Controls.Grid]::SetColumnSpan($separator, 2)
|
||||
$grid.Children.Add($separator)
|
||||
|
||||
# "Configure" button
|
||||
$configureButton = New-Object System.Windows.Controls.Button
|
||||
$configureButton.Content = "Configure"
|
||||
$configureButton.Margin = "5"
|
||||
$configureButton.Width = 150
|
||||
$configureButton.Height = 40
|
||||
$configureButton.FontSize = 14
|
||||
$configureButton.FontWeight = "Bold"
|
||||
$configureButton.Background = "#0071C5"
|
||||
$configureButton.Foreground = "White"
|
||||
$configureButton.HorizontalAlignment = "Center"
|
||||
$configureButton.VerticalAlignment = "Bottom"
|
||||
$configureButton.Cursor = "Hand"
|
||||
$configureButton.BorderThickness = "2"
|
||||
$configureButton.BorderBrush = "Black"
|
||||
|
||||
[System.Windows.Controls.Grid]::SetRow($configureButton, $settings.Count + 1)
|
||||
[System.Windows.Controls.Grid]::SetColumnSpan($configureButton, 2)
|
||||
$grid.Children.Add($configureButton)
|
||||
|
||||
# Handle "Configure" button click
|
||||
$configureButton.Add_Click({
|
||||
$errors = @() # Store errors
|
||||
$changesMade = $false # Track changes
|
||||
|
||||
foreach ($setting in $settings) {
|
||||
if ($biosSettings.ContainsKey($setting)) {
|
||||
$currentValue = $biosSettings[$setting]["ActiveValue"]
|
||||
$expectedValue = $expectedValues[$setting]
|
||||
|
||||
if ($currentValue -ne $expectedValue) {
|
||||
try {
|
||||
$BiosSetup.SetBIOSSetting($setting, $expectedValue)
|
||||
Write-Host "Modified $setting -> $expectedValue"
|
||||
$changesMade = $true # A change was made
|
||||
} catch {
|
||||
$errors += "Error modifying $setting"
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$errors += "Setting $setting not found in BIOS"
|
||||
}
|
||||
}
|
||||
|
||||
# Refresh UI after modifications
|
||||
Refresh-UI
|
||||
|
||||
# Show message with success or errors
|
||||
if ($errors.Count -gt 0) {
|
||||
[System.Windows.MessageBox]::Show("Some errors occurred:`n`n$($errors -join "`n")", "Error", "OK", "Error")
|
||||
} elseif ($changesMade) {
|
||||
[System.Windows.MessageBox]::Show("All settings have been successfully configured and updated in the interface.", "Success", "OK", "Information")
|
||||
} else {
|
||||
[System.Windows.MessageBox]::Show("No changes were necessary.", "Success", "OK", "Information")
|
||||
}
|
||||
})
|
||||
|
||||
# Add extra row for the "Configure" button
|
||||
$grid.RowDefinitions.Add((New-Object System.Windows.Controls.RowDefinition))
|
||||
|
||||
# Show the window
|
||||
$window.ShowDialog()
|
||||
22
Bios-Configuration-HP/readme.md
Normal file
22
Bios-Configuration-HP/readme.md
Normal file
@@ -0,0 +1,22 @@
|
||||
# HP BIOS Config GUI
|
||||
|
||||
A minimal **PowerShell + WPF** tool to **audit and enforce BIOS settings** on HP devices via `root/hp/instrumentedBIOS`.
|
||||
|
||||
## ✨ What it does
|
||||
- Reads current BIOS values (`hp_biosEnumeration`)
|
||||
- Compares to an **expected policy** (color‑coded: green = OK, red = mismatch)
|
||||
- **Configure** button applies changes with `hp_biossettinginterface.SetBIOSSetting`
|
||||
- Live refresh + error summary
|
||||
|
||||
## 📌 Requirements
|
||||
- HP device exposing `root/hp/instrumentedBIOS`
|
||||
- Windows + PowerShell (run as Administrator, STA)
|
||||
- .NET Framework (WPF)
|
||||
|
||||
## 🚀 Usage
|
||||
1. (Optional) Edit the `expectedValues` table in the script to match your policy.
|
||||
2. Run in an elevated, STA PowerShell:
|
||||
```powershell
|
||||
powershell -sta -File .\HpBiosConfigGui.ps1
|
||||
```
|
||||
3. Review statuses → Configure to enforce → confirm results.
|
||||
Reference in New Issue
Block a user