title: PowerShell - If Then: cannot call a method on a null-valued expression
body: <p>When I run the program this function is in I get a cryptic error that doesn't make sense to me. I wasn't aware I was running a method on a null-valued expression. It occures to me that this is either a scope issue or a value is not getting set. I however have not been able to figure it out and put it out to the community:</p>
  
  <pre><code>You cannot call a method on a null-valued expression.
  At C:\Users\Administrator\Desktop\DCB Settings Modification\DCBxPowershell.ps1:747 char:21
  +                 If ($resetAdapter -eq $FAIL_RESULT){
  +                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
  + FullyQualifiedErrorId : InvokeMethodOnNull
  You cannot call a method on a null-valued expression.
  At C:\Users\Administrator\Desktop\DCB Settings Modification\DCBxPowershell.ps1:760 char:17
  +             If ($resetAdapter -eq $FAIL_RESULT){
  +                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
  + FullyQualifiedErrorId : InvokeMethodOnNull**
  </code></pre>
  
  <hr>
  
  <pre class="lang-ps prettyprint-override"><code>$FAIL_RESULT = 0
  $PASS_RESULT = 1
  
  Function Use-Menu
  { 
      param($DCBmenuItems, $modificationCatagoryChoosen)
  
      ## Function Menu-Choose --## Holds choosen Network Interface Index to work with            
      $networkIndex = Menu-Choose $strippedNetworkIndex $networkChooseTitle
      #$networkIndex[0]  ### Debug -
      $resetAdapter = $FAIL_RESULT
  
      Start-Sleep -s .7
  
      If ($result = $PASS_RESULT) {
      ## Find Current Config in order to display it to user
          $dcbConfig = Find-Config $networkIndex
      }
  
      #The following 'DO WHILEs' are for the "Go back to previous Menu" functionality.
      Do {
          Do {
  
              ## Function Menu-Choose --## Let user choose which catagory of modification to perform
              $modificationCatagoryChoosen = Menu-Choose $DCBmenuItems $DCBMenuTitle $networkIndex -scope global
              If (($DCBmenuItems.count - 1) -eq $modificationCatagoryChoosen) {
                  $resetAdapter = $PASS_RESULT
              }
  
              # These If Then statements allow reset of adapter without changing settings
              If ($resetAdapter -eq $FAIL_RESULT){
                  $DCBmenuItems2 = $xmlDCBoptions.MenuItems.MenuOptions[$modificationCatagoryChoosen].Option
                  $DCBMenuTitle2 = $xmlDCBoptions.MenuItems.MenuOptions[$modificationCatagoryChoosen].Name
  
                  Start-Sleep -s .7
  
                  ## Function Menu-Choose --## Let user choose which modification to perform
                  $modificationChoosen = Menu-Choose $DCBmenuItems2 $DCBMenuTitle2 $networkIndex
              }
  
          } While (($modificationChoosen -eq $DCBmenuItems2.GetUpperBound(0)) -and ($resetAdapter -eq $FAIL_RESULT))
  
          # These If Then statements allow reset of adapter without changing settings
          If ($resetAdapter -eq $FAIL_RESULT){ 
              ## Changes the options to choose on Menu-Choose to last chosen catagory
              $DCBmenuItems3 = $xmlDCBoptions.MenuItems.MenuOptions[$modificationCatagoryChoosen].SubMenu[$modificationChoosen].Option
              $DCBMenuTitle3 = $xmlDCBoptions.MenuItems.MenuOptions[$modificationCatagoryChoosen].SubMenu[$modificationChoosen].Name
  
              Start-Sleep -s .7
  
              ## Function Menu-Choose --## Let user choose how to modify DCB setting
              $modificationOptionChoosen = Menu-Choose $DCBmenuItems3 $DCBMenuTitle3 $networkIndex
          }
      } While (($modificationOptionChoosen -eq $DCBmenuItems3.GetUpperBound(0)) -and ($resetAdapter -eq $FAIL_RESULT)) 
  
      # These If Then statements allow reset of adapter without changing settings
      If ($resetAdapter -eq $FAIL_RESULT){
          Start-Sleep -s .7
  
           ## Function Set-RegistryValues --## Records modified DCB setting to registry
          Set-RegistryValues $xmlDCBregEdits $modificationCatagoryChoosen $modificationChoosen $modificationOptionChoosen
      }
  
  Return $networkIndex
  </code></pre>