使用Dell的WSMAN脚本对BIOS进行更新,我们需要进行以下操作:

  1. 下载BIOS文件并通过TFTP或其它方式共享
  2. 查看目前系统中的BIOS及其它固件的版本与状态
  3. 创建BIOS固件更新任务,将BIOS导入Lifecycle Controller
  4. 创建重启任务
  5. 执行重启任务和固件刷新任务

首先,需要到support.dell.com下载系统相应的BIOS文件。WSMAN使用Windows版的BIOS更新文件。我们还需要将此BIOS文件通过CIFS/NFS/http/TFTP/FTP中的任意一种方式共享出来。本例中使用tftpd32创建了一台tftp服务器,访问 IP是192.168.1.66,BIOS升级文件的文件名是BIOS_28CG8_WN32_1.6.0.exe

其次,我们要在这个英文网站下载脚本包和脚本包的说明。

关于如何使用WSMAN脚本,请参阅使用WSMAN管理戴尔服务器

在开始更新之前,我们首先要了解目前系统中的BIOS及其它固件的状态。在WSMAN脚本中的6_Firmware_Inventory的目录下,可以使用6.2_Remote_Inventory_Method_Invocation_Get_SW_Inventory.bat脚本查看目前固件版本的情况。由于内容比较多,我们可以用以下指令将输出重定向到inventory.txt文件查看。

在此文件中,我们查找与BIOS相关的内容,可以看到有类似以下的三项信息:

DCIM_SoftwareIdentity
……
    ElementName = BIOS
    FQDD = BIOS.Setup.1-1
    IdentityInfoType = OrgID:ComponentType:ComponentID
    IdentityInfoValue = DCIM:BIOS:159
    InstallationDate = NA
    InstanceID = DCIM:PREVIOUS#741__BIOS.Setup.1-1
……
    VersionString = 1.4.8
    impactsTPMmeasurements = true

DCIM_SoftwareIdentity
……
    InstanceID = DCIM:CURRENT#741__BIOS.Setup.1-1
……
    VersionString = 1.5.0

DCIM_SoftwareIdentity
……
    InstallationDate = 2013-06-11T21:07:06Z
    InstanceID = DCIM:INSTALLED#741__BIOS.Setup.1-1
……
    VersionString = 1.5.0

注意查看以上InstanceID,分别是PREVIOUS、CURRENT和INSTALLED,对应的有各自的VersionString显示版本号。由此我们可以知道上一次(PREVIOUS)的BIOS版本是1.4.8,目前(CURRENT)的版本是1.5.0,上一次安装(INSTALLED)版本是1.5.0,安装时间可以查看InstallationDate的值。

请记录下INSTALLED的InstanceID,我们稍后需要使用。   本例中为:DCIM:INSTALLED#741__BIOS.Setup.1-1

创建BIOS固件更新任务,将BIOS导入Lifecycle Controller

戴尔WSMAN的BIOS更新脚本在7_Firmware_Update的目录下,我们可以看到此目录下与BIOS更新相关的两个文件7.7_Update_BIOS_from_HTTP_CIFS_Share_TFTP_or_FTP.bat和UpdateInputBIOS.xml

使用notepad编辑UpdateInputBIOS.xml文件,我们可以看到内容如下:

<p:InstallFromURI_INPUT xmlns:p="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/root/dcim/DCIM_SoftwareInstallationService">
  <p:URI>http://[URI-IP-ADDRESS]/[PATH-TO-EXE]/[FILE.exe]</p:URI>
  <p:Target xmlns:a="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:w="http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd">
  <a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address>
    <a:ReferenceParameters>
      <w:ResourceURI>http://schemas.dell.com/wbem/wscim/1/cim-schema/2/DCIM_SoftwareIdentity</w:ResourceURI>
      <w:SelectorSet>
        <w:Selector Name="InstanceID">DCIM:AVAILABLE:NONPCI:159:2.1.4</w:Selector>
      </w:SelectorSet>
    </a:ReferenceParameters>
  </p:Target>
</p:InstallFromURI_INPUT>

我们只需要将以下两段代码更新:<p:URI>http://[URI-IP-ADDRESS]/[PATH-TO-EXE]/[FILE.exe]</p:URI>,将其更改为BIOS文件存放的地址。其中:

如果是HTTP格式,可以使用http://[IP ADDRESS]/[PATH TO FILE.exe]

如果是CIFS格式,可以使用cifs://[USERNAME]:[PASSWORD]@[URI-IP-ADDRESS]/ [FILE.exe];mountpoint=/[DIRECTORYNAME]

如果是TFTP或者FTP格式,请使用tftp://[IP ADDRESS]/[PATH TO FILE.exe]或者ftp://[IP ADDRESS]/[PATH TO FILE.exe]

本例中我们填入tftp://192.168.1.66/BIOS_28CG8_WN32_1.6.0.exe

第二段需要更新的代码是<w:Selector Name="InstanceID">DCIM:AVAILABLE:NONPCI:159:2.1.4</w:Selector>。我们需要填入刚才记录下的InstanceID: DCIM:INSTALLED#741__BIOS.Setup.1-1

其它选项保持不变。更改后的UpdateInputBIOS.xml文件如下图所示,注意红线标识的更新部分。

接下来执行7.7_Update_BIOS_from_HTTP_CIFS_Share_TFTP_or_FTP.bat脚本更新BIOS。系统将开始从指定的URI下载BIOS更新文件。执行后输出如下:

红色下划线的是输入的指令,蓝色为脚本实际执行的指令。请注意任务号为:JID_710063564357。同时TFTP服务器显示正在下载:

使用10_Job_Control_Management目录下的10.2.3_List_All_Jobs_In_JobStore.bat脚本可以查看目前任务执行的情况及任务队列。本例中,我们运行以下指令,结果如图:

10.2.3_List_All_Jobs_In_JobStore.bat 192.168.1.100 root calvin

再次查看,可以看到下载已经完成。这样新的BIOS文件已经被下载到系统中。但是任务仍然未被执行,任务执行时间JobStartTime是NA。一会儿我们将用脚本执行它。

创建重启任务

BIOS的更新需要重启,因此我们还需要创建一个重启的任务。在7_Firmware_Update的目录下还有一个重启机器的脚本文件7.8_CreateRebootJob.bat以及对应的配置文件reboot.xml。

使用Notepad编辑reboot.xml,可以看到以下内容:

<p:CreateRebootJob_INPUT xmlns:p="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/root/dcim/DCIM_SoftwareInstallationService">
  <p:RebootJobType>2</p:RebootJobType>
</p:CreateRebootJob_INPUT>

我们只需要设置RebootJobType。可以设置的数字包括:1=PowerCycle – 关闭电源再重启;2 = Graceful Reboot without forced shutdown – 正常关机再重启;3 = Graceful reboot with forced shutdown – 强制关机再重启。本例中我们设置为2。

执行7.8_CreateRebootJob.bat脚本,注意InstanceID:

使用10.2.3_List_All_Jobs_In_JobStore.bat脚本查看所有任务及队列,可以看见BIOS更新的任务JID_710063564357和重启系统的任务RID_710084914988都未被执行。

接下来我们需要到10_Job_Control_Management目录下使用10.2.1_Setup_Job_Queue.bat脚本和对应的SetupJobQueue.xml配置文件执行这两个任务。

使用Notepad编辑SetupJobQueue.xml文件:

<p:SetupJobQueue_INPUT xmlns:p="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/root/dcim/DCIM_JobService">
  <p:JobArray>JID_710063564357</p:JobArray>
  <p:JobArray>RID_710084914988</p:JobArray>
  <p:StartTimeInterval>TIME_NOW</p:StartTimeInterval>
  <p:UntilTime>20130612121500</p:UntilTime>
</p:SetupJobQueue_INPUT>

我们在JobArray中填入需要执行的两个任务的InstanceID: JID_710063564357和RID_710084914988。更改StartTimeInterval参数,设定执行任务的时间, TIME_NOW是立即执行,也可以设置为某一时刻,格式是“年年年年月月日日时时分分秒秒”。UntilTime是运行的时间窗口,如果超过此时间窗口,指令将不会被执行。UntilTime必须晚于当前时间。

保存SetupJobQueue.xml文件,执行10.2.1_Setup_Job_Queue.bat脚本:

可以看到系统自动重启并进入Lifecycle Controller进行BIOS更新:

使用10.2.3_List_All_Jobs_In_JobStore.bat脚本查看所有任务,可以看到两个任务的StartTime都改为Time_NowReboot的任务已经完成,BIOS更新的任务正在运行中。

等待数分钟后,BIOS更新完毕。再次使用10.2.3_List_All_Jobs_In_JobStore.bat脚本查看所有任务,可以看到BIOS更新任务已经完成。

再次使用6.2_Remote_Inventory_Method_Invocation_Get_SW_Inventory.bat脚本查看固件版本的情况,可以看到相应的BIOS版本都已更新。

DCIM_SoftwareIdentity
……
    InstanceID = DCIM:PREVIOUS#741__BIOS.Setup.1-1
    VersionString = 1.5.0
……
    InstanceID = DCIM:CURRENT#741__BIOS.Setup.1-1
    VersionString = 1.6.0
……
    InstanceID = DCIM:INSTALLED#741__BIOS.Setup.1-1
VersionString = 1.6.0

以上所有操作也可以通过直接拷贝批处理文件中的指令,根据需要修改后直接执行。

总结:

查看BIOS及固件版本:6.2_Remote_Inventory_Method_Invocation_Get_SW_Inventory.bat

创建更新BIOS的任务:7.7_Update_BIOS_from_HTTP_CIFS_Share_TFTP_or_FTP.bat

创建重启任务:7.8_CreateRebootJob.bat

查看任务状态及队列:10.2.3_List_All_Jobs_In_JobStore.bat

执行队列中的任务:10.2.1_Setup_Job_Queue.bat

附件:

常见缩写

描述

BIOS

Basic Input / Output System

HW

Hardware

iDRAC

Integrated DELL Remote Access Controller

IPL

Initial Program Load

DUP

Dell Update Package

MOF

Managed Object File

CIM

Common Information Model

NIC

Network Interface Controller

RAID

Redundant Array of Independent Disks

FQDD

Fully Qualified Device Description

UEFI

Unified Extensible Firmware Interface

AMEA

Advanced Management Enablement Adapter

HII

Human Interface Infrastructure

WSMAN

WS-Management is a specification of a SOAP-based protocol for the management of servers, devices, applications and more