もしWindowsから再起動してセットアップ画面に入ることなくBIOSを覗き込む必要があったことがあるなら、PowerShellが実はその面倒な作業を一部代行してくれます。確かに、完全なBIOSエディタではありませんが(少なくとも直接的には)、特に管理されたエンタープライズハードウェアでは、いくつかの情報を取得したり、設定を微調整したりすることもできます。少し奇妙ですが、Windows PCでは、WMI(Windows Management Instrumentation)と特定のモジュールがBIOSの詳細への小さなウィンドウを開いたり、場合によっては調整を可能にしたりします。ただし、すべてのデバイスが完璧に動作するとは限らないことに注意してください。ベンダー固有のクラスやドライバーが必要な場合があり、BIOSをリモートで変更するのは必ずしも簡単ではありません。それでも、通常のマシンでの自動化やトラブルシューティング、さらには複数のマシン全体のBIOS構成を自動化するには便利な方法です。
これらのコマンドに慣れると、作業が楽になります。特に、BIOSのバージョンを確認したり、毎回メニューを開かずにアップデートのスクリプトを作成したりしたい場合などに役立ちます。それでは、BIOS情報を取得したり、必要に応じて調整したりするための具体的な手順を見ていきましょう。
PowerShellでBIOS情報を抽出し設定を変更する方法
PowerShellでBIOS/UEFIのバージョンを確認する
これは最も基本的な出発点です。WMI経由のWin32_BIOSクラスは、BIOSのバージョン、製造元、シリアル番号などの詳細情報を提供します。監査やアップデートの確認に便利です。ほとんどの環境では、次のコマンドを実行するだけです。
Get-WmiObject -Class Win32_BIOS
ただし、新しい PowerShell バージョン (PowerShell Core 7.x など) ではGet-CimInstanceが優先されるため、次の操作が必要になる場合があります。
Get-CimInstance -ClassName Win32_BIOS
基本的な情報だけでなく、すべての情報を表示するには、Format-List *にパイプします。例えば、次のようになります。
Get-WmiObject -Class Win32_BIOS | Format-List *
SMBIOSのバージョン、シリアル番号、リリース日など、すべての情報がダンプされます。BIOSアップデートが本当に行われたかを確認したり、現在実行中のバージョンを確認したりするのに便利です。場合によっては、これを実行するだけで、互換性の問題をトラブルシューティングしたり、ログを記録したりするために必要な情報がすべて得られることがあります。
バージョンや製造元などの簡単なサブセットが必要な場合は、次のようにします。
Get-WmiObject -Class Win32_BIOS | Select SMBIOSBIOSVersion, Manufacturer, SerialNumber, ReleaseDate
また、リモートで確認する場合(たとえば、多数の PC を管理している場合)は、次のようになります。
Get-WmiObject -Class Win32_BIOS -ComputerName ComputerName
ComputerName をネットワークホスト名または IP アドレスに置き換えます。複数のマシン間でスクリプトを実行するのが簡単です。
もちろん、Windows では必要以上に困難にするため、レジストリから BIOS 情報を直接取得することもできます。
Get-ItemProperty -Path HKLM:\HARDWARE\DESCRIPTION\System\BIOS
これはより低レベルですが、WMI が協力していない場合には、より速い場合があります。
Get-BIOS PowerShellモジュールを使用してより詳細な制御を行う
もっと実践的な操作をしたい方は、PowerShell ギャラリーにあるGet-BIOSという便利なコマンドがあります。これは、Dell、HP、Lenovo、Toshiba などのエンタープライズ向け機器の BIOS 管理に特に役立ちます。
インストールするには(ネットワークにアクセスできると仮定):
Install-Module GetBIOS
インストールが完了すると、次の方法で BIOS 設定を非常にわかりやすく表示できるようになります。
Get-BIOS
これにより、現在の値が表示されますが、-ShowDescription を追加すると説明と可能なオプションも表示されます。
BIOS設定を変更するには、「SetBIOS」という別のモジュールが役立ちます。次のようなCSVファイルを用意する必要があります。
設定、値 「USBブート」、「無効」 「Wake-On-LAN」、「有効」
次に以下を実行します:
Set-BIOS -Path "C:\Path\To\Your\File.csv"
一部のマシン、特に BIOS パスワードのあるラップトップでは、 -Passwordパラメータを使用してパスワードを指定する必要があります。そうしないと、変更が失敗したり、手動の手順が必要になる場合があります。
LenovoマシンのBIOS管理
きめ細かな制御が必要な場合は、Lenovo独自のWMIクラス機能をご利用いただけます。例えば、現在のBIOS設定を確認するには、以下のコマンドを実行します。
Get-WmiObject -class Lenovo_BiosSetting -namespace root\wmi | select-object InstanceName, currentsetting
たとえば、BIOS パスワードが設定されているかどうかを確認したい場合 (もちろん、セキュリティが重要なため) は、次のようになります。
(gwmi -Class Lenovo_BiosPasswordSettings -Namespace root\wmi).PasswordState
0が返された場合はパスワードがありません。それ以外の場合は、まずパスワードを設定する必要があるかもしれません。管理者パスワードの変更は、以下の方法で行うことができます。
(gwmi -Class Lenovo_SetBiosPassword -Namespace root\wmi).SetBiosPassword("oldPassword, newPassword")
また、WOL を有効にしたり、デフォルトをリセットしたりするスクリプトを作成することもできます。
$getLenovoBIOS = gwmi -class Lenovo_SetBiosSetting -namespace root\wmi $getLenovoBIOS. SetBiosSetting("WakeOnLAN, 有効") $SaveLenovoBIOS = (gwmi -class Lenovo_SaveBiosSettings -namespace root\wmi) $SaveLenovoBIOS. SaveBiosSettings()
デフォルトにリセットするには、次の操作が必要です。
$DefaultSettings = Get-WmiObject -Namespace root\wmi -Class Lenovo_LoadDefaultSettings $DefaultSettings. LoadDefaultSettings("現在のBIOSパスワード、ASCII、US")
PowerShell 経由で HP BIOS 設定をハッキングする
HP 機器を扱う場合は、以下を使用してオプションをリストできます。
Get-WmiObject -Namespace root/hp/instrumentedBIOS -Class hp_biosEnumeration | select Name, value, possiblevalues
USBブートを無効にしたいですか?サンプルコマンドは次のとおりです。
$getHPBios = gwmi -class hp_biossettinginterface -Namespace "root\hp\instrumentedbios" $getHPBios. SetBIOSSetting('USB Storage Boot', 'Disable')
BIOS がパスワードで保護されている場合は、次のように指定する必要があります。
$HPBIOSPassword = "<utf-16/>"+"Passw0rd!1" $getHPBios. SetBIOSSetting('ネットワーク (PXE) ブート', '無効', $HPBIOSPassword)
スクリプトはコードを返します。0は成功を意味しますが、それ以外は意味がありません。出力は次のように処理できます。
$ChangeBIOS_State = $bios.setbiossetting('Network (PXE) Boot', 'Disable', $HPBIOSPassword) if (($ChangeBIOS_State.return) -eq 0) { write-host "OK" } else { write-host "Error - (Return code $($ChangeBIOS_State.return))" -Foreground Red }
LAN/WLAN自動切り替えをオンにしたいですか?同じ考え方です:
$getHPBios. SetBIOSSetting('LAN/WLAN Switching', 'Enable')
HP Client Management Script Libraryなどのツールは、この機能を拡張し、BIOS設定やファームウェアアップデートの一括エクスポート/インポートを可能にします。まずは現在の設定をエクスポートすることを検討してください。
Get-HPBIOSSettingsList | Out-File 'C:\CurrentBIOSSettings.txt'
Dellのちょっとした調整
Dellにも独自のWMIクラスがあります。ブート順序を確認するには、次のコマンドを実行してください。
Get-WmiObject -Namespace root\dellomci Dell_BootDeviceSequence | sort BootOrder | select BootDeviceName, BootOrder
Wake-on-LAN を切り替えるには:
(Get-WmiObject DCIM-BIOSService -namespace root\dcim\sysman).SetBiosAttributes($null, $null, "Wake-On-LAN", "4")
さらに深く調べたい場合は、DellBIOSProvider モジュールをインストールします。
Install-Module -Name DellBIOSProvider -Force
インストール後、次のようなコマンドで BIOS の情報を検索/設定できます。
Get-Item DellSmbios:\BootSequence\Bootsequence
または、管理者パスワードが設定されているかどうかを確認します。
Get-Item -Path DellSmbios:\Security\IsAdminPasswordSet
そうですね、これらのツールはどれも少し扱いにくく、ベンダー固有のクラスは適切なドライバがインストールされていないと動作しないこともあります。それでも、簡単なチェックや設定の自動化には、PowerShell が強力な秘密兵器になり得ます。ただ、ソファにこもって BIOS を再プログラムするのはリスクを伴いますので、ご安心ください…
まとめ
Get-WmiObjectまたは を使用してGet-CimInstance、最小限の手間で基本的な BIOS 情報を取得します。- より詳細な制御を行うには、 Get-BIOSやSetBIOSなどの特別なモジュールをインストールします。
- 特に Lenovo、HP、または Dell マシンでは、完全な制御のためにベンダー固有の WMI クラスが必要です。
- BIOS 設定をリモートで変更する前に必ず再確認し、可能であれば現在の構成をバックアップしてください。
まとめ
PowerShellは完全なBIOSエディターではありませんが、OS側から得られる情報や細かな調整の多さには驚かされます。ただし、これは主に情報収集や簡易設定用であり、BIOSの詳細なハッキングには使えないことにご注意ください。それでも、Windows内でセットアップを自動化したり、トラブルシューティングを行ったりしたい場合は、これらのコマンドは良い出発点となるでしょう。これが日常的なBIOSタスクの一部を効率化してくれることを期待しています。少なくとも数時間の時間を節約したり、再起動を回避したりできる程度にはなるでしょう。