Powershell Переменная перевод - PullRequest
0 голосов
/ 15 февраля 2019

У меня есть следующая функция PS:

function Ask-Creds {
    param(
    [ValidateNotNull()]
    $Creds = (Get-credential -message 'Please enter  Technician`s login & password for Terminal registration:')
    )
    $vault="http://1.1.1.1:8200"

    #Here I store error message in $State variable inside function:
    $rawcontent=(New-VltAuth -va $vault -AuthMethod userpass -PathData $creds.Username -AuthData @{ password = $creds.GetNetworkCredential().Password } -KeepSecretWrapper -verbose -ErrorVariable State) 

    #here I make $State variable global, to access its value outside function
    $global:State
}

Проблема в том, что когда я делаю echo $ State, я получаю правильное значение:

PS C:\Users\vasyl.v> echo "$State"
400 BadRequest. {"errors":["invalid username or password"]}

Но когда я пытаюсь использоватьэта переменная позже:

if ( $state.contains("") ) { 
    echo "Technician is authenticated!"
} elseif ( $state.startswith("400 BadRequest") ) { 
    echo "Bad credentials!" | Ask-Creds 
} elseif ( $state.startswith("An error occurred while") ) { 
    echo "Connection failed!" | exit 1
}

Я получаю:

Method invocation failed because [System.Management.Automation.ErrorRecord] does not contain a method named 'contains'.
At line:1 char:6
+ if ( $state.contains("") ) {
+      ~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : MethodNotFound

Любой может подсказать мне, как избавиться от "[System.Management.Automation.ErrorRecord]" и получить значение какв эхо?

1 Ответ

0 голосов
/ 15 февраля 2019

Метод .contains(), который вы ищете, принадлежит классу String.Ваша переменная $ state ссылается на объект System.Management.Automation.ErrorRecord .Я вижу несколько вариантов для вас, и вам нужно сделать только один из них:

  1. Используйте другую логику, кроме .contains().Вы можете переключиться на использование оператора -contains или -in.Регулярное выражение можно использовать для логики, в которой вам нужно найти начальные строки.
  2. Перед выполнением сравнений измените $ state на строку.Вы можете запустить $global:State = -join $state в своей функции, если вывод не является массивом.Это также можно сделать, если у вашего объекта есть метод toString(), запустив $global:State = $state.toString().
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...