当我运行这个函数时,我得到一个对我来说没有意义的神秘错误。我不知道我正在对一个空值表达式运行一个方法。我突然想到,这要么是范围问题,要么是未设置值。但是,我无法弄清楚并将其发布给社区:
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**
$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