diff --git a/pwsh/Get-OPHPowerStatus.ps1 b/pwsh/Get-OPHPowerStatus.ps1 new file mode 100755 index 0000000..e596031 --- /dev/null +++ b/pwsh/Get-OPHPowerStatus.ps1 @@ -0,0 +1,114 @@ +#!/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" + } +} \ No newline at end of file