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.

Discovery Function Question (PowerShell)

I am attempting to create some functions inside of a larger script that will create a basic SNMP Discovery job. All of the details in the function were pulled from my base script that works without any issues. It seems that something about passing the values across in this manner is causing a ruckus.

SAMPLE

#region Connect to SWIS
# Import the SolarWinds PowerShell Module if needed


If (!(Get-Module SwisPowerShell)) {
    Import-Module SwisPowerShell
}


# Connect to SWIS


$hostname = "hostname here"
$swis = Connect-Swis -Trusted -Hostname $hostname


#endregion


#region Functions
# $nodeList $snmpID
FUNCTION New-CoreParameter ($ipAddresses, $snmpCredentialID) {
<#
.SYNOPSIS
    Creates the Core Parameter for Sonar Discovery
.DESCRIPTION
    Building block for New-DiscoveryJob
.EXAMPLE
    $coreParameter = New-CoreParameter $nodeList $snmpID
.PARAMETER ipAddresses
    Value of $nodeList from the File Select Region
.PARAMETER snmpCredentialID
    Value of $snmpID from the SNMP Community String Region
#>


    $ipList = @()
    foreach ($ip in $ipAddresses) {
        $ipList += '<IpAddress><Address>{0}</Address></IpAddress>' -f ($ip)
    }


    $core = ([xml]"<CorePluginConfigurationContext xmlns:i='www.w3.org/.../XMLSchema-instance' xmlns='schemas.solarwinds.com/.../Core'>
    <BulkList>
        $ipList        
    </BulkList>
    <IpRanges></IpRanges>
    <Subnets></Subnets>
    <Credentials>    
        <SharedCredentialInfo>
            <CredentialID>$snmpCredentialID</CredentialID>
            <Order>1</Order>
        </SharedCredentialInfo>  
    </Credentials>
    <WmiRetriesCount>1</WmiRetriesCount>
    <WmiRetryIntervalMiliseconds>1000</WmiRetryIntervalMiliseconds>
    </CorePluginConfigurationContext>").DocumentElement


    # Build the Core Plugin Config, and grab its XML


    $coreConfig = Invoke-SwisVerb $swis Orion.Discovery CreateCorePluginConfiguration @($core)
    $coreConfigInnerXml = $coreConfig.InnerXml


    RETURN $coreConfigInnerXML
}


# $discName $selectedEngineID $coreParamter $vimParameter $interfaceParameter
FUNCTION New-DiscoveryJob($discoveryName, $engineID, $core) {
<#
.SYNOPSIS
    Builds a new Orion Sonar Discovery Job for SNMPv1/2c
.DESCRIPTION
    Leverages the New-CoreParameter, New-VimParameter, and New-InterfaceParamater functions
.EXAMPLE
    $newDiscovery = New-DiscoveryJob $discName, $selectedEngineID, $coreParamter, $vimParamter, $interfaceParameter
.PARAMETER discoveryName
    The value of the $discName parameter from the Variables Region
.PARAMETER engineID
    The value of the $selectedEngineID parameter from the Polling Engines Region
.PARAMETER core
    The value of the New-CoreParameter function return
.PARAMETER vim
    The value of the New-VimParameter function return
.PARAMETER interface
    The value of the New-InterfaceParameter function return
#>


    ([xml]"<StartDiscoveryContext xmlns:i='www.w3.org/.../XMLSchema-instance' xmlns='schemas.solarwinds.com/.../Core'>
    <Name>$discoveryName</Name>
    <EngineId>$engineID</EngineId>
    <JobTimeoutSeconds>3600</JobTimeoutSeconds>
    <SearchTimeoutMiliseconds>2000</SearchTimeoutMiliseconds>
    <SnmpTimeoutMiliseconds>3000</SnmpTimeoutMiliseconds>
    <SnmpRetries>3</SnmpRetries>
    <RepeatIntervalMiliseconds>1800000</RepeatIntervalMiliseconds>
    <SnmpPort>161</SnmpPort>
    <HopCount>0</HopCount>
    <PreferredSnmpVersion>SNMP2c</PreferredSnmpVersion>
    <DisableIcmp>false</DisableIcmp>
    <AllowDuplicateNodes>false</AllowDuplicateNodes>
    <IsAutoImport>false</IsAutoImport>
    <IsHidden>false</IsHidden>
    <PluginConfigurations>
        <PluginConfiguration>
           <PluginConfigurationItem>$core</PluginConfigurationItem>
        </PluginConfiguration>
    </PluginConfigurations>
    </StartDiscoveryContext>").DocumentElement
}


# $newDiscovery
FUNCTION Start-Discovery($discoveryJob) {
<#
.SYNOPSIS
    Starts to newly-created Orion Sonar Discovery
.DESCRIPTION
    Utilizes the results of the New-DiscoveryJob function
.EXAMPLE
    $discoveryProfileID = Start-Discovery $newDiscovery
.PARAMETER discoveryJob
    The value of the New-DiscoveryJob function return
#>
    (Invoke-SwisVerb $swis Orion.Discovery StartDiscovery @($discoveryJob)).InnerText   
}


#endregion


$nodeList = Get-Content -Path "C:\Testing\ipDemo.txt"
$snmpID = 3
$discName = "gentleTest"
$selectedEngineID = 8
$coreParameter = New-CoreParameter $nodeList $snmpID
$newDiscovery = New-DiscoveryJob $discName $selectedEngineID $coreParamter
Start-Discovery $newDiscovery































Investigation of the $coreParameter and $newDiscovery variables look good; not idea why but the Start-Discovery function returns the following:

Invoke-SwisVerb : ProvideFault failed, check fault information.
At line:116 char:6
+     (Invoke-SwisVerb $swis Orion.Discovery StartDiscovery @($discover ...
+      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [Invoke-SwisVerb], FaultException`1
    + FullyQualifiedErrorId : SwisError,SwisPowerShell.InvokeSwisVerb

So it's failing on the (Invoke-SwisVerb $swis Orion.Discovery StartDiscovery @($discoveryJob)).InnerText  execution...

Here's the Original Script (sans-Functions) that works

#region Connect to SWIS
# Import the SolarWinds PowerShell Module if needed


If (!(Get-Module SwisPowerShell)) {
    Import-Module SwisPowerShell
}


# Connect to SWIS


$hostname = "redacted"
$swis = Connect-Swis -Trusted -Hostname $hostname


#endregion


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


#region Variables
# Name your discovery job
$discName = "gentleTest_old"


# Build an array of IP addresses
$ipAddresses = Get-Content -Path "C:\Testing\ipDemo.txt"
$ipList = @()


foreach ($ip in $ipAddresses) {
    $ipList += '<IpAddress><Address>{0}</Address></IpAddress>' -f ($ip)
}


# Get the SNMP Community String ID
$credID = 3


# Get the Polling Engine ID
$engineID = 8


#endregion


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


#region Core Plugin Configuration


# Build the Core parameter, using the $ipList and $credID variables from above
$coreParameter = ([xml]"<CorePluginConfigurationContext xmlns:i='www.w3.org/.../XMLSchema-instance' xmlns='schemas.solarwinds.com/.../Core'>
<BulkList>
    $ipList        
</BulkList>
<IpRanges></IpRanges>
<Subnets></Subnets>
<Credentials>    
    <SharedCredentialInfo>
        <CredentialID>$credID</CredentialID>
        <Order>1</Order>
    </SharedCredentialInfo>  
</Credentials>
<WmiRetriesCount>1</WmiRetriesCount>
<WmiRetryIntervalMiliseconds>1000</WmiRetryIntervalMiliseconds>
</CorePluginConfigurationContext>").DocumentElement


# Build the Core Plugin Config, and grab its XML


$coreConfig = Invoke-SwisVerb $swis "Orion.Discovery" "CreateCorePluginConfiguration" @($coreParameter)
$coreConfigInnerXml = $coreConfig.InnerXml


#endregion


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


#region Discovery Context


# Build the Discovery Configuration
$newDiscovery = ([xml]"<StartDiscoveryContext xmlns:i='www.w3.org/.../XMLSchema-instance' xmlns='schemas.solarwinds.com/.../Core'>
    <Name>$discName</Name>
    <EngineId>$engineID</EngineId>
    <JobTimeoutSeconds>3600</JobTimeoutSeconds>
    <SearchTimeoutMiliseconds>2000</SearchTimeoutMiliseconds>
    <SnmpTimeoutMiliseconds>3000</SnmpTimeoutMiliseconds>
    <SnmpRetries>3</SnmpRetries>
    <RepeatIntervalMiliseconds>1800000</RepeatIntervalMiliseconds>
    <SnmpPort>161</SnmpPort>
    <HopCount>0</HopCount>
    <PreferredSnmpVersion>SNMP2c</PreferredSnmpVersion>
    <DisableIcmp>false</DisableIcmp>
    <AllowDuplicateNodes>false</AllowDuplicateNodes>
    <IsAutoImport>false</IsAutoImport>
    <IsHidden>false</IsHidden>
    <PluginConfigurations>
        <PluginConfiguration>
           <PluginConfigurationItem>$coreConfigInnerXml</PluginConfigurationItem>
        </PluginConfiguration>
    </PluginConfigurations>
</StartDiscoveryContext>").DocumentElement


#endregion


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


#region Start The Discovery


# Start the discovery


(Invoke-SwisVerb $swis Orion.Discovery StartDiscovery @($newDiscovery)).InnerText


#endregion





















































After running the original script:

2017-09-01_16-22-22.png

My assumption is something trivial has been overlooked by me being too deep in the script; so any and all feedback is welcome.

Any help is appreciated!