Поделиться через


PowerShell@2 — задача PowerShell версии 2

Используйте эту задачу для запуска скрипта PowerShell в Linux, macOS или Windows.

Примечание.

По умолчанию PowerShell версии 2 использует агенты PowerShell Core для Linux и Windows PowerShell для агентов Windows. Чтобы использовать последнюю версию PowerShell в агентах Windows, задайте для параметра pwsh значение true. Затем powerShell Core будет использоваться вместо этого.

Синтаксис

# PowerShell v2
# Run a PowerShell script on Linux, macOS, or Windows.
- task: PowerShell@2
  inputs:
    #targetType: 'filePath' # 'filePath' | 'inline'. Type. Default: filePath.
    filePath: # string. Required when targetType = filePath. Script Path. 
    #arguments: # string. Optional. Use when targetType = filePath. Arguments. 
    #script: # string. Required when targetType = inline. Script. 
  # Preference Variables
    #errorActionPreference: 'stop' # 'default' | 'stop' | 'continue' | 'silentlyContinue'. ErrorActionPreference. Default: stop.
    #warningPreference: 'default' # 'default' | 'stop' | 'continue' | 'silentlyContinue'. WarningPreference. Default: default.
    #informationPreference: 'default' # 'default' | 'stop' | 'continue' | 'silentlyContinue'. InformationPreference. Default: default.
    #verbosePreference: 'default' # 'default' | 'stop' | 'continue' | 'silentlyContinue'. VerbosePreference. Default: default.
    #debugPreference: 'default' # 'default' | 'stop' | 'continue' | 'silentlyContinue'. DebugPreference. Default: default.
    #progressPreference: 'silentlyContinue' # 'default' | 'stop' | 'continue' | 'silentlyContinue'. ProgressPreference. Default: silentlyContinue.
  # Advanced
    #failOnStderr: false # boolean. Fail on Standard Error. Default: false.
    #showWarnings: false # boolean. Show warnings as Azure DevOps warnings. Default: false.
    #ignoreLASTEXITCODE: false # boolean. Ignore $LASTEXITCODE. Default: false.
    #pwsh: false # boolean. Use PowerShell Core. Default: false.
    #workingDirectory: # string. Working Directory. 
    #runScriptInSeparateScope: false # boolean. Run script in the separate scope. Default: false.
# PowerShell v2
# Run a PowerShell script on Linux, macOS, or Windows.
- task: PowerShell@2
  inputs:
    #targetType: 'filePath' # 'filePath' | 'inline'. Type. Default: filePath.
    filePath: # string. Required when targetType = filePath. Script Path. 
    #arguments: # string. Optional. Use when targetType = filePath. Arguments. 
    #script: # string. Required when targetType = inline. Script. 
  # Preference Variables
    #errorActionPreference: 'stop' # 'default' | 'stop' | 'continue' | 'silentlyContinue'. ErrorActionPreference. Default: stop.
    #warningPreference: 'default' # 'default' | 'stop' | 'continue' | 'silentlyContinue'. WarningPreference. Default: default.
    #informationPreference: 'default' # 'default' | 'stop' | 'continue' | 'silentlyContinue'. InformationPreference. Default: default.
    #verbosePreference: 'default' # 'default' | 'stop' | 'continue' | 'silentlyContinue'. VerbosePreference. Default: default.
    #debugPreference: 'default' # 'default' | 'stop' | 'continue' | 'silentlyContinue'. DebugPreference. Default: default.
  # Advanced
    #failOnStderr: false # boolean. Fail on Standard Error. Default: false.
    #showWarnings: false # boolean. Show warnings as Azure DevOps warnings. Default: false.
    #ignoreLASTEXITCODE: false # boolean. Ignore $LASTEXITCODE. Default: false.
    #pwsh: false # boolean. Use PowerShell Core. Default: false.
    #workingDirectory: # string. Working Directory. 
    #runScriptInSeparateScope: false # boolean. Run script in the separate scope. Default: false.
# PowerShell v2
# Run a PowerShell script on Linux, macOS, or Windows.
- task: PowerShell@2
  inputs:
    #targetType: 'filePath' # 'filePath' | 'inline'. Type. Default: filePath.
    filePath: # string. Required when targetType = filePath. Script Path. 
    #arguments: # string. Optional. Use when targetType = filePath. Arguments. 
    #script: # string. Required when targetType = inline. Script. 
    #errorActionPreference: 'stop' # 'stop' | 'continue' | 'silentlyContinue'. ErrorActionPreference. Default: stop.
  # Advanced
    #failOnStderr: false # boolean. Fail on Standard Error. Default: false.
    #showWarnings: false # boolean. Show warnings as Azure DevOps warnings. Default: false.
    #ignoreLASTEXITCODE: false # boolean. Ignore $LASTEXITCODE. Default: false.
    #pwsh: false # boolean. Use PowerShell Core. Default: false.
    #workingDirectory: # string. Working Directory.
# PowerShell v2
# Run a PowerShell script on Linux, macOS, or Windows.
- task: PowerShell@2
  inputs:
    #targetType: 'filePath' # 'filePath' | 'inline'. Type. Default: filePath.
    filePath: # string. Required when targetType = filePath. Script Path. 
    #arguments: # string. Optional. Use when targetType = filePath. Arguments. 
    #script: # string. Required when targetType = inline. Script. 
    #errorActionPreference: 'stop' # 'stop' | 'continue' | 'silentlyContinue'. ErrorActionPreference. Default: stop.
  # Advanced
    #failOnStderr: false # boolean. Fail on Standard Error. Default: false.
    #ignoreLASTEXITCODE: false # boolean. Ignore $LASTEXITCODE. Default: false.
    #pwsh: false # boolean. Use PowerShell Core. Default: false.
    #workingDirectory: # string. Working Directory.

Входные данные

типа targetType -
string. Допустимые значения: filePath (путь к файлу), inline. Значение по умолчанию: filePath.

Указывает тип скрипта для выполнения задачи: встроенный скрипт или путь к файлу .ps1.


Путьк скрипту filePath -
string. Требуется, если targetType = filePath.

Указывает путь к выполнению скрипта. Должен быть полным путем или относительно $(System.DefaultWorkingDirectory).


arguments - аргументы
string. Необязательно. Используется при targetType = filePath.

Задает аргументы, переданные в скрипт PowerShell. Аргументы могут быть порядковые параметры или именованные параметры. Например, -Name someName -Path -Value "Some long string value".

arguments не используется, если targetType задано значение inline.


скрипта script -
string. Требуется, если targetType = inline. Значение по умолчанию: # Write your PowerShell commands here.\n\nWrite-Host "Hello World".

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


errorActionPreference - ErrorActionPreference
string. Допустимые значения: default, , stopcontinuesilentlyContinue. Значение по умолчанию: stop.

Добавляет строку $ErrorActionPreference = 'VALUE' в верхней части скрипта.


errorActionPreference - ErrorActionPreference
string. Допустимые значения: stop, continue, silentlyContinue. Значение по умолчанию: stop.

Добавляет строку $ErrorActionPreference = 'VALUE' в верхней части скрипта.


warningPreference - WarningPreference
string. Допустимые значения: default, , stopcontinuesilentlyContinue. Значение по умолчанию: default.

Если не задано значение Default, добавляет строку $WarningPreference = 'VALUE' в верхней части скрипта.


InformationPreference informationPreference -
string. Допустимые значения: default, , stopcontinuesilentlyContinue. Значение по умолчанию: default.

Если не задано значение Default, добавляет строку $InformationPreference = 'VALUE' в верхней части скрипта.


verbosePreference - VerbosePreference
string. Допустимые значения: default, , stopcontinuesilentlyContinue. Значение по умолчанию: default.

Если не задано значение Default, добавляет строку $VerbosePreference = 'VALUE' в верхней части скрипта.


debugPreference - DebugPreference
string. Допустимые значения: default, , stopcontinuesilentlyContinue. Значение по умолчанию: default.

Если не задано значение Default, добавляет строку $DebugPreference = 'VALUE' в верхней части скрипта.


progressPreference - ProgressPreference
string. Допустимые значения: default, , stopcontinuesilentlyContinue. Значение по умолчанию: silentlyContinue.

Если не задано значение Default, добавляет строку $ProgressPreference = 'VALUE' в верхней части скрипта.


failOnStderr - сбой стандартной ошибки
boolean. Значение по умолчанию: false.

Если значение этого логического кода true, задача завершается ошибкой, если в конвейер ошибок записываются какие-либо ошибки или если данные записываются в стандартный поток ошибок. В противном случае задача использует код выхода для определения сбоя.


showWarnings - Отображать предупреждения в виде предупреждений Azure DevOps
boolean. Значение по умолчанию: false.

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


ignoreLASTEXITCODE - игнорировать $LASTEXITCODE
boolean. Значение по умолчанию: false.

Если для параметра задано значение false, строка if ((Test-Path -LiteralPath variable:\LASTEXITCODE)) { exit $LASTEXITCODE } добавляется в конец скрипта. Это приведет к тому, что последний код выхода из внешней команды будет распространяться в виде кода выхода powershell. В противном случае строка не добавляется в конец скрипта.


pwsh - использование PowerShell Core
boolean. Значение по умолчанию: false.

Если это верно, задачи, выполняемые в агентах Windows, будут использовать pwsh.exe из пути вместо powershell.exe.


workingDirectory - рабочий каталог
string.

Указывает рабочий каталог, в котором выполняется скрипт. Если значение не указано, рабочий каталог $(Build.SourcesDirectory).


runScriptInSeparateScope - Выполнить скрипт в отдельной области
boolean. Значение по умолчанию: false.

Это позволяет выполнять скрипты PowerShell с помощью оператора & вместо .по умолчанию. Если для этих входных данных задано значение true, скрипт будет выполняться в отдельной области, а глобальные переменные PowerShell не будут обновляться.


Параметры управления задачами

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

Выходные переменные

Нет.

Замечания

Каждый сеанс PowerShell длится только в течение всего задания, в котором он выполняется. Задачи, зависящие от начальной загрузки, должны находиться в том же задании, что и начальная загрузка.

Сочетания клавиш для задач

PowerShell@2 имеет два сочетания клавиш в YAML: steps.powershell и steps.pwsh.

  • powershell выполняется с помощью Windows PowerShell (в Windows) или pwsh (Linux и macOS).
  • pwsh запускает PowerShell Core, кроссплатформенный выпуск PowerShell, основанный на .NET Core.
steps:
- powershell: # Run a script in Windows PowerShell on Windows, and pwsh on Linux and macOS.
- pwsh: # Run a script in PowerShell Core on Windows, macOS, and Linux.

Задайте переменную, чтобы ее можно было считывать с помощью последующих скриптов и задач

Дополнительные сведения об определении переменных сборки в скрипте см. в статье Определение и изменение переменных сборки в скрипте.

Дополнительные сведения об определении переменных выпуска в скрипте см. в статье Определение и изменение переменных выпуска вскрипта.

Передача секретов конвейера в скрипте, но секрет не маскируется в журналах конвейера

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

./script.ps1 --arg1 value1 --arg2 <some_secret_which_will_be_masked_here>

Может быть исключение: At <path_to_temp_script_file>:4 char:3:

+   ./script.ps1 --arg1 value1 --arg2 <unmasked_part_of_original_secret> ...
+   ~~~~~~~~~~
    + <Additional exception details>

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

Примеры

Вызов скрипта из файла

Ниже приведен пример файла PowerShell с именем test.ps1 расположен в корневом каталоге репозитория.

Write-Host "Hello World from $Env:AGENT_NAME."
Write-Host "My ID is $Env:AGENT_ID."
Write-Host "AGENT_WORKFOLDER contents:"
gci $Env:AGENT_WORKFOLDER
Write-Host "AGENT_BUILDDIRECTORY contents:"
gci $Env:AGENT_BUILDDIRECTORY
Write-Host "BUILD_SOURCESDIRECTORY contents:"
gci $Env:BUILD_SOURCESDIRECTORY
Write-Host "Over and out."

Этот скрипт можно вызвать в конвейере, как показано ниже.

steps:
- task: PowerShell@2
  inputs:
    targetType: 'filePath'
    filePath: 'test.ps1'

Создание предупреждения

- task: PowerShell@2
  inputs:
    targetType: 'inline'
    script: Write-Host "##vso[task.LogIssue type=warning;]This is the warning"
    # Writes a warning to build summary and to log in yellow text

Запись ошибки

- task: PowerShell@2
  inputs:
    targetType: 'inline'
    script: Write-Host "##vso[task.LogIssue type=error;]This is the error"
    # Writes an error to build summary and to log in red text

Если эта ошибка завершится сбоем сборки, добавьте exit 1 в скрипт.

- task: PowerShell@2
  inputs:
    targetType: 'inline'
    script: |
      Write-Host "##vso[task.LogIssue type=error;]This is the error"
      exit 1
    # Writes an error to build summary and to log in red text

Вызов скрипта PowerShell с несколькими аргументами

Создание скрипта PowerShell test2.ps1:

param ($input1, $input2)
Write-Host "$input1 $input2"

В конвейере YAML вызовите:

- task: PowerShell@2
  inputs:
    targetType: 'filePath'
    filePath: $(System.DefaultWorkingDirectory)\test2.ps1
    arguments: > # Use this to avoid newline characters in multiline string
      -input1 "Hello"
      -input2 "World"
  displayName: 'Print Hello World'

Требования

Требование Описание
Типы конвейеров YAML, классическая сборка, классический выпуск
Выполняется в Агент, DeploymentGroup
требования Нет
возможностей Эта задача не удовлетворяет требованиям к последующим задачам в задании.
ограничения команд Любое
переменные settable Любое
Версия агента 2.115.0 или более поздней версии
Категория задач Полезность

См. также