- Official Post
In different cases it is more convenient to read out the BIOS settings within
Windows
Depending on the brand of your machine you can find a complete handbook to achieve that with PowerShell.
Here I give you the example for Lenovo and HP - Just examples that may work for your machine or not - check the manual corresponding do your machine!
Lenovo
Tested on Lenovo T14 models.
PowerShell
# List all Settings
gwmi -class Lenovo_BiosSetting -namespace root\wmi | ForEach-Object {if ($_.CurrentSetting -ne "") {Write-Host $_.CurrentSetting.replace(","," = ")}}
# Show a partical value
gwmi -class Lenovo_BiosSetting -namespace root\wmi | Where-Object {$_.CurrentSetting.split(",",[StringSplitOptions]::RemoveEmptyEntries) -eq "MACAddressPassThrough"} | Format-List CurrentSetting
# Full BIOS Settings as table
gwmi -class Lenovo_BiosSetting -namespace root\wmi | Out-GridView
# Set a BIOS setting
# Use the following command as a template to set the value of a setting.
# This is a two-step process: set and then save.
# Note: The setting string is case sensitive and should be in the format "<item>,<value>".
(gwmi -class Lenovo_SetBiosSetting –namespace root\wmi).SetBiosSetting("WakeOnLAN,Disable")
(gwmi -class Lenovo_SaveBiosSettings -namespace root\wmi).SaveBiosSettings()
# Set a BIOS setting when a supervisor password exists
# Use the following command as a template to set the value of a setting
# when a supervisor password exists.
# This is a two-step process: set and then save.
# Note: The setting string is case sensitive and should be in the format
# "<item>,<value>,<password + encoding>".
(gwmi -class Lenovo_SetBiosSetting –namespace root\wmi).SetBiosSetting("VTdFeature,Enable,yourbiospassword,ascii,us")
(gwmi -class Lenovo_SaveBiosSettings -namespace root\wmi).SaveBiosSettings("yourbiospassword,ascii,us")
# Examples:
(gwmi -class Lenovo_SetBiosSetting -namespace root\wmi).SetBiosSetting("VirtualizationTechnology,Disable,yourbiospassword,ascii,us")
(gwmi -class Lenovo_SaveBiosSettings -namespace root\wmi).SaveBiosSettings("yourbiospassword,ascii,us")
Display More
HP
Tested on HP 840 models.
PowerShell
# Get Settings
Get-WmiObject -Namespace root/hp/InstrumentedBIOS -Class HP_BIOSEnumeration
# Get Settings but in txt file
Get-WmiObject -Namespace root/hp/InstrumentedBIOS -Class HP_BIOSEnumeration | Out-File -FilePath c:\HPBiosSettings\HPBiosSettings.txt
# Save HP Settings in a variable
$HPBiosSettings = Get-WmiObject -Namespace root/hp/InstrumentedBIOS -Class HP_BIOSSetting
# Example for changing a value
$Interface.SetBIOSSetting("Reuse Embedded LAN Address","Enable")
# Example
# Put all values in a variable
$SettingList = Get-WmiObject -Namespace root\HP\InstrumentedBIOS -Class HP_BIOSEnumeration
# Output just the name and value from the variable set before
$SettingList | Select-Object Name,Value
# Output just the name and value for "Reuse Embedded LAN Address"
($SettingList | Where-Object Name -eq "Reuse Embedded LAN Address") | select-object Name,Value
# Example with BIOS Password
$Password = "<utf-16/>"+"yourbiospassword"
$BIOS = gwmi -class hp_biossettinginterface -Namespace "root\hp\instrumentedbios"
$result = $BIOS.SetBIOSSetting("NumLock on at boot", "Enable", "$Password")
Display More