You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

114 lines
2.8 KiB
PowerShell

#!/usr/bin/pwsh
<#
.SYNOPSIS
Name: Get-OPHPowerStatus.ps1
The purpose of this script is to gather the power status of
each OPF Hub machine via IPMI.
.DESCRIPTION
Each host in the Hub is queried via IPMI for its chassis power
status. The results are then table-ized and displayed.
.PARAMETER Credential
[Required] - The credentials used to query the OpenBMC for the
chassis power status.
.PARAMETER Hostname
[Optional] - The hostname of a single Hub system to query the
chassis power status of.
.NOTES
Version: 1.0
Updated: Aug 2, 2022
Author:
Maximillian Schmidt - FRA - Computational Scientist
Oregon State University - CQLS + OSL
max@cqls.oregonstate.edu
#>
[CmdletBinding()]
Param
(
[Parameter(Mandatory = $false)][PSCredential] $Credential,
[Parameter(Mandatory = $false)][string] $Hostname
)
# Default number of hosts
$testRange = 1..12
$oobCreds = $null
if ($Credential)
{
$oobCreds = $Credential
}
else
{
$oobCreds = Get-Credential
}
$user = $oobCreds.UserName
[string]$pass = $oobCreds.GetNetworkCredential().Password
$results = [ordered]@{}
if ($Hostname)
{
$result = (ipmitool -I lanplus -C 17 -H "$Hostname" -U "$user" -P "$pass" chassis power status | Out-String).split(' ')[-1].split("`n")[0]
if ($result -eq 'off' -or $result -eq 'on')
{
$results.Add($hostname,$result)
Write-Host '.' -NoNewline
}
else
{
Write-Host ""
Write-Error "Unknown power state ($result) for $hostname!"
$results.Add($hostname,"unknown")
}
}
else
{
Write-Host "`n Gathering results from hosts. Please wait." -NoNewline
# Get each of the OPH machine's power status
$testRange | ForEach-Object {
$hostname = "oph$($_).osuosl.oob"
$result = (ipmitool -I lanplus -C 17 -H "$hostname" -U "$user" -P "$pass" chassis power status | Out-String).split(' ')[-1].split("`n")[0]
if ($result -eq 'off' -or $result -eq 'on')
{
$results.Add($hostname,$result)
Write-Host '.' -NoNewline
}
else
{
Write-Host ""
Write-Error "Unknown power state ($result) for $hostname!"
$results.Add($hostname,"unknown")
}
}
Write-Host ""
}
# Colorized table - https://docs.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences#text-formatting
$results | Format-Table Name,@{
Label = "Status"
Expression =
{
switch ($_.Value) # Switch on the hash table item's value
{
'off' { $color = "31"; break } # red
'on' { $color = "32"; break } # green
'unknown' { $color = "33"; break } # yellow
default { $color = "0" }
}
$e = [char]27
"$e[${color}m$($_.Value)${e}[0m"
}
}