Сгенерированная переменная не совпадает с жестко закодированной строкой. Оба являются одинаковыми значениями, но возвращают ложь при сравнении - PullRequest
0 голосов
/ 02 мая 2019

Я получаю пароль CLI для технического углерода на конечной точке. У меня есть фрагмент, который извлекает пароль с сервера и помещает его в переменную.

Мне нужно передать эту переменную, содержащую пароль, команде позже, однако она не проходит правильно (команда не имеет значения).

Я жестко закодировал переменную с фактическим значением из системы и запустил ее в свою команду, и она отлично работает.

Таким образом, в двух словах извлеченный пароль из фрагмента сервера не равен жестко закодированной переменной, но выглядит одинаково и является строкой.

Какие-нибудь советы о том, как преобразовать извлеченный пароль в правильный формат?

Я проверил gettype (). Fullname и они оба имеют одинаковый формат.

 $resource = "SEOMRESORUCE" + $Computer
 $url = "SOMEEML SOURCE"
 $configlist = "C:\Temp\configlistwithdeleteditems.xml"

 [System.Net.ServicePointManager]::ServerCertificateValidationCallback =      {$true}

 # download the CL file
 Write-Host "Finding CLI Password"
 $wc = New-Object System.Net.WebClient
 $wc.DownloadFile($url, $configlist)

 $webResponsey = [System.Net.WebRequest]::Create($resource)
 $webResponsey.Method = "GET"
 $webResponsey.ContentType='application/json; charset=utf-8'
 $webResponsey.Headers.Add("X-Auth-Token", "SOMETOKEN")

 $Response= $webResponsey.GetResponse()
 $ResponseStream = $Response.GetResponseStream()
 $ReadStream = New-Object System.IO.StreamReader $ResponseStream
 $jsonresult = $ReadStream.ReadToEnd()

 $saveme = $jsonresult | Out-String
 $cliPassword = $saveme -replace '.*CLIPassword":"([^"]*)".*', '$1' 

 Write-Host "CLI password is " $cliPassword #this provides the same  value as $clipassword2

 $cliPassword2 = 'TAWR-SOWR-POYS-YAEZ'


 $cliPassword -eq $cliPassword2 #this equals False for whatever reason

1 Ответ

0 голосов
/ 02 мая 2019

Вы можете просто изменить свое регулярное выражение, чтобы получить желаемые результаты:

$cliPassword = $saveme -replace '(?s).*CLIPassword":"([^"]*)".*', '$1'

Вам нужен однострочный модификатор ((?s)), потому что ваше преобразование json в строку будет включать перевод строки и / или возврат каретки. По умолчанию символ регулярного выражения . не соответствует символам новой строки. Без однострочного модификатора только строка с текстом CLIPassword будет соответствовать оператору -Replace. Несопоставленные строки будут по-прежнему выводиться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...