Samples/Get-UcsCimcIpReport.ps1



  [CmdletBinding()]
  Param(
    [Parameter(Mandatory=$true)]
    [Cisco.Ucs.UcsHandle[]] $Ucs
  )
  Process
  {
     Foreach ($u in $Ucs)
     {
       $sp = @(Get-UcsServiceProfile -Ucs $u -Type instance)
       $spMap = @{ }
       Write-Verbose "Fetching service profile instances"
       $sp | % { $spMap[$_.Dn] = $_ }


       $pnMap = @{ }
       Write-Verbose "Fetching processing nodes"
       Get-UcsBlade -Ucs $u | % { $pnMap[$_.Dn] = $_ }   
       Get-UcsRackUnit -Ucs $u | % { $pnMap[$_.Dn] = $_ }

       Write-Verbose "Fetching PN's management interfaces"
       $mgmtIf = $pnMap.values | Get-UcsMgmtController -Subject blade | Get-UcsMgmtIf -Subject blade -AdminState enable | ? { $_.ExtIp -ne "0.0.0.0" }
       $mgmtIfMap = @{ }
       Foreach ($mgmtIfDn in ($mgmtIf | select -ExpandProperty Dn | Get-Unique))
       {
         $mgmtIfMap[$mgmtIfDn -replace "/mgmt/if-[^/]*$",""] = $mgmtIf | ? { $_.Dn -eq $mgmtIfDn }
       }
       $mgmtIfDn = $mgmtIfMap.keys

       Write-Verbose "Fetching SP's Static CIMC IPs"
       $spStaticIpMap = @{ }
       $sp | Get-UcsVnicIpV4StaticAddr -LimitScope | % { $spStaticIpMap[$_.Dn -replace "/ipv4-static-addr$",""] = $_ }
       $spStaticIpDn = $spStaticIpMap.keys

       Write-Verbose "Fetching SP's Pooled CIMC IPs"
       $spDynamicIpMap = @{ }
       $sp | Get-UcsVnicIpV4PooledAddr -LimitScope | ? { $_.Addr -ne "0.0.0.0" } | % { $spDynamicIpMap[$_.Dn -replace "/ipv4-pooled-addr$",""] = $_ }
       $spDynamicIpDn = $spDynamicIpMap.keys

       Foreach ($spDn in ($spMap.keys | sort))
       {
         $ucsName = $u.Ucs
         $pnDn = $spMap[$spDn].PnDn
         $mgmtIfIp=""
         $spStaticIp = ""
         $spDynamicIp = ""
         if ($mgmtIfDn -contains $pnDn)
         {
           $mgmtIfIp = [string]::join(';', ($mgmtIfMap[$pnDn] | Select -ExpandProperty ExtIp)) 
         }
         if ($pnDn -ne "")
         {
           $pnMap.remove($pnDn)
         }
         if ($spStaticIpDn -contains $spDn)
         {
            $spStaticIp = $spStaticIpMap[$spDn].Addr
         }
         if ($spDynamicIpDn -contains $spDn)
         {
            $spDynamicIp = $spDynamicIpMap[$spDn].Addr
         }
         New-Object PSObject -Property @{
           "Ucs" = $ucsName
           "SpDn" = $spDn
           "PnDn" = $pnDn
           "SpCimcStaticIp" = $spStaticIp
           "SpCimcDynamicIp" = $spDynamicIp
           "PnCimcIp" = $mgmtIfIp
         } | Select-Object Ucs,SpDn,PnDn,SpCimcStaticIp,SpCimcDynamicIp,PnCimcIp
       }

       Foreach ($pnDn in ($pnMap.keys | sort))
       {
         $ucsName = $u.Ucs
         $mgmtIfIp=""
         if ($mgmtIfDn -contains $pnDn)
         {
           $mgmtIfIp = [string]::join(';', ($mgmtIfMap[$pnDn] | Select -ExpandProperty ExtIp)) 
         }
         New-Object PSObject -Property @{
           "Ucs" = $ucsName
           "SpDn" = ""
           "PnDn" = $pnDn
           "SpCimcStaticIp" = ""
           "SpCimcDynamicIp" = ""
           "PnCimcIp" = $mgmtIfIp
         } | Select-Object Ucs,SpDn,PnDn,SpCimcStaticIp,SpCimcDynamicIp,PnCimcIp
       }
    }
  }