<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Gathering IOM Shelf Firmware and prepare for large scale Shelf firmware update in Microsoft Virtualization Discussions</title>
    <link>https://community.netapp.com/t5/Microsoft-Virtualization-Discussions/Gathering-IOM-Shelf-Firmware-and-prepare-for-large-scale-Shelf-firmware-update/m-p/45367#M2138</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Nice stuff!! &lt;SPAN __jive_emoticon_name="happy" __jive_macro_name="emoticon" class="jive_macro jive_emote" src="https://community.netapp.com/5.0.1/images/emoticons/happy.gif"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Fri, 12 Jul 2013 13:03:42 GMT</pubDate>
    <dc:creator>vinith</dc:creator>
    <dc:date>2013-07-12T13:03:42Z</dc:date>
    <item>
      <title>Gathering IOM Shelf Firmware and prepare for large scale Shelf firmware update</title>
      <link>https://community.netapp.com/t5/Microsoft-Virtualization-Discussions/Gathering-IOM-Shelf-Firmware-and-prepare-for-large-scale-Shelf-firmware-update/m-p/45362#M2137</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;So, if you guys don't have the luxury of a SAM or are just curious to gather all your IOM Shelf firmware, see the script below.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;There are prerequisites of a .csv file with a Filer title.&amp;nbsp; I get this from an oncommand Dump. (i've written a script to do that in a previous post)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;So, the script will ask you to enter the filer list.&amp;nbsp; Also, this script assumes you are using LDAP Authentication via CIFS to the filer.&amp;nbsp; If you need to customize it for credentials, feel free.&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;From the results of the script, I have another script that will globally update the shelves based on these results. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;This script is provided as is, but welcomes comments,updates, and/or suggestions.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;lt;#&lt;BR /&gt; .SYNOPSIS&lt;BR /&gt;&amp;nbsp; Collects Shelf Firmware on filers&lt;BR /&gt; .DESCRIPTION&lt;BR /&gt;&amp;nbsp; Collects Shelf firmware&lt;BR /&gt; .EXAMPLE&lt;BR /&gt;&amp;nbsp; .\Shelf_firmware.ps1&lt;BR /&gt; .Notes&lt;BR /&gt;&amp;nbsp; .Author &lt;BR /&gt;&amp;nbsp;&amp;nbsp; Josh Goldfarb &lt;BR /&gt;#&amp;gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;Function main_block {&lt;BR /&gt;## Clear screen&lt;BR /&gt;cls&lt;/P&gt;&lt;P&gt;## Starting Main&lt;BR /&gt;# Importing input file&lt;/P&gt;&lt;P&gt;$hosts = import-csv -path $inputfile &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; $array = @()&lt;BR /&gt; &lt;BR /&gt;$hosts |&amp;nbsp; % {&lt;BR /&gt;$filer = $_.filer &lt;/P&gt;&lt;P&gt; #$customobject = New-Object psobject&lt;BR /&gt; #Add-Member -inputobject $customobject -membertype Noteproperty -name Filer -value $filer&lt;BR /&gt; &lt;BR /&gt;Write-Host "`nConnecting to filer:" $Filer&lt;BR /&gt;Try {&lt;BR /&gt;$c = connect-nacontroller $filer -erroraction "silentlycontinue" &lt;BR /&gt;} catch { &lt;BR /&gt;[system.exception] | Out-Null &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;# Check if connecting to filer &lt;/P&gt;&lt;P&gt;&lt;BR /&gt;if ($c -ne $null)&amp;nbsp; &lt;BR /&gt;{&lt;BR /&gt;### &lt;BR /&gt;write-host "`n`t`t`tChecking Shelf Firmware on Filer:" $filer&lt;BR /&gt;## Gather Shelf information&lt;BR /&gt; $Shelf = Get-NaShelf | ? {$_.type -like "*IOM*"}&lt;BR /&gt;## Check for $Null Object&lt;BR /&gt; If ($Shelf -ne $Null) {&lt;BR /&gt; # Create custom object&lt;BR /&gt; ## Loop through shelves&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach ($s in $Shelf) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $customobject = New-Object psobject&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Add-Member -inputobject $customobject -membertype Noteproperty -name Filer -value $filer&lt;BR /&gt;&amp;nbsp;&amp;nbsp; Add-Member -inputobject $customobject -membertype Noteproperty -name "Connected to filer" -value "Yes"&lt;BR /&gt;&amp;nbsp;&amp;nbsp; Add-Member -inputobject $customobject -membertype Noteproperty -name "Shelves Present" -value "Yes"&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp; Add-Member -inputobject $customobject -membertype Noteproperty -name Name -value $S.name&lt;BR /&gt;&amp;nbsp;&amp;nbsp; Add-Member -inputobject $customobject -membertype Noteproperty -name Status -value $S.status&lt;BR /&gt;&amp;nbsp;&amp;nbsp; Add-Member -inputobject $customobject -membertype Noteproperty -name "type" -value $S.type&lt;BR /&gt;&amp;nbsp;&amp;nbsp; Add-Member -inputobject $customobject -membertype Noteproperty -name FirmwareA -value $S.FirmwareRevA&lt;BR /&gt;&amp;nbsp;&amp;nbsp; Add-Member -inputobject $customobject -membertype Noteproperty -name Firmwareb -value $S.FirmwareRevb&lt;BR /&gt;&amp;nbsp;&amp;nbsp; $array += $customobject&lt;BR /&gt;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp; } Else {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; Write-Host "`n`t`t`tFiler:" $filer&amp;nbsp; "Does not have any IOM3 or IOM6 Shelves"&lt;BR /&gt;&amp;nbsp;&amp;nbsp; $customobject = New-Object psobject&lt;BR /&gt;&amp;nbsp;&amp;nbsp; Add-Member -inputobject $customobject -membertype Noteproperty -name Filer -value $filer&lt;BR /&gt;&amp;nbsp;&amp;nbsp; Add-Member -inputobject $customobject -membertype Noteproperty -name "Connected to filer" -value "Yes"&lt;BR /&gt;&amp;nbsp;&amp;nbsp; Add-Member -inputobject $customobject -membertype Noteproperty -name "Shelves Present" -value "NO" &lt;BR /&gt;&amp;nbsp;&amp;nbsp; Add-Member -inputobject $customobject -membertype Noteproperty -name Name -value ""&lt;BR /&gt;&amp;nbsp;&amp;nbsp; Add-Member -inputobject $customobject -membertype Noteproperty -name Status -value ""&lt;BR /&gt;&amp;nbsp;&amp;nbsp; Add-Member -inputobject $customobject -membertype Noteproperty -name "type" -value ""&lt;BR /&gt;&amp;nbsp;&amp;nbsp; Add-Member -inputobject $customobject -membertype Noteproperty -name FirmwareA -value ""&lt;BR /&gt;&amp;nbsp;&amp;nbsp; Add-Member -inputobject $customobject -membertype Noteproperty -name Firmwareb -value ""&lt;BR /&gt;&amp;nbsp;&amp;nbsp; $array += $customobject&lt;BR /&gt;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; } else&amp;nbsp; {&lt;BR /&gt; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "`n`t`t`tCould not connect to filer:" $filer &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $customobject = New-Object psobject&lt;BR /&gt; Add-Member -inputobject $customobject -membertype Noteproperty -name Filer -value $filer&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Add-Member -inputobject $customobject -membertype Noteproperty -name "Connected to filer" -value "No" &lt;BR /&gt; Add-Member -inputobject $customobject -membertype Noteproperty -name "Shelves Present" -value "NO" &lt;BR /&gt;&amp;nbsp;&amp;nbsp; Add-Member -inputobject $customobject -membertype Noteproperty -name Name -value ""&lt;BR /&gt;&amp;nbsp;&amp;nbsp; Add-Member -inputobject $customobject -membertype Noteproperty -name Status -value ""&lt;BR /&gt;&amp;nbsp;&amp;nbsp; Add-Member -inputobject $customobject -membertype Noteproperty -name "type" -value ""&lt;BR /&gt;&amp;nbsp;&amp;nbsp; Add-Member -inputobject $customobject -membertype Noteproperty -name FirmwareA -value ""&lt;BR /&gt;&amp;nbsp;&amp;nbsp; Add-Member -inputobject $customobject -membertype Noteproperty -name Firmwareb -value ""&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $array += $customobject&lt;BR /&gt; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp; #$array += $customobject&lt;/P&gt;&lt;P&gt; Clear-Variable c &lt;BR /&gt; clear-variable filer &lt;BR /&gt; &lt;BR /&gt; }&lt;BR /&gt;&amp;nbsp; $2day = (get-date).tostring("MM-dd-yyyy-hh_mm")&lt;BR /&gt; $array | Export-Csv c:\temp\shelfinformation_$2day.csv -NoTypeInformation&lt;BR /&gt; $array | ft -autosize&lt;BR /&gt; &lt;BR /&gt; ### Close Main Function &lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;cls&lt;BR /&gt;$Host.UI.RAWUI.WindowTitle="Shelf Firmware Checker"&lt;/P&gt;&lt;P&gt;If (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))&lt;BR /&gt;{&lt;BR /&gt;cls&lt;BR /&gt;Write-Warning -Message "`nYou are attempting to execute this script in an non-elevated shell.&lt;BR /&gt;This script requires to be run under Administrator priviledge.&lt;BR /&gt;Please Re-launch Powershell as Administrator."&lt;BR /&gt; "`n"&lt;BR /&gt; "`n"&lt;BR /&gt; Timeout /t -1 &lt;BR /&gt; cls&lt;BR /&gt; Exit &lt;BR /&gt;}&lt;BR /&gt;write-host "`n"&lt;BR /&gt;$inputfile = read-host "Please enter an input file of a list of Filers you want to check Shelf Firmware on (i.e. c:\temp\filers.csv)"&lt;/P&gt;&lt;P&gt;$fileloctest = test-path $inputfile&lt;/P&gt;&lt;P&gt;If ($fileloctest -eq $false) { &lt;BR /&gt;cls&lt;BR /&gt;Write-Warning -Message "`nLocation of the file cannot be found.&lt;BR /&gt;Please check the path of the file and re-execute.&lt;BR /&gt;Exiting Script."&lt;BR /&gt; "`n"&lt;BR /&gt; "`n"&lt;BR /&gt; Timeout /t -1 &lt;BR /&gt; Exit &lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;## Clear screen&lt;BR /&gt;cls&lt;/P&gt;&lt;P&gt;$title = "Shelf Firmware Checker" &lt;BR /&gt;$message = @"&lt;BR /&gt;`nBefore the script executes we want to ensure that you have entered the proper information:&lt;BR /&gt;`n&lt;BR /&gt;`t`t`t`t`t`t`tThe input file you entered is: $inputfile&lt;BR /&gt;`t`t`t`t`t`t`tInput File's path has been confirmed: $fileloctest&lt;BR /&gt;`n&lt;BR /&gt;`t`t`t`t`t`t`tIf these are both correct, please (P)roceed&amp;nbsp; If this is not correct, please (e)xit &lt;BR /&gt;"@&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;$proceed= New-Object System.Management.Automation.Host.ChoiceDescription "&amp;amp;Proceed", `&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; "(P)roceed with Shelf Firmware Check"&lt;/P&gt;&lt;P&gt;$exit =&amp;nbsp;&amp;nbsp; New-Object System.Management.Automation.Host.ChoiceDescription "&amp;amp;exit",&lt;BR /&gt; "Type exit or (E) to exit the script" &lt;/P&gt;&lt;P&gt;$options = [System.Management.Automation.Host.ChoiceDescription[]]($proceed,$exit)&lt;/P&gt;&lt;P&gt;$result = $host.ui.PromptForChoice($title, $message, $options, 1) &lt;/P&gt;&lt;P&gt;switch ($result)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; # Selected to proceed to password change&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; main_block &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1 &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ## Exiting Script&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "`nYou have selected Exit`n"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; timeout /t -1 &lt;BR /&gt;&amp;nbsp; cls&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Exit&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 05 Jun 2025 05:58:32 GMT</pubDate>
      <guid>https://community.netapp.com/t5/Microsoft-Virtualization-Discussions/Gathering-IOM-Shelf-Firmware-and-prepare-for-large-scale-Shelf-firmware-update/m-p/45362#M2137</guid>
      <dc:creator>JGPSHNTAP</dc:creator>
      <dc:date>2025-06-05T05:58:32Z</dc:date>
    </item>
    <item>
      <title>Re: Gathering IOM Shelf Firmware and prepare for large scale Shelf firmware update</title>
      <link>https://community.netapp.com/t5/Microsoft-Virtualization-Discussions/Gathering-IOM-Shelf-Firmware-and-prepare-for-large-scale-Shelf-firmware-update/m-p/45367#M2138</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Nice stuff!! &lt;SPAN __jive_emoticon_name="happy" __jive_macro_name="emoticon" class="jive_macro jive_emote" src="https://community.netapp.com/5.0.1/images/emoticons/happy.gif"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 12 Jul 2013 13:03:42 GMT</pubDate>
      <guid>https://community.netapp.com/t5/Microsoft-Virtualization-Discussions/Gathering-IOM-Shelf-Firmware-and-prepare-for-large-scale-Shelf-firmware-update/m-p/45367#M2138</guid>
      <dc:creator>vinith</dc:creator>
      <dc:date>2013-07-12T13:03:42Z</dc:date>
    </item>
  </channel>
</rss>

