[cmdletbinding()] param( [string] [Parameter(Mandatory=$true)] $PathToVSIX, [string] [Parameter(Mandatory=$true)] $Token, [string] $IsPublicInput = "false", [string] $Version = $null, [string] $Publisher = $null, [string] $RemoveBaseUriInput = "true", [string] $ShareWith= $null ) Set-StrictMode -Version 3 [bool]$IsPublic = [bool]::Parse($IsPublicInput) [bool]$RemoveBaseUri = [bool]::Parse($RemoveBaseUriInput) $file = Get-ChildItem $PathToVSIX -Filter *.vsix -Recurse | % { $_.FullName } | Select -First 1 Write-Verbose "Found VSIX Package $file" try { $null = [IO.Compression.ZipFile] } catch { [System.Reflection.Assembly]::LoadWithPartialName('System.IO.Compression.FileSystem') } try { $fileZip = [System.IO.Compression.ZipFile]::Open( $file, 'Update' ) } catch { throw "Another process has locked the '$file' file." } $desiredFile = [System.IO.StreamReader]($fileZip.Entries | Where-Object { $_.FullName -match 'extension.vsixmanifest' }).Open() $text = $desiredFile.ReadToEnd() [xml]$xml = $text $desiredFile.Close() $desiredFile.Dispose() if ($Version) { Write-Verbose "Updating Version to $Version" $xml.PackageManifest.MetaData.Identity.Version = $Version } if ($Publisher) { Write-Verbose "Updating Publisher to $Publisher" $xml.PackageManifest.MetaData.Identity.Publisher = $Publisher } if($IsPublic -eq $true) { Write-Verbose "Setting GalleryFlag to Public" $xml.PackageManifest.MetaData.GalleryFlags = "Public" } else { Write-Verbose "Setting GalleryFlag to Private" $xml.PackageManifest.MetaData.GalleryFlags = "" } $desiredFile = [System.IO.StreamWriter]($fileZip.Entries | Where-Object { $_.FullName -match 'extension.vsixmanifest' }).Open() $desiredFile.BaseStream.SetLength(0) $desiredFile.Write($xml.InnerXml) $desiredFile.Flush() $desiredFile.Close() $desiredFile = [System.IO.StreamReader]($fileZip.Entries | Where-Object { $_.FullName -match 'extension.vsomanifest' }).Open() $text = $desiredFile.ReadToEnd() $desiredFile.Close() $desiredFile.Dispose() if ($RemoveBaseUri -eq $true) { $text = (($text -split "`n") | ? {$_ -notmatch 'baseUri'}) -join "`n" } $desiredFile = [System.IO.StreamWriter]($fileZip.Entries | Where-Object { $_.FullName -match 'extension.vsomanifest' }).Open() $desiredFile.BaseStream.SetLength(0) $desiredFile.Write($text) $desiredFile.Flush() $desiredFile.Close() $fileZip.Dispose() if($ShareWith -ne $null) { $ShareWith = "--share-with" + $ShareWith } else { $ShareWith = "" } npm install -g tfx-cli tfx extension publish --vsix "$File" --token $Token $ShareWith