使用PowerShell查看和更改BIOS设置

时间:2020-01-09 10:46:46  来源:igfitidea点击:

我们可以使用PowerShell在运行Windows的计算机上查看或者更改BIOS设置。让我们考虑一些示例,我们可以使用它们通过受欢迎的厂商(HP,Lenovo和Dell)的计算机上的WMI类(Windows Management Instrumentation)通过PowerShell获取或者修改某些BIOS设置。

我们可以使用Win32_BIOS类中的Get-WmiObject cmdlet在计算机上查看基本BIOS参数:

Get-WmiObject -Class Win32_BIOS | Format-List *

此命令使我们可以查看BIOS版本(SMBIOSBIOSVersion,BIOSVersion),硬件制造商,计算机序列号,ReleaseDate和其他一些信息。

我们只能列出其中一些BIOS参数:

Get-WmiObject -Class Win32_BIOS | Select-Object Manufacturer, SMBIOSBIOSVersion

我们可以使用Win32_BIOS类在运行Windows的任何计算机上查看一些BIOS信息。但是,某些硬件供应商提供了特殊的WMI类来直接从Windows OS访问BIOS(必须在计算机上安装硬件制造商的本地驱动程序)。

PowerShell的Lenovo BIOS设置管理

我们可以像这样在" Lenovo"计算机上获取BIOS参数及其值的列表:

Get-WmiObject -class Lenovo_BiosSetting -namespace root\wmi

要仅显示BIOS设置的名称及其当前值:

Get-WmiObject -class Lenovo_BiosSetting -namespace root\wmi | select-object InstanceName, currentsetting

让我们检查Lenovo计算机上是否设置了访问BIOS的密码:

(gwmi -Class Lenovo_BiosPasswordSettings -Namespace root\wmi).PasswordState

如果命令返回0,则未设置进入BIOS的密码。

我们可以在Lenovo计算机上更改某些BIOS参数。例如,让我们启用WOL(局域网唤醒):

$getLenovoBIOS = gwmi -class Lenovo_SetBiosSetting -namespace root\wmi $getLenovoBIOS.SetBiosSetting("WakeOnLAN,Enable") $SaveLenovoBIOS = (gwmi -class Lenovo_SaveBiosSettings -namespace root\wmi) $SaveLenovoBIOS.SaveBiosSettings()

在Hewlett-Packard计算机上从PowerShell更改BIOS设置

要获取" HP"计算机上的BIOS设置,它们的值和可用选项,可以使用以下命令:

Get-WmiObject -Namespace root/hp/instrumentedBIOS -Class hp_biosEnumeration | select Name, value, possiblevalues –AutoSize

我们可以通过PowerShell在HP计算机上更改某些BIOS设置。例如,我们要禁用从USB设备引导计算机。

$getHPBios = gwmi -class hp_biossettinginterface -Namespace "root\hp\instrumentedbios" $getHPBios.SetBIOSSetting('USB Storage Boot','Disable')

如果需要密码才能更改BIOS设置,则可以使用以下脚本:

$HPBIOSPassword = "<utf-16/>"+"Passw0rd!1" $getHPBios = gwmi -class hp_biossettinginterface -Namespace "root\hp\instrumentedbios" $getHPBios.SetBIOSSetting(‘Network (PXE) Boot','Disable',$HPBIOSPassword)

如果最后一条命令返回了0,则说明该命令已成功执行。我们可以使用简单的PowerShell处理程序:

$ChangeBIOS_State = $bios.setbiossetting(Network (PXE) Boot', 'Disable' , $HPBIOSPassword) $ChangeBIOS_State_Code = $ChangeBIOS_State.return If(($ChangeBIOS_State_Code) -eq 0) { write-host "OK" } Else { write-host "Error - (Return code $ChangeBIOS_State_Code)" -Foreground Red }

如果要在以太网连接可用时在HP笔记本电脑的BIOS中启用LAN/WLAN交换功能以自动从Wi-Fi断开连接,请运行以下命令:

$getHPBios.SetBIOSSetting('LAN/WLAN Switching','Enable')

使用PowerShell配置DELL BIOS设置

要在" DELL"计算机上查看和管理BIOS设置,可以使用" DCIM-BIOSService" WMI类或者更现代的" root\dellomci"类(在安装OMCI软件包后打开管理客户端工具)。

要在Dell计算机上的BIOS中查看引导设备的顺序,请运行以下命令:

Get-WmiObject -NameSpace root\dellomci Dell_BootDeviceSequence | sort bootorder | select BootDeviceName, BootOrder

例如,我们可以像这样在BIOS中启用Wake on LAN:

(Get-WmiObject DCIM-BIOSService -namespace rootdcimsysman).SetBIOSAttributes($null,$null,"Wake-On-LAN","4")

此外,戴尔还发布了一个单独的PowerShell模块" DellBIOSProvider",该模块与驱动程序安装同时安装,或者我们可以使用以下命令手动安装它:

Install-Module -Name DellBIOSProvider -Force

我们可以使用此模块查看Dell计算机上的启动顺序:

Get-ChildItem DellSmbios:\BootSequence\Bootsequence

若要更改特定的BIOS设置,请使用Set-Item cmdlet。例如,要更改BIOS密码:

Set-Item -Path Dellsmbios\Security\AdminPassword –Value BadDellPa$$ –Password G00dDe11P@ss

使用上述方法,我们可以创建PowerShell脚本以从参考计算机导出当前BIOS设置(例如,导出到CSV文件)。然后,我们可以使用PowerShell在中的所有计算机上部署相同的BIOS设置。