This discussion has been locked. The information referenced herein may be inaccurate due to age, software updates, or external references.
You can no longer post new replies to this discussion. If you have a similar question you can start a new discussion in this forum.

Powershell script for checking current power status for nexus

Dear Team

this is Power On check for Nexus  (sh env power)

===================CODE START HERE=============

# Nexus 3048 Power Check v1.0
# Last Update: 2014.05.29
# Email : david.shin@hostingglobal.co.kr
# Author : David, Shin.


if (! (Get-PSSnapin | where {$_.Name -eq "SwisSnapin"})) {
    Add-PSSnapin "SwisSnapin"
}

function CustomInputBox([string] $title, [string] $message, [string] $defaultText)
{
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
$userForm = New-Object System.Windows.Forms.Form
$userForm.Text = "$title"
$userForm.Size = New-Object System.Drawing.Size(290,150)
$userForm.StartPosition = "CenterScreen"
$userForm.AutoSize = $False
$userForm.MinimizeBox = $False
$userForm.MaximizeBox = $False
$userForm.SizeGripStyle= "Hide"
$userForm.WindowState = "Normal"
$userForm.FormBorderStyle="Fixed3D"
   
$OKButton = New-Object System.Windows.Forms.Button
$OKButton.Location = New-Object System.Drawing.Size(115,80)
$OKButton.Size = New-Object System.Drawing.Size(75,23)
$OKButton.Text = "OK"
$OKButton.Add_Click({$value=$objTextBox.Text;$userForm.Close()})
$userForm.Controls.Add($OKButton)
$CancelButton = New-Object System.Windows.Forms.Button
$CancelButton.Location = New-Object System.Drawing.Size(195,80)
$CancelButton.Size = New-Object System.Drawing.Size(75,23)
$CancelButton.Text = "Cancel"
$CancelButton.Add_Click({$userForm.Close()})
$userForm.Controls.Add($CancelButton)
$userLabel = New-Object System.Windows.Forms.Label
$userLabel.Location = New-Object System.Drawing.Size(10,20)
$userLabel.Size = New-Object System.Drawing.Size(280,20)
$userLabel.Text = "$message"
$userForm.Controls.Add($userLabel)
$objTextBox = New-Object System.Windows.Forms.TextBox
$objTextBox.Location = New-Object System.Drawing.Size(10,40)
$objTextBox.Size = New-Object System.Drawing.Size(260,20)
$objTextBox.Text="$defaultText"
$userForm.Controls.Add($objTextBox)
$userForm.Topmost = $True
$userForm.Opacity = 1
     $userForm.ShowIcon = $False
$userForm.Add_Shown({$userForm.Activate()})
[void] $userForm.ShowDialog()
return $value

}

$hostname = "127.0.0.1"
$username = "admin"
$password = New-Object System.Security.SecureString
$cred = New-Object -typename System.Management.Automation.PSCredential -argumentlist $username, $password
$swis = Connect-Swis -v2 -host $hostname -cred $cred

#write-host "Device Power Status Check"
#$group=read-host "INPUT NODE GROUP"

$group = CustomInputBox "NXOS POWER CHECK" "INPUT NODE GROUP" "w3_z3_oob"
if ( $group -ne $null )
{
}
else
{
"Cancelled!!"
break
}

$script="sh env"

$date=Get-Date -format "yyMMddhhmm"
$File = "C:\NBP\RESULT\$date-$script-POWER-CHECK-$group.txt"

If ( Test-Path $File)
{
   Remove-Item $File
}

$nodeId = get-swisdata $swis "SELECT NodeID FROM Cirrus.Nodes WHERE NodeGroup='$group'"

$count = 0
foreach ($node in $nodeId) {

$Caption = get-swisdata $swis "SELECT NodeCaption FROM Cirrus.Nodes WHERE NodeId='$node'"

$nodeIdList = New-Object -TypeName "System.Guid[]" 1
$nodeIdList[0] = $node

Invoke-SwisVerb $swis Cirrus.ConfigArchive Execute @($nodeIdList, $script, $username) | Out-Null
$transferID = "{$node}:${username}:ExecuteScript"

do {
     Start-Sleep -Seconds 3
     $status = Get-SwisData $swis "SELECT T.Status, T.Error FROM Cirrus.TransferQueue T WHERE T.TransferID=@transfer" @{transfer=$transferID}
     Write-Host $status.Status
     #write-host $Caption
}
while (($status.Status -ne 'Complete') -and (-not $status.Error))

$output = Get-SwisData $swis "SELECT T.Log FROM Cirrus.TransferQueue T WHERE T.TransferID=@transfer" @{transfer=$transferID}
#$output = $output.TrimStart($script)

        $output = $output -split ("`r`n")

        $lines = @()
foreach ($line in $output) {
switch -wildcard ($line)
{
  "*1   N2200-PAC-400W*" {$A = $line.Trim()}
}
switch -wildcard ($line)
{
  "*2   N2200-PAC-400W*" {$B = $line.Trim()}
}
}   

if ($A)
{
  %{$power1 = $A.split(" ") | where {$_ -ne ""};}
}
else
{
  %{$power1 = ("","","","","","Power Not exists") }
}


if ($B)
{
  %{$power2 = $B.split(" ") | where {$_ -ne ""};}  
}
else
{
  %{$power2 = ("","","","","","Power Not exists") }
}


$power1ok = 0
$power2ok = 0
$power1fail = 0
$power2fail = 0
$num = $count + 1

If ($($power1[5]) -eq "ok")
{
   $output = "$num $Caption POWER $($power1[0])  $($power1[5])"
  write-host $output
  $output | Out-File $File -append
  $power1ok = $power1ok + 1
  }
 
Else
  {
  $output = "$num $Caption POWER $($power1[0])  $($power1[5])"
  write-host $output
      $output | Out-File $File -append
  $power1fail = $power1fail + 1
}

If ($($power2[5]) -eq "ok")
{

   $output = "$num $Caption POWER $($power2[0])  $($power2[5])"
  write-host $output
  $output | Out-File $File -append
  $power2ok = $power2ok + 1
}
Else
{
  $output = "$num $Caption POWER $($power2[0])  $($power2[5])"
  write-host $output
      $output | Out-File $File -append
  $power2fail = $power2fail + 1
}

$count = $count + 1
}


" " | Out-File $File -append
" " | Out-File $File -append
"$Caption POWER1 OK = $power1ok" | Out-File $File -append
"$Caption POWER1 FAIL = $power2fail" | Out-File $File -append
"$Caption POWER2 OK = $power2ok" | Out-File $File -append
"$Caption POWER2 FAIL = $power2fail" | Out-File $File -append
" " | Out-File $File -append
" " | Out-File $File -append
"Total : $count Devices Check Completed" | Out-File $File -append
Write-Host " "
Write-Host " "
Write-Host "Checking Total $count Devices Completed"