Как передать переменную пароля (скрытый) TFS 2018 в сценарий powershell - PullRequest
1 голос
/ 25 февраля 2020

У меня есть сценарий powershell, который я хочу запустить как часть выпуска. Сценарий создаст запрос на изменение ServiceNow. Сценарий работает нормально, если я встраиваю в него имя пользователя и пароль (сохраняемые как переменные), и это отлично подходит для тестирования. Теперь я хочу сохранить имя пользователя и пароль в переменных TFS.

Я успешно извлек переменные TFS, когда они хранятся в виде простого текста. Но когда я «блокирую» пароль в переменных (сделайте его скрытым), аутентификация не будет выполнена в ServiceNow. Я уверен, что это связано с методом, который я использую, но я не настоящий программист, я просто прикуриваю фрагменты кода и собираю их вместе. Вот часть скрипта:

$user = "tfs_changerequest"
$pass = "$env:SNPWD-Hidden"  # doesn't work with hidden password


# Show SN Password #
Write-Output "SN Password #" $pass                # This looks correct
Write-Output "SN PW Hidden #" $SNPWD-Hidden       # This appears to have worked

# Build auth header
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user, $pass)))

# Set proper headers
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add('Authorization',('Basic {0}' -f $base64AuthInfo))
$headers.Add('Accept','application/json')
$headers.Add('Content-Type','application/json')

Опять же, это просто фрагмент, но я получаю ошибку:

##[error]Invoke-RestMethod : The remote server returned an error: (401) Unauthorized.

Я думаю, что это имеет отношение к строке $ base64AuthInfo Я предполагаю, что переменная пароля ($ pass) должна быть скрыта, но я не знаю, как это сделать.

Ответы [ 2 ]

0 голосов
/ 26 февраля 2020

Вы также можете использовать такой файл учетных данных, как этот.

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

$Credential = Get-Credential
$Credential | Export-CliXml -Path "${env:\userprofile}\mycreds.xml"

это создаст файл, который выглядит следующим образом

<Objs Version="1.1.0.1" xmlns="http://schemas.microsoft.com/powershell/2004/04">
  <Obj RefId="0">
    <TN RefId="0">
      <T>System.Management.Automation.PSCredential</T>
      <T>System.Object</T>
    </TN>
    <ToString>System.Management.Automation.PSCredential</ToString>
    <Props>
    <S N="UserName">user</S>
    <SS N="Password">Encrypted string</SS>            
  </Props>
</Obj>

, затем вы можете использовать его следующим образом

$cred =  Import-CliXml -Path "${env:\userprofile}\mycreds.xml" 

и использовать $ cred в любом -Credential параметр.

Обратите внимание, что этот файл действителен только на том компьютере, на котором вы его создали. Зашифрованная строка предназначена только для этой машины, поэтому, даже если кто-то перенесет ее на другую машину, она не будет работать.

0 голосов
/ 26 февраля 2020

Чтобы использовать секретную переменную в скрипте powershell, вы можете использовать этот $secret = "$(MySecretVariablet)" пример фрагмента:

....
$secret = "$(MySecretVariablet)" | ConvertTo-SecureString -AsPlainText -Force

$credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $applicationId, $secret

Если вы пытаетесь что-то вроде Write-Host "$secret", я думаю, что это не работать, чтобы, ну, держать это в тайне.

Для получения более подробной информации, пожалуйста, взгляните на две ссылки ниже:

...