64 lines
2.3 KiB
PowerShell
64 lines
2.3 KiB
PowerShell
function Manage-BiosSettings {
|
|
param (
|
|
[Parameter(Mandatory=$true)]
|
|
[ValidateSet('export', 'import')]
|
|
[string]$Action,
|
|
|
|
[Parameter()]
|
|
[string]$FilePath = "bios_settings.txt"
|
|
)
|
|
|
|
# Ensure running as Administrator
|
|
if (-not ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
|
|
throw "This script must be run as Administrator"
|
|
}
|
|
|
|
switch ($Action) {
|
|
'export' {
|
|
try {
|
|
$biosSettings = gwmi -class Lenovo_BiosSetting -namespace root\wmi |
|
|
Where-Object { $_.CurrentSetting -ne "" } |
|
|
ForEach-Object { $_.CurrentSetting.replace(",", " = ") }
|
|
|
|
$biosSettings | Out-File -FilePath $FilePath -Encoding UTF8
|
|
Write-Host "BIOS settings exported to $FilePath"
|
|
}
|
|
catch {
|
|
Write-Host "Error exporting BIOS settings: $_"
|
|
}
|
|
}
|
|
|
|
'import' {
|
|
try {
|
|
if (-not (Test-Path $FilePath)) {
|
|
throw "Settings file not found: $FilePath"
|
|
}
|
|
|
|
$biosSettings = Get-Content $FilePath | Where-Object { $_ -match "=" }
|
|
|
|
foreach ($setting in $biosSettings) {
|
|
$name, $value = $setting.Split("=").Trim()
|
|
$result = (Get-WmiObject -class Lenovo_SetBiosSetting -namespace root\wmi).SetBiosSetting("$name,$value")
|
|
|
|
if ($result.return -eq "Success") {
|
|
Write-Host "Set $name to $value"
|
|
}
|
|
else {
|
|
Write-Host "Failed to set $name to $value"
|
|
}
|
|
}
|
|
|
|
$save = (Get-WmiObject -class Lenovo_SaveBiosSettings -namespace root\wmi).SaveBiosSettings()
|
|
if ($save.return -eq "Success") {
|
|
Write-Host "All BIOS settings saved successfully"
|
|
}
|
|
else {
|
|
Write-Host "Failed to save BIOS settings"
|
|
}
|
|
}
|
|
catch {
|
|
Write-Host "Error importing BIOS settings: $_"
|
|
}
|
|
}
|
|
}
|
|
} |