Как правильно установить переменную с помощью сценария PowerShell, а затем использовать ее в другом, используя Azure DevOps? - PullRequest
0 голосов
/ 04 августа 2020

У меня есть первый встроенный сценарий PowerShell, в котором я фильтрую каталог своего тестового проекта и устанавливаю его значение для переменной с именем testProjectPath.

- task: PowerShell@2
  displayName: "Get tests path"
  inputs:
    targetType: "inline"
    script: |
      $testpath = Get-ChildItem -Filter *Tests.csproj -Recurse | Select-Object Directory -First 1
      
      Write-Host "##vso[task.setvariable variable=testProjectPath]$testpath"

И затем у меня есть второй сценарий, который пытается Set-Location на основе пути, представленного в моей переменной testProjectPath.

- task: PowerShell@2
  displayName: "Run mutations"
  inputs:
    targetType: "inline"
    script: |
      Set-Location $env:testProjectPath

Но каждый раз, когда я пытаюсь запустить этот конвейер, я получаю следующее сообщение об ошибке:

@{Directory=D:\a\1\s\Wms.PickingCheck.Tests}
Set-Location : Cannot find drive. A drive with the name '@{Directory=D' does not exist.
At D:\a\_temp\752e8e31-b8ac-4f43-9ee0-248f6b12577c.ps1:4 char:1
+ Set-Location $env:testProjectPath
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (@{Directory=D:String) [Set-Location], DriveNotFoundException
    + FullyQualifiedErrorId : DriveNotFound,Microsoft.PowerShell.Commands.SetLocationCommand
 

Что такое Я здесь не так делаю?

1 Ответ

1 голос
/ 05 августа 2020

В исходном скрипте значение $testpath равно @{Directory=xxxxxx}. Однако Set-Location не распознает этот формат, Set-Location устанавливает текущее рабочее место в указанное место, поэтому вы получили ошибку:

enter image description here

You could modify your script by adding -Expand as @AdminOfThings mentioned: $testpath = Get-ChildItem -Filter *Tests.csproj -Recurse | Select-Object -Expand DirectoryName -First 1

введите описание изображения здесь

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