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
| Argumento | Descripción |
|---|---|
targetTypeTipo | (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 |
filePathRuta 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 |
argumentsArgumentos | (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 . |
scriptScript | (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" |
errorActionPreferenceErrorActionPreference | (Opcional) Cuando no es "default", antepone la línea $ErrorActionPreference = 'VALUE' en la parte superior del script.Valor predeterminado: stop |
warningPreferenceWarningPreference | (Opcional) Cuando no es "default", antepone la línea $WarningPreference = 'VALUE' en la parte superior del script.Valor predeterminado: valor predeterminado |
informationPreferenceInformationPreference | (Opcional) Cuando no es "default", antepone la línea $InformationPreference = 'VALUE' en la parte superior del script.Valor predeterminado: valor predeterminado |
verbosePreferenceVerbosePreference | (Opcional) Cuando no es "default", antepone la línea $VerbosePreference = 'VALUE' en la parte superior del script.Valor predeterminado: valor predeterminado |
debugPreferenceDebugPreference | (Opcional) Cuando no es "default", antepone la línea $DebugPreference = 'VALUE' en la parte superior del script.Valor predeterminado: valor predeterminado |
failOnStderrError 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 |
ignoreLASTEXITCODEOmitir $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 scriptValor predeterminado: false |
pwshUso 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 |
workingDirectoryDirectorio 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 entorno | Lista 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:
|
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)
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:
- Editar la canalización y seleccionar Variables
- Agregar una nueva variable con el nombre
System.Debugy el valortrue - 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.