Передать параметр bool из VSTS в скрипт Powershell - PullRequest
0 голосов
/ 28 ноября 2018

Если мне нужно передать логическое значение из VSTS в сценарий powershell, чтобы выполнить развертывание на компакт-диске.Я получаю ошибку ниже:

Невозможно преобразовать значение "System.String" в тип "System.Boolean".Логические параметры принимают только логические значения и числа, такие как $ True, $ False, 1 или 0.

Я передаю параметр из VSTS как встроенный скрипт -ClientCertificateEnabled "$(ClientCertificateEnabled)"

И replcaeзначения в template.json с использованием replacetoken.ps1 через parameters.local.jason.

parameters.local.jason

"clientCertEnabled": {
      "value": "{{clientCertificateEnabled}}"
    },

replacetoken.ps1

[Parameter(Mandatory=$true)]
    [bool]
    $ClientCertificateEnabled

$depParametersFile = $depParametersFile.Replace('{{clientCertificateEnabled}}', $ClientCertificateEnabled)

deploy.ps1

[Parameter(Mandatory=$true)]
  [bool]
  $ClientCertificateEnabled

template.json

"clientCertEnabled": {
      "type": "bool",
      "defaultValue": true,
      "metadata": {
        "description": "Indicates if client certificate is required on web applications on Azure."
      }
    }

 "clientCertEnabled": "[parameters('clientCertEnabled')]"

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

Мне удалось решить проблему с приведенным ниже изменением и вернуться обратно к строковому булевому типу во всех файлах ps1.

Изменено parameters.local.json, как показано ниже (только что удалена двойная кавычка)

"clientCertEnabled": {
      "value": {{clientCertificateEnabled}}
    },

Таким образом, с указанным выше изменением после выполнения replacetoken.ps1 parameters.local.json будет выглядеть так:

"clientCertEnabled": {
      "value": true
    }, 
0 голосов
/ 28 ноября 2018

Если вы пишете распределенную задачу, VSTS / AzureDevOps передаст все параметры в виде строки.Вам нужно объявить свой блок параметров ps1 для приема строк и их внутреннего преобразования.

Я не использовал задачу PowerShell для вызова сценариев (только встроенный сценарий), поэтому я не знаю, как он передает параметры.Можно было бы с уверенностью предположить, что он выполняет ту же передачу строк.

param
(
    [string]$OverwriteReadOnlyFiles = "false"
)

Я написал функцию Convert-ToBoolean для обработки преобразования и вызова его.

[bool]$shouldOverwriteReadOnlyFiles = Convert-ToBoolean $OverwriteReadOnlyFiles

Функцияопределяется как:

<#
.SYNOPSIS 
    Converts a value into a boolean
.DESCRIPTION 
    Takes an input string and converts it into a [bool]
.INPUTS
    No pipeline input.
.OUTPUTS
    True if the string represents true
    False if the string represents false
    Default if the string could not be parsed
.PARAMETER StringValue
    Optional.  The string to be parsed.
.PARAMETER Default
    Optional.  The value to return if the StringValue could not be parsed.
    Defaults to false if not provided.
.NOTES
.LINK
#>
function Convert-ToBoolean
(
    [string]$StringValue = "",
    [bool]$Default = $false
)
{
    [bool]$result = $Default

    switch -exact ($StringValue)
    {
         "1"     { $result = $true;  break; }
         "-1"    { $result = $true;  break; }
         "true"  { $result = $true;  break; }
         "yes"   { $result = $true;  break; }
         "y"     { $result = $true;  break; }
         "0"     { $result = $false; break; }
         "false" { $result = $false; break; }
         "no"    { $result = $false; break; }
         "n"     { $result = $false; break; }
    }

    Write-Output $result
}
...