Using task PowershellTask@2 to invoke a pscore script in a YAML pipeline generates a dotnet error
tristanbarcelon opened this issue · 4 comments
Required Information
Entering this information will route you directly to the right team and expedite traction.
Question, Bug, or Feature?
Type: Bug
Enter Task Name: Powershell
list here (V# not needed): 2
Environment
-
Server - Azure Pipelines
Please reach out to me in private so I can provide account name, team project name, build definition name, and build number.
-
Agent - Hosted:
I'm using pool with vmImage: 'ubuntu-latest' in yaml pipeline. I've tried using private agents as well and the same error persists .
Issue Description
When calling a powershell script via pwsh, I get an unexpected error about an option: -V which I'm never setting at all in my script or in the YAML task.
- task: PowerShell@2
displayName: 'Set or register PrivatePSGallery'
inputs:
targetType: 'filePath'
filePath: '$(Build.SourcesDirectory)/src/setprivatepsgallery.ps1'
arguments: '-RepositoryName $(PowershellRepositoryName) -RepositorySourceLocation $(PowershellRepositorySourceLocation)'
failOnStderr: true
showWarnings: true
pwsh: true
env:
SYSTEM_ACCESSTOKEN: $(System.AccessToken)Task logs
Please reach out to me privately so I can provide you a zip file of the task logs.
Error logs
##[debug]/usr/bin/pwsh arg: . '/home/vsts/work/_temp/a132de4b-03fd-42f2-bb22-8aecb6d3cd96.ps1'
##[debug]exec tool: /usr/bin/pwsh
##[debug]arguments:
##[debug] -NoLogo
##[debug] -NoProfile
##[debug] -NonInteractive
##[debug] -Command
##[debug] . '/home/vsts/work/_temp/a132de4b-03fd-42f2-bb22-8aecb6d3cd96.ps1'
/usr/bin/pwsh -NoLogo -NoProfile -NonInteractive -Command . '/home/vsts/work/_temp/a132de4b-03fd-42f2-bb22-8aecb6d3cd96.ps1'
Id Name PSJobTypeName State HasMoreData Location
1 94558a0b-00d0-… NotStarted False
Searching for repository: PrivatePSGallery
Registering repository PrivatePSGallery name with SourceLocation to https://pkgs.dev.azure.com/myaccount/_packaging/myfeedname/nuget/v2
Unknown option: -V
Hi @max-zaytsev , thank you for taking a look at this issue. I've also opened up a ticket (2108190040004024) with azure devops support to see if I can get quicker resolution. I've looked at the yaml pipeline definition and my powershell script but couldn't find anything I'm providing that's a -V. setprivatepsgallery.ps1 is defined below. Am I passing the arguments incorrectly in the YAML pipeline step?
[CmdletBinding()]
param(
[Parameter(Mandatory = $true, HelpMessage = 'Powershell repository name to set or register')]
[string] $RepositoryName,
[Parameter(Mandatory = $true, HelpMessage = 'Azure Devops feed URL to use as repository source')]
[string] $RepositorySourceLocation
)
begin {}
process {
try
{
[string] $BuildDefinition = $ENV:BUILD_DEFINITIONNAME
if ([string]::IsNullOrEmpty($ENV:SYSTEM_ACCESSTOKEN))
{
Write-Error "Build pipeline: $BuildDefinition needs to have access to SYSTEM_ACCESSTOKEN environment variable"
}
else
{
$AZDOCredential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList @('buildagent', (ConvertTo-SecureString -String $ENV:SYSTEM_ACCESSTOKEN -AsPlainText -Force))
}
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 -bor [Net.SecurityProtocolType]::Tls13
Write-Host "Searching for repository: $($RepositoryName)"
$PrivateRepository = Get-PSRepository -Name $RepositoryName -ErrorAction SilentlyContinue -Verbose:$false
if ($null -eq $PrivateRepository)
{
$PrivateRepository = Get-PSRepository -Verbose:$false | Where-Object { ($_.SourceLocation -ieq $RepositorySourceLocation) -and ($_.Name -ine $RepositoryName) }
if ($null -ne $PrivateRepository)
{
Write-Host "Unregistering repository $($RepositoryName)"
Unregister-PSRepository -Name $RepositoryName
}
Write-Host "Registering repository $($RepositoryName) name with SourceLocation to $($RepositorySourceLocation)"
Register-PSRepository -Name $RepositoryName -SourceLocation $RepositorySourceLocation -InstallationPolicy Trusted -Credential $AZDOCredential
}
else
{
if (($PrivateRepository.SourceLocation -ine $RepositorySourceLocation) -or ($PrivateRepository.InstallationPolicy -ine 'Trusted'))
{
Write-Host "Updating repository $($RepositoryName) because its InstallationPolicy and SourceLocation do not match expected values"
Set-PSRepository -Name $RepositoryName -InstallationPolicy Trusted -SourceLocation $RepositorySourceLocation -Credential $AZDOCredential
}
else
{
Write-Host "Found repository: $($RepositoryName) and no updates are needed"
}
}
}
catch {
throw $_
}
finally {
Get-Variable -Scope local | Remove-Variable -ErrorAction SilentlyContinue
}
}
end {}
Hi @tristanbarcelon It doesn't look like a task issue. Is this reproducible if you run your ps script manually on the same machine?
Hi @max-zaytsev, looks like powershell team confirmed this as an issue with PowershellGet so it's not an issue with powershell task.