Tarea de PowerShell

Azure Pipelines | Azure DevOps Server 2020 | Azure DevOps Server 2019 | TFS 2018 - TFS 2015

Use esta tarea para ejecutar un script de PowerShell.

Nota

En Microsoft Team Foundation Server (TFS) 2018 y versiones anteriores, las canalizaciones de compilación y versión se denominan definiciones, las ejecuciones se denominan compilaciones, las conexiones de servicio se denominan puntos de conexión de servicio, las fases se denominan entornos y los trabajos se denominan fases.

Peticiones

  • DotNetFramework

Fragmento de código YAML

# PowerShell
# Run a PowerShell script on Linux, macOS, or Windows
- task: PowerShell@2
  inputs:
    #targetType: 'filePath' # Optional. Options: filePath, inline
    #filePath: # Required when targetType == FilePath
    #arguments: # Optional
    #script: '# Write your PowerShell commands here.Write-Host Hello World' # Required when targetType == Inline
    #errorActionPreference: 'stop' # Optional. Options: default, stop, continue, silentlyContinue
    #warningPreference: 'default' # Optional. Options: default, stop, continue, silentlyContinue
    #informationPreference: 'default' # Optional. Options: default, stop, continue, silentlyContinue
    #verbosePreference: 'default' # Optional. Options: default, stop, continue, silentlyContinue
    #debugPreference: 'default' # Optional. Options: default, stop, continue, silentlyContinue
    #failOnStderr: false # Optional
    #ignoreLASTEXITCODE: false # Optional
    #pwsh: false # Optional
    #workingDirectory: # Optional

La tarea de PowerShell también tiene dos accesos directos en YAML:

- powershell:  # inline script
  workingDirectory:  #
  displayName:  #
  failOnStderr:  #
  errorActionPreference:  #
  warningPreference:  #
  informationPreference:  #
  verbosePreference:  #
  debugPreference:  #
  ignoreLASTEXITCODE:  #
  env:  # mapping of environment variables to add
- pwsh:  # inline script
  workingDirectory:  #
  displayName:  #
  failOnStderr:  #
  errorActionPreference:  #
  warningPreference:  #
  informationPreference:  #
  verbosePreference:  #
  debugPreference:  #
  ignoreLASTEXITCODE:  #
  env:  # mapping of environment variables to add

Ambos se resuelven en la PowerShell@2 tarea. powershellejecuta Windows PowerShell y solo funcionará en un agente Windows. pwsh ejecuta PowerShell Core, que se debe instalar en el agente o contenedor.

Nota

Cada sesión de PowerShell solo dura durante el trabajo en el que se ejecuta. Las tareas que dependen de lo que se ha arrancado deben estar en el mismo trabajo que el arranque.

Argumentos

ArgumentoDescripción
targetType
Tipo
(Opcional) Establece si se trata de un script en línea o una ruta de acceso a un .ps1 archivo. De manera predeterminada, su valor es filepath.
Valor predeterminado: filePath
filePath
Ruta de acceso del script
(Obligatorio) Ruta de acceso del script que se ejecutará. Debe ser una ruta de acceso completa o relativa a $(System.DefaultWorkingDirectory) . Obligatorio si El tipo es filePath
arguments
Argumentos
(Opcional) Argumentos pasados al script de PowerShell.
Por ejemplo: -Name someName -Path -Value "Some long string value"

Nota: no se usa cuando Type es inline .
script
Script
(Obligatorio) Contenido del script. Obligatorio si targetType es inline .
La longitud máxima del script en línea admitida es de 32766 caracteres. Si necesita más, use el script del archivo .
Valor predeterminado: # Escriba los comandos de PowerShell aquí.
Write-Host "Hola mundo"
errorActionPreference
ErrorActionPreference
(Opcional) Cuando no es "default", antepone la línea $ErrorActionPreference = 'VALUE' en la parte superior del script.
Valor predeterminado: stop
warningPreference
WarningPreference
(Opcional) Cuando no es "default", antepone la línea $WarningPreference = 'VALUE' en la parte superior del script.
Valor predeterminado: valor predeterminado
informationPreference
InformationPreference
(Opcional) Cuando no es "default", antepone la línea $InformationPreference = 'VALUE' en la parte superior del script.
Valor predeterminado: valor predeterminado
verbosePreference
VerbosePreference
(Opcional) Cuando no es "default", antepone la línea $VerbosePreference = 'VALUE' en la parte superior del script.
Valor predeterminado: valor predeterminado
debugPreference
DebugPreference
(Opcional) Cuando no es "default", antepone la línea $DebugPreference = 'VALUE' en la parte superior del script.
Valor predeterminado: valor predeterminado
failOnStderr
Error cuando se produce un error estándar
(Opcional) Si esto es así, se producirá un error en esta tarea si se escribe algún error en la canalización de errores o si se escribe algún dato en la secuencia de errores estándar. De lo contrario, la tarea se basará en el código de salida para determinar el error.
Valor predeterminado: false
ignoreLASTEXITCODE
Omitir $LASTEXITCODE
(Opcional) Si es false, la línea if ((Test-Path -LiteralPath variable:\\LASTEXITCODE)) { exit $LASTEXITCODE } se anexa al final del script. Esto hará que el último código de salida de un comando externo se propague como código de salida de PowerShell. De lo contrario, la línea no se anexa al final del script
Valor predeterminado: false
pwsh
Uso de PowerShell Core
(Opcional) Si esto es así, en Windows la tarea usará pwsh.exe de path en lugar de powershell.exe
Valor predeterminado: false
workingDirectory
Directorio de trabajo
(Opcional) Especifique el directorio de trabajo en el que desea ejecutar el comando. Si lo deja vacío, el directorio de trabajo es $(Build.SourcesDirectory)
Variables de entornoLista de elementos adicionales que se asignarán al entorno del proceso. Por ejemplo, las variables secretas no se asignan automáticamente. Si tiene una variable secreta denominada Foo , puede asignarla de la siguiente forma:


- powershell: echo $env:MYSECRET
  env:
    MySecret: $(Foo)

Ejemplos

Hola mundo

Cree test.ps1 en la raíz del repositorio:

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."

En la pestaña Compilar de una canalización de compilación, agregue esta tarea:

Tarea Argumentos

Utilidad: PowerShell
Ejecute test.ps1.

Nombre de archivo de script:

Escribir una advertencia

Agregue la tarea de PowerShell, establezca El tipo en y pegue este script:

# Writes a warning to build summary and to log in yellow text
Write-Host  "##vso[task.LogIssue type=warning;]This is the warning"

Escribir un error

Agregue la tarea de PowerShell, establezca El tipo en y pegue este script:

# Writes an error to build summary and to log in red text
Write-Host  "##vso[task.LogIssue type=error;]This is the error"

Sugerencia

Si desea que este error genere un error en la compilación, agregue esta línea:

exit 1

ApplyVersionToAssemblies.ps1

Uso de un script para personalizar la canalización de compilación

Llamada a un script de PowerShell con varios argumentos

Cree un script de test2.ps1 PowerShell:

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

En la canalización de YAML, llame a:

- 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'

Código Abierto

Esta tarea es de código abierto en GitHub. Los comentarios y las contribuciones son bienvenidos.

Preguntas más frecuentes

¿Dónde puedo obtener información sobre los scripts de PowerShell?

Scripting con Windows PowerShell

Centro de scripts de Microsoft (scripting de scripting)

Windows PowerShell tutorial

PowerShell.org

Cómo establecer una variable para que pueda leerla mediante scripts y tareas posteriores?

Para más información sobre cómo definir variables de compilación en un script, consulte Definición y modificación de las variables de compilación en un script.

Para más información sobre cómo definir variables de versión en un script, consulte Definición y modificación de las variables de versión en un script.

P: Tengo problemas con la publicación de mis artefactos. ¿Cómo puedo ver los registros detallados?

Para habilitar registros detallados para la canalización:

  1. Editar la canalización y seleccionar Variables
  2. Agregar una nueva variable con el nombre System.Debug y el valor true
  3. Guardar

P: ¿Qué variables están disponibles para mí?

A: $(Build.SourcesDirectory) y son solo algunas de las variables que puede usar en la $(Agent.BuildDirectory) canalización. Las variables están disponibles como expresiones o scripts.

Consulte Definición de variables,variables predefinidasy variables clásicas de versión y artefactos para obtener información sobre los distintos tipos de variables.

P: La tarea me permite publicar artefactos en el trabajo de implementación en la canalización yaml, pero ¿no puedo usarlos en la canalización de nivel inferior?

A. Los trabajos de implementación no tienen el contexto de las ramas de origen y, por tanto, no son adecuados para publicar artefactos. Se han diseñado principalmente para consumir artefactos. Una solución alternativa sería aislar esa lógica en un trabajo independiente (con dependencias en los trabajos de implementación).

¿Necesito un agente?

Necesita al menos un agente para ejecutar la compilación o versión.

Tengo problemas. ¿Cómo puedo solucionarlos?

Vea Solución de problemas de compilación y versión.

No se puede seleccionar un grupo de agentes predeterminado y no se puede poner en cola la compilación o versión. ¿Cómo puedo corregirlo?

Vea Grupos de agentes.

La tarea de envío de cambios de NuGet genera el error siguiente: "Error: no se puede obtener el certificado del emisor local". ¿Cómo lo puedo corregir?

Esto se puede corregir si se añade un certificado raíz de confianza. Puede agregar la variable de entorno NODE_EXTRA_CA_CERTS=file al agente de compilación, o bien la variable de tarea NODE.EXTRA.CA.CERTS=file en la canalización. Vea la documentación de Node.js para obtener más detalles sobre esta variable. Consulte Establecimiento de variables en una canalización para obtener instrucciones sobre cómo establecer una variable en la canalización.

Utilizo TFS en el entorno local y no veo algunas de estas características. ¿Por qué no?

Algunas de estas características solo están disponibles en Azure Pipelines y todavía no lo están en el entorno local. Algunas características están disponibles en el entorno local si ha actualizado a la versión más reciente de TFS.