Condividi tramite


PowerShell@2 - Attività di PowerShell v2

Usare questa attività per eseguire uno script di PowerShell in Linux, macOS o Windows.

Nota

Per impostazione predefinita, PowerShell v2 usa PowerShell Core per gli agenti Linux e Windows PowerShell per gli agenti Windows. Per usare la versione più recente di PowerShell negli agenti Windows, impostare il parametro pwsh su true. PowerShell Core verrà quindi usato.

Sintassi

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

Ingressi dati

di tipo targetType -
string. Valori consentiti: filePath (percorso file), inline. Valore predefinito: filePath

Specifica il tipo di script per l'attività da eseguire: uno script inline o un percorso di un file .ps1.


filePath - percorso script
string. Obbligatorio quando targetType = filePath.

Specifica il percorso dello script da eseguire. Deve essere un percorso completo o relativo a $(System.DefaultWorkingDirectory).


arguments - argomenti
string. Opzionale. Usare quando targetType = filePath.

Specifica gli argomenti passati allo script di PowerShell. Gli argomenti possono essere parametri ordinali o parametri denominati. Ad esempio: -Name someName -Path -Value "Some long string value".

arguments non viene usato quando targetType è impostato su inline.


script - script
string. Obbligatorio quando targetType = inline. Valore predefinito: # Write your PowerShell commands here.\n\nWrite-Host "Hello World"

Specifica il contenuto dello script. La lunghezza massima supportata dello script inline è di 20000 caratteri. Usare uno script da un file se si vuole usare uno script più lungo.


errorActionPreference - ErrorActionPreference
string. Valori consentiti: default, stop, continue, silentlyContinue. Valore predefinito: stop

Antepone la riga $ErrorActionPreference = 'VALUE' nella parte superiore dello script.


errorActionPreference - ErrorActionPreference
string. Valori consentiti: stop, continue, silentlyContinue. Valore predefinito: stop

Antepone la riga $ErrorActionPreference = 'VALUE' nella parte superiore dello script.


warningPreference - AvvisoPreference
string. Valori consentiti: default, stop, continue, silentlyContinue. Valore predefinito: default

Se non è impostato su Default, antepone la riga $WarningPreference = 'VALUE' all'inizio dello script.


informationPreference - InformationPreference
string. Valori consentiti: default, stop, continue, silentlyContinue. Valore predefinito: default

Se non è impostato su Default, antepone la riga $InformationPreference = 'VALUE' all'inizio dello script.


verbosePreference - VerbosePreference
string. Valori consentiti: default, stop, continue, silentlyContinue. Valore predefinito: default

Se non è impostato su Default, antepone la riga $VerbosePreference = 'VALUE' all'inizio dello script.


debugPreference - DebugPreference
string. Valori consentiti: default, stop, continue, silentlyContinue. Valore predefinito: default

Se non è impostato su Default, antepone la riga $DebugPreference = 'VALUE' all'inizio dello script.


progressPreference - ProgressPreference
string. Valori consentiti: default, stop, continue, silentlyContinue. Valore predefinito: silentlyContinue

Se non è impostato su Default, antepone la riga $ProgressPreference = 'VALUE' all'inizio dello script.


failOnStderr - errore standard
boolean. Valore predefinito: false

Se il valore di questo valore booleano è true, l'attività ha esito negativo se vengono scritti errori nella pipeline di errore o se i dati vengono scritti nel flusso di errore standard. In caso contrario, l'attività si basa sul codice di uscita per determinare l'errore.


showWarnings - Mostra avvisi come avvisi di Azure DevOps
boolean. Valore predefinito: false

Se il valore è impostato su truee lo script scrive avvisi, gli avvisi verranno visualizzati come avvisi nei log della pipeline.


ignoreLASTEXITCODE - Ignora $LASTEXITCODE
boolean. Valore predefinito: false

Se il valore è impostato su false, la riga if ((Test-Path -LiteralPath variable:\LASTEXITCODE)) { exit $LASTEXITCODE } viene aggiunta alla fine dello script. In questo modo, l'ultimo codice di uscita da un comando esterno verrà propagato come codice di uscita di powershell. In caso contrario, la riga non viene aggiunta alla fine dello script.


pwsh - Usare powerShell Core
boolean. Valore predefinito: false

Se questo è vero, le attività in esecuzione negli agenti Windows useranno pwsh.exe dal percorso invece di powershell.exe.


workingDirectory - directory di lavoro
string.

Specifica la directory di lavoro in cui viene eseguito lo script. Se non viene specificato un valore, la directory di lavoro viene $(Build.SourcesDirectory).


runScriptInSeparateScope - Esegui script nell'ambito separato
boolean. Valore predefinito: false

Questo input consente l'esecuzione di script di PowerShell usando & operatore anziché il .predefinito . Se questo input è impostato su true, lo script verrà eseguito in un ambito separato e le variabili di PowerShell con ambito globale non verranno aggiornate.


Opzioni di controllo delle attività

Tutte le attività dispongono di opzioni di controllo oltre ai relativi input attività. Per altre informazioni, vedere Opzioni di controllo e proprietà comuni delle attività.

Variabili di output

Nessuno.

Osservazioni:

Ogni sessione di PowerShell dura solo per la durata del processo in cui viene eseguita. Le attività che dipendono da ciò che è stato avviato devono trovarsi nello stesso processo del bootstrap.

Collegamenti alle attività

PowerShell@2 include due collegamenti in YAML: steps.powershell e steps.pwsh.

  • powershell viene eseguito usando Windows PowerShell (in Windows) o pwsh (Linux e macOS).
  • pwsh esegue PowerShell Core, l'edizione multipiattaforma di PowerShell basata su .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.

Impostare una variabile in modo che possa essere letta da script e attività successivi

Per altre informazioni sulla definizione delle variabili di compilazione in uno script, vedere Definire e modificare le variabili di compilazione in uno script.

Per altre informazioni sulla definizione delle variabili di versione in uno script, vedere Definire e modificare le variabili di versione in uno script.

Passaggio di segreti della pipeline nello script, ma il segreto non è mascherato nei log della pipeline

Tenere presente che PowerShell interrompe i messaggi di errore, quindi se si usano segreti della pipeline in uno script, è possibile tagliare ed esporre i segreti. Ad esempio, nello script inline seguente:

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

Potrebbe essere presente un'eccezione come: At <path_to_temp_script_file>:4 char:3:

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

Per evitare questo problema, è possibile gestire queste eccezioni a livello di script o evitare casi in cui i segreti della pipeline possono essere visualizzati nelle righe del codice sorgente all'interno dei messaggi di errore.

Esempi

Richiamare uno script da un file

Di seguito è riportato un file di PowerShell di esempio denominato test.ps1 che si trova nella radice del repository.

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

È possibile richiamare questo script nella pipeline in questo modo.

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

Scrivere un avviso

- 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

Scrivere un errore

- 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

Se si vuole che questo errore non riesca la compilazione, aggiungere exit 1 allo script.

- 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

Chiamare lo script di PowerShell con più argomenti

Creare uno script di PowerShell test2.ps1:

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

Nella pipeline YAML chiamare:

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

Requisiti

Requisito Descrizione
Tipi di pipeline YAML, build classica, versione classica
Viene eseguito in Agente, DeploymentGroup
richieste Nessuno
funzionalità di Questa attività non soddisfa alcuna richiesta di attività successive nel processo.
restrizioni dei comandi Qualunque
variabili impostabili Qualunque
Versione dell'agente 2.115.0 o versione successiva
Categoria attività Utilità

Vedere anche