I'm working on writing a script which will run from AzDo Pipeline to disable F5 WebServers. Below script works fine in Visual Code and does disable the server as expected . But when running from the terminal or PS window fails with the below error . Can someone please help.
$ServerInput = 'server1.abc.com'
$BIGIPBaseURL = "https://ser-f5-1.prod.abc.com"
$usr = "nilesh"
$SecurePassword='P@assword'
Write-Host "Starting the Script..." 
# Initialize variables
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$BIGIPToken = $null
Write-Host -ForegroundColor Green " done!"
$DisableWebServers = $true
# Initialize functions
Write-Host "Initializing functions..." -NoNewline
$PSVersionTable
function Disable-BIGIPNode([string]$NodeName) {
    # servers should use the Disable-BIGIPTelcoNode() function
    Write-Host "In the Disable function"
    if ($NodeName -match "(?i).*telco.*") {
        Write-Host -ForegroundColor Yellow "WARNING: `"$($NodeName.ToUpper().Split('.')[0])`" is in the wrong list.  telcoo hosts should be added to the TelcoServers list in your input file."
        BREAK
    }
    else {
        if ($BIGIPToken -eq $null) {
            Write-Host "Now will enter the Open-Session"
            Open-BIGIPSession
        }
        Write-Host "Disabling node `"$($NodeName.ToUpper().Split('.')[0])`" in BIG-IP..." -NoNewline
        $WebRequestInput = @{
            body = @{
                "session" = "user-disabled"
            } | ConvertTo-Json
            uri = $($BIGIPBaseURL) + "/mgmt/tm/ltm/node/~Common~" + $NodeName.ToLower()
            headers = @{
                "Content-Type" = "application/json"
                "X-F5-Auth-Token" = "$BIGIPToken"
            } 
            method = "PATCH"
        } 
        Write-Host $WebRequestInput
        Write-Host $WebRequestInput.body
        try {
            Write-Host "In the final try block"
            $Request = Invoke-WebRequest @WebRequestInput -UseBasicParsing -SkipCertificateCheck 
        }
        catch {
            Write-Host -ForegroundColor Red " failed!"
            Write-Host -ForegroundColor Red ($_.ErrorDetails | ConvertFrom-Json).Message
        }
        Write-Host -ForegroundColor Green " done!"
        $global:ZabbixRequestID++
    }
}
function Open-BIGIPSession() {
    Write-Host "Authenticating with BIG-IP API..." -NoNewline
    $WebRequestInput = @{
        body = @{
            username = "$usr"
            password = "$SecurePassword"
            loginProviderName = "tmos"
        } | ConvertTo-Json
        uri = $ScriptInput.BIGIPBaseURL + "/mgmt/shared/authn/login"
        headers = @{
            "Content-Type" = "application/json"
        }
        method = "POST"
    }
    try {
        [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
        $Request = Invoke-WebRequest @WebRequestInput -UseBasicParsing -SkipCertificateCheck
    }
    catch {
        Write-Host -ForegroundColor Red " failed!"
        Write-Host -ForegroundColor Red ($_.ErrorDetails | ConvertFrom-Json).Message
        EXIT 1
    }
    Write-Host -ForegroundColor Green " done!"
    $global:BIGIPToken = ($Request.Content | ConvertFrom-Json).token.token 
}
if ($DisableWebServers) {
    Write-Host "Starting the main Methord "
    foreach ($Server in $($ServerInput)) {
        Disable-BIGIPNode -NodeName $Server
    }
}
The PowerShell version is PSVersion 7.2.2
Disabling node "SAC-DEV-WEB2" in BIG-IP...System.Collections.DictionaryEntry System.Collections.DictionaryEntry System.Collections.DictionaryEntry System.Collections.DictionaryEntry
{
  "session": "user-disabled"
}
In the final try block
 failed!
ConvertFrom-Json: C:\Temp\Testing.ps1:49:64
Line |
  49 |  … Host -ForegroundColor Red ($_.ErrorDetails | ConvertFrom-Json).Messag …
     |                                                 ~~~~~~~~~~~~~~~~
     | Conversion from JSON failed with error: Additional text encountered after finished reading JSON content: U. Path '', line
     | 3, position 4.
Its working fine when running from VsCode but fails if called with the file name from the same terminal
like .\Testing.ps1
Please help
breakstatement inside yourDisable-BIGIPNodefunction breaks out of yourforeach ($Server in $($ServerInput))loop, i.e. if there are servers remaining, they won't be processed - is that the intent?foreachloop, as that is conceptually clearer). As for the error: The true error is being obscured by the follow-up error stemming from.ErrorDetailsnot containing valid JSON, so I'd start with printing the true error withWrite-Host -ForegroundColor Red $_