利用powershell批量升级DELL的idrac

拓扑

环境及工具

环境:windows系统 工具:racadm软件, 下载地址链接 racadm 手册(pg97)链接

我们这里用的是powershell语言,因为idrac管理机是windows的环境,直接用现成的脚本环境就好了,powershell提供能力是读取文件内容及其调用racadm软件。 racadm软件是dell官方提供的升级软件,对于百十来台dell服务器的生产环境,使用racadm软件有着比较明显的优势,毕竟省去了人工点击的成本。安装位置请使用默认路径,不要修改。

升级原因

  • 由于升级了idrac管理机的java版本,导致低版本的idrac无法远程控制服务器,这一点真的很讨厌,每一次物理机出故障,都需要将近半小时的时间升级idrac的版本,无形当中增加了故障时间。搞不好手边没有升级包,还需要打电话求助客服,哎,一上午可能就这么过去了。
  • idrac系统和生产系统是两个独立的系统,idrac升级并不需要物理机重启,只重启idrac环境,因此可以随意升级。哈哈哈,这点很不错的。

idrac升级安装包

我们这里基本是730和730xd的物理机,少量630,升级包统一,如果升级不成功,直接打dell客服电话要升级包。 值得注意的是,网上直接下载的是exe文件,需要在windows系统中解压一下,双击即可解压,找到里边的payload文件夹,里边的firming.d7文件才是我们真正要用到的升级包。

脚本及使用方法

  • 生成一个文件夹,比如在桌面生成一个名为shell的文件夹。
  • 将解压出的payload文件夹直接放入shell文件夹中。
  • 新建一个文件,命名为test.txt,将管理ip、用户名、密码先写在excel中,再粘贴到test.txt里,因为切分字符用的tab。不明白的,看看文末样式图。
  • 将shell文件夹的全路径替换下边脚本的'C:\Users\winking\Desktop\shell'。
  • 按win+R,输入powershell,回车。
  • 为保证使用管理员权限,请右键powershell对话框,并点击以管理员身份运行。
  • 右键粘贴写好的脚本,就可以坐等结果了。输出文件时shell文件夹中的result.txt文件。
  • 不用担心升级出错,因为安装包不对,idrac是升级不了的。
cd 'C:\Program Files\Dell\SysMgt\rac5'
###################################切文件的地址用户名密码###########
$nu=1;$sku=Get-Content C:\Users\winking\Desktop\shell\test.txt
foreach ($line in $sku){
$e_ip=$line.Split($tab)[0]
$e_user=$line.Split($tab)[1]
$e_pwd=$line.Split($tab)[2]
'ip:'+$e_ip
'user:'+$e_user
"pw:"+$e_pwd
#########获取版本型号管理ip等信息###############
$result_getinfo=.\racadm.exe -r $e_ip -u $e_user -p $e_pwd getsysinfo 
$e_version=$result_getinfo|where {$_ -match "Firmware Version"}|%{$_.Split(' ',[StringSplitOptions]::RemoveEmptyEntries)[3]}
$e_PowerEdge=$result_getinfo|where {$_ -match "PowerEdge"}|%{$_.Split(' ',[StringSplitOptions]::RemoveEmptyEntries)[4]}
$e_Current_ip=$result_getinfo|where {$_ -match "Current IP Address      ="}|%{$_.Split(' ',[StringSplitOptions]::RemoveEmptyEntries)[4]}
'版本:'+$e_version
'服务器:'+$e_PowerEdge
'管理ip:'+$e_Current_ip
$e_ip+'|'+$e_user+'|'+$e_pwd+'|'+$e_version+'|'+$e_PowerEdge+'|'+$e_Current_ip>>C:\Users\winking\Desktop\shell\result.txt
################判断版本###################
if($e_version -eq $null){'连接不上'}elseif($e_version -notlike "2.63*")
{
    '不是2.63版本'
racadm -r $e_ip -u $e_user -p $e_pwd update -f C:\Users\winking\Desktop\shell\payload\firmimg.d7
}else{'是2.63版本'}
'###########################'+$nu;$nu++
}

样式

text.txt:

result.txt: