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.

Enable Hardware Health via PowerShell

Working with nickzourdos​ today on an issue he found where he needed to enable hardware health polling on ~80 devices that were pre-existing in NPM.

It should be noted that all devices are the same make/model. This is important.

Step 1: Research

Hardware Health · solarwinds/OrionSDK Wiki · GitHub

It seems we need the NetObjectID and the PollingMethod for this

Step 2: A little more research

Query SWIS via the SWQL Studio to get a sample of the PollingMethod used on an existing device

You can grab the SWQL Studio Here: Releases · solarwinds/OrionSDK · GitHub

Query:

SELECT PollingMethod, ParentObjectType, ParentObjectID FROM Orion.HardwareHealth.HardwareInfoBase WHERE ParentObjectType = 'N' AND ParentObjectID =<NodeID of Sample Node>

Step 3: Execute the below script in PowerShell, supplying the Hostname, Login to SolarWinds, PollingMethod, and Search Criteria for your nodes (Nick is a solid admin and has a very nice standard naming convention!)

#region Top of Script

#requires -version 2
<#
.SYNOPSIS
    Enables Hardware Health Pollers for Nick's Nodes

.DESCRIPTION
    github.com/.../Hardware-Health

.NOTES
    Version:        1.0
    Author:         Zack Mutchler
    Creation Date:  July 12, 2018
    Purpose/Change: Initial Script development. 
#>

#endregion

#####-----------------------------------------------------------------------------------------#####

#region Functions

# Create a function to connect to the SolarWinds Information Service (SWIS)
Function Set-SwisConnection {
   
    Param(
        [ Parameter( Mandatory = $true, HelpMessage = "What SolarWinds server are you connecting to (Hostname or IP)?" ) ] [ string ] $SolarWindsServer,
        [ Parameter( Mandatory = $true, HelpMessage = "Do you want to use the credentials from PowerShell (Trusted), or a new login (Explicit)?" ) ] [ ValidateSet( 'Trusted', 'Explicit' ) ] [ string ] $ConnectionType
    )

    # Import the SolarWinds PowerShell Module
    Import-Module SwisPowerShell

    # Connect to SWIS
    IF ( $ConnectionType -eq 'Trusted'  ) {

        $swis = Connect-Swis -Trusted -Hostname $SolarWindsServer
   
    }

    ELSE {
   
        $creds = Get-Credential -Message "Please provide a Domain or Local Login for SolarWinds"

        $swis = Connect-Swis -Credential $creds -Hostname $SolarWindsServer

    }

RETURN $swis

}

#endregion Functions

#####-----------------------------------------------------------------------------------------#####

#region Variables

# Connect to SWIS
$hostname = Read-Host -Prompt "Hostname or IP Address of your SolarWinds server"
$swis = Set-SwisConnection -SolarWindsServer $hostname -ConnectionType Explicit

# Build the wildcard search for the Node Names
$captions = Read-Host -Prompt "Partial Name for the Hosts you want to target (Wildcard will be added in the script, do not use it here)"
$queryParam = "%" + $captions + "%"

# Supply the Polling Method to be applied to all target nodes
$pollingMethod = Read-Host "What is the polling method (integer) to be used?"

# Query all of the target nodes to build list of NodeIDs and Captions
$nodeQuery = "SELECT NodeID, Caption FROM Orion.Nodes WHERE Caption LIKE @caption"
$nodes = Get-SwisData -SwisConnection $swis -Query $nodeQuery -Parameters @{ caption = $queryParam }

#endregion Variables

#####-----------------------------------------------------------------------------------------#####

#region Execution

# Iterate through the Nodes and enable hardware health
Foreach( $n in $nodes ) {

    # Setup the ID and Name variables
    $netObjectID = "N:" + $n.NodeID
    $nodeName = $n.Caption

    # Set the hardware pollers for the nodes
    Try{
   
        $results = Invoke-SwisVerb -SwisConnection $swis -EntityName Orion.HardwareHealth.HardwareInfoBase -Verb EnableHardwareHealth -Arguments @( $netObjectID, $pollingMethod )

        Write-Host "Hardware Health Enabled for: $( $nodeName )" -ForegroundColor Green

    }

    Catch{

        $ErrorMessage = $_.Exception.Message
        Write-Host "The error message was $( $ErrorMessage )" -ForegroundColor Yellow

    }

}

#endregion Execution

Note: If you get an error that you're missing the Module, run this in PowerShell:

Install-Module -Name SwisPowerShell

ref: PowerShell Gallery | SwisPowerShell 2.3.0.108

Parents Reply Children
No Data