From c13b6d66b7123505abc84eeb82a00ad4c1d4b443 Mon Sep 17 00:00:00 2001 From: Mario Majcica Date: Thu, 7 Dec 2023 08:14:43 +0100 Subject: [PATCH] Update --- README.md | 1 + task/ps_modules/VSSetup/.signature.p7s | Bin 0 -> 9354 bytes ...icrosoft.VisualStudio.Setup.PowerShell.dll | Bin 61576 -> 54864 bytes task/ps_modules/VSSetup/VSSetup.psd1 | 374 +++++++++--------- task/ps_modules/VSSetup/VSSetup.psm1 | 369 ++++++++--------- task/ps_modules/VSSetup/VSSetup.types.ps1xml | 366 ++++++++--------- .../VSSetup/{ => tools}/LICENSE.txt | 0 task/ps_modules/VstsTaskSdk/FindFunctions.ps1 | 2 +- .../VstsTaskSdk/LegacyFindFunctions.ps1 | 2 +- .../VstsTaskSdk/LocalizationFunctions.ps1 | 4 +- .../VstsTaskSdk/LoggingCommandFunctions.ps1 | 63 +-- .../VstsTaskSdk/PSGetModuleInfo.xml | Bin 23448 -> 0 bytes .../VstsTaskSdk/ServerOMFunctions.ps1 | 45 ++- .../resources.resjson/de-de/resources.resjson | 2 +- .../resources.resjson/es-es/resources.resjson | 2 +- .../resources.resjson/fr-fr/resources.resjson | 2 +- .../resources.resjson/it-IT/resources.resjson | 2 +- .../resources.resjson/ja-jp/resources.resjson | 2 +- .../resources.resjson/ko-KR/resources.resjson | 6 +- .../resources.resjson/ru-RU/resources.resjson | 4 +- .../resources.resjson/zh-CN/resources.resjson | 2 +- .../resources.resjson/zh-TW/resources.resjson | 2 +- task/ps_modules/VstsTaskSdk/ToolFunctions.ps1 | 114 +++++- task/ps_modules/VstsTaskSdk/VstsTaskSdk.psd1 | Bin 1738 -> 899 bytes task/ps_modules/VstsTaskSdk/VstsTaskSdk.psm1 | 2 + task/ps_modules/utils.psm1 | 12 +- task/task.json | 6 +- 27 files changed, 764 insertions(+), 620 deletions(-) create mode 100644 task/ps_modules/VSSetup/.signature.p7s rename task/ps_modules/VSSetup/{ => tools}/LICENSE.txt (100%) delete mode 100644 task/ps_modules/VstsTaskSdk/PSGetModuleInfo.xml diff --git a/README.md b/README.md index 5f03c8b..de410cd 100644 --- a/README.md +++ b/README.md @@ -22,6 +22,7 @@ The desired Visual Studio version needs to be present on your build server. ## Release notes +* 2.0.4 - Added support for VS2022. Updated dependencies. Removed support for VS2015 and below versions. * 2.0.3 - Updated Task Library to v0.11.0. Updated VSSetup library to v2.2.5. Added the support for VS2019. Added extra Project filed/parameter. Solution parameter now supports wildcards [#1](https://github.com/mmajcica/DevEnvBuild/issues/1). * 1.0.2 - Minor improvements on the extension. No task changes * 1.0.1 - Initial Release diff --git a/task/ps_modules/VSSetup/.signature.p7s b/task/ps_modules/VSSetup/.signature.p7s new file mode 100644 index 0000000000000000000000000000000000000000..6604a7f21236c2d7e2787194da0ecb70f2fbebc3 GIT binary patch literal 9354 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 - + - - + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + diff --git a/task/ps_modules/VSSetup/LICENSE.txt b/task/ps_modules/VSSetup/tools/LICENSE.txt similarity index 100% rename from task/ps_modules/VSSetup/LICENSE.txt rename to task/ps_modules/VSSetup/tools/LICENSE.txt diff --git a/task/ps_modules/VstsTaskSdk/FindFunctions.ps1 b/task/ps_modules/VstsTaskSdk/FindFunctions.ps1 index 8687f1b..c0278ea 100644 --- a/task/ps_modules/VstsTaskSdk/FindFunctions.ps1 +++ b/task/ps_modules/VstsTaskSdk/FindFunctions.ps1 @@ -155,7 +155,7 @@ function Find-Match { $findResults += $findPath } } else { - $findResults = Get-FindResult -Path $findPath -Options $FindOptions + $findResults = @( Get-FindResult -Path $findPath -Options $FindOptions ) } Write-Verbose "Found $($findResults.Count) paths." diff --git a/task/ps_modules/VstsTaskSdk/LegacyFindFunctions.ps1 b/task/ps_modules/VstsTaskSdk/LegacyFindFunctions.ps1 index f6aaa5a..9e9e9ec 100644 --- a/task/ps_modules/VstsTaskSdk/LegacyFindFunctions.ps1 +++ b/task/ps_modules/VstsTaskSdk/LegacyFindFunctions.ps1 @@ -132,7 +132,7 @@ function Find-Files { } # Validate pattern does not end with a \. - if ($pattern[$pattern.Length - 1] -eq [System.IO.Path]::DirectorySeparatorChar) { + if ($pattern.EndsWith([System.IO.Path]::DirectorySeparatorChar)) { throw (Get-LocString -Key PSLIB_InvalidPattern0 -ArgumentList $pattern) } diff --git a/task/ps_modules/VstsTaskSdk/LocalizationFunctions.ps1 b/task/ps_modules/VstsTaskSdk/LocalizationFunctions.ps1 index 6f3b6bb..b554970 100644 --- a/task/ps_modules/VstsTaskSdk/LocalizationFunctions.ps1 +++ b/task/ps_modules/VstsTaskSdk/LocalizationFunctions.ps1 @@ -60,10 +60,10 @@ function Get-LocString { <# .SYNOPSIS -Imports resource strings for use with Get-VstsLocString. +Imports resource strings for use with GetVstsLocString. .DESCRIPTION -Imports resource strings for use with Get-VstsLocString. The imported strings are stored in an internal resource string dictionary. Optionally, if a separate resource file for the current culture exists, then the localized strings from that file then imported (overlaid) into the same internal resource string dictionary. +Imports resource strings for use with GetVstsLocString. The imported strings are stored in an internal resource string dictionary. Optionally, if a separate resource file for the current culture exists, then the localized strings from that file then imported (overlaid) into the same internal resource string dictionary. Resource strings from the SDK are prefixed with "PSLIB_". This prefix should be avoided for custom resource strings. diff --git a/task/ps_modules/VstsTaskSdk/LoggingCommandFunctions.ps1 b/task/ps_modules/VstsTaskSdk/LoggingCommandFunctions.ps1 index a2eeb9d..4e8eb73 100644 --- a/task/ps_modules/VstsTaskSdk/LoggingCommandFunctions.ps1 +++ b/task/ps_modules/VstsTaskSdk/LoggingCommandFunctions.ps1 @@ -436,6 +436,41 @@ function Write-UpdateReleaseName { Write-LoggingCommand -Area 'release' -Event 'updatereleasename' -Data $Name -AsOutput:$AsOutput } +<# +.SYNOPSIS +See https://github.com/Microsoft/vsts-tasks/blob/master/docs/authoring/commands.md + +.PARAMETER AsOutput +Indicates whether to write the logging command directly to the host or to the output pipeline. +#> +function Write-LoggingCommand { + [CmdletBinding(DefaultParameterSetName = 'Parameters')] + param( + [Parameter(Mandatory = $true, ParameterSetName = 'Parameters')] + [string]$Area, + [Parameter(Mandatory = $true, ParameterSetName = 'Parameters')] + [string]$Event, + [Parameter(ParameterSetName = 'Parameters')] + [string]$Data, + [Parameter(ParameterSetName = 'Parameters')] + [hashtable]$Properties, + [Parameter(Mandatory = $true, ParameterSetName = 'Object')] + $Command, + [switch]$AsOutput) + + if ($PSCmdlet.ParameterSetName -eq 'Object') { + Write-LoggingCommand -Area $Command.Area -Event $Command.Event -Data $Command.Data -Properties $Command.Properties -AsOutput:$AsOutput + return + } + + $command = Format-LoggingCommand -Area $Area -Event $Event -Data $Data -Properties $Properties + if ($AsOutput) { + $command + } else { + Write-Host $command + } +} + ######################################## # Private functions. ######################################## @@ -498,34 +533,6 @@ function Format-LoggingCommand { $sb.Append(']').Append($Data).ToString() } -function Write-LoggingCommand { - [CmdletBinding(DefaultParameterSetName = 'Parameters')] - param( - [Parameter(Mandatory = $true, ParameterSetName = 'Parameters')] - [string]$Area, - [Parameter(Mandatory = $true, ParameterSetName = 'Parameters')] - [string]$Event, - [Parameter(ParameterSetName = 'Parameters')] - [string]$Data, - [Parameter(ParameterSetName = 'Parameters')] - [hashtable]$Properties, - [Parameter(Mandatory = $true, ParameterSetName = 'Object')] - $Command, - [switch]$AsOutput) - - if ($PSCmdlet.ParameterSetName -eq 'Object') { - Write-LoggingCommand -Area $Command.Area -Event $Command.Event -Data $Command.Data -Properties $Command.Properties -AsOutput:$AsOutput - return - } - - $command = Format-LoggingCommand -Area $Area -Event $Event -Data $Data -Properties $Properties - if ($AsOutput) { - $command - } else { - Write-Host $command - } -} - function Write-LogIssue { [CmdletBinding()] param( diff --git a/task/ps_modules/VstsTaskSdk/PSGetModuleInfo.xml b/task/ps_modules/VstsTaskSdk/PSGetModuleInfo.xml deleted file mode 100644 index ad125c9cdf94b6d3889912aa906245367e50f9cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23448 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 function Get-WebProxy { [CmdletBinding()] diff --git a/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/de-de/resources.resjson b/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/de-de/resources.resjson index 248b674..90e1f15 100644 --- a/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/de-de/resources.resjson +++ b/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/de-de/resources.resjson @@ -6,7 +6,7 @@ "loc.messages.PSLIB_EnumeratingSubdirectoriesFailedForPath0": "Fehler beim Aufzählen von Unterverzeichnissen für den folgenden Pfad: \"{0}\"", "loc.messages.PSLIB_FileNotFound0": "Die Datei wurde nicht gefunden: \"{0}\".", "loc.messages.PSLIB_Input0": "\"{0}\"-Eingabe", - "loc.messages.PSLIB_InvalidPattern0": "Ungültiges Muster: \"{0}\"", + "loc.messages.PSLIB_InvalidPattern0": "Der Pfad darf nicht mit einem Verzeichnistrennzeichen enden: „{0}“", "loc.messages.PSLIB_LeafPathNotFound0": "Der Blattpfad wurde nicht gefunden: \"{0}\".", "loc.messages.PSLIB_PathLengthNotReturnedFor0": "Fehler bei der Normalisierung bzw. Erweiterung des Pfads. Die Pfadlänge wurde vom Kernel32-Subsystem nicht zurückgegeben für: \"{0}\"", "loc.messages.PSLIB_PathNotFound0": "Der Pfad wurde nicht gefunden: \"{0}\".", diff --git a/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/es-es/resources.resjson b/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/es-es/resources.resjson index b79ac21..e17ac0c 100644 --- a/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/es-es/resources.resjson +++ b/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/es-es/resources.resjson @@ -6,7 +6,7 @@ "loc.messages.PSLIB_EnumeratingSubdirectoriesFailedForPath0": "No se pudieron enumerar los subdirectorios de la ruta de acceso: '{0}'", "loc.messages.PSLIB_FileNotFound0": "Archivo no encontrado: '{0}'", "loc.messages.PSLIB_Input0": "Entrada '{0}'", - "loc.messages.PSLIB_InvalidPattern0": "Patrón no válido: '{0}'", + "loc.messages.PSLIB_InvalidPattern0": "La ruta de acceso no puede terminar con un carácter separador de directorios: '{0}'", "loc.messages.PSLIB_LeafPathNotFound0": "No se encuentra la ruta de acceso de la hoja: '{0}'", "loc.messages.PSLIB_PathLengthNotReturnedFor0": "No se pudo normalizar o expandir la ruta de acceso. El subsistema Kernel32 no devolvió la longitud de la ruta de acceso para: '{0}'", "loc.messages.PSLIB_PathNotFound0": "No se encuentra la ruta de acceso: '{0}'", diff --git a/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/fr-fr/resources.resjson b/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/fr-fr/resources.resjson index dc2da05..bf964d5 100644 --- a/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/fr-fr/resources.resjson +++ b/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/fr-fr/resources.resjson @@ -6,7 +6,7 @@ "loc.messages.PSLIB_EnumeratingSubdirectoriesFailedForPath0": "Échec de l'énumération des sous-répertoires pour le chemin : '{0}'", "loc.messages.PSLIB_FileNotFound0": "Fichier introuvable : {0}.", "loc.messages.PSLIB_Input0": "Entrée '{0}'", - "loc.messages.PSLIB_InvalidPattern0": "Modèle non valide : '{0}'", + "loc.messages.PSLIB_InvalidPattern0": "Le chemin d’accès ne peut pas se terminer par un caractère de séparateur de répertoire : « {0} »", "loc.messages.PSLIB_LeafPathNotFound0": "Le chemin feuille est introuvable : '{0}'", "loc.messages.PSLIB_PathLengthNotReturnedFor0": "Échec de la normalisation/l'expansion du chemin. La longueur du chemin n'a pas été retournée par le sous-système Kernel32 pour : '{0}'", "loc.messages.PSLIB_PathNotFound0": "Chemin introuvable : '{0}'", diff --git a/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/it-IT/resources.resjson b/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/it-IT/resources.resjson index 77bea53..6d2b0a7 100644 --- a/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/it-IT/resources.resjson +++ b/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/it-IT/resources.resjson @@ -6,7 +6,7 @@ "loc.messages.PSLIB_EnumeratingSubdirectoriesFailedForPath0": "L'enumerazione delle sottodirectory per il percorso '{0}' non è riuscita", "loc.messages.PSLIB_FileNotFound0": "File non trovato: '{0}'", "loc.messages.PSLIB_Input0": "Input di '{0}'", - "loc.messages.PSLIB_InvalidPattern0": "Criterio non valido: '{0}'", + "loc.messages.PSLIB_InvalidPattern0": "Il percorso non può terminare con un carattere separatore di directory: '{0}'", "loc.messages.PSLIB_LeafPathNotFound0": "Percorso foglia non trovato: '{0}'", "loc.messages.PSLIB_PathLengthNotReturnedFor0": "La normalizzazione o l'espansione del percorso non è riuscita. Il sottosistema Kernel32 non ha restituito la lunghezza del percorso per '{0}'", "loc.messages.PSLIB_PathNotFound0": "Percorso non trovato: '{0}'", diff --git a/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/ja-jp/resources.resjson b/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/ja-jp/resources.resjson index 9f2f9fe..9c5102b 100644 --- a/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/ja-jp/resources.resjson +++ b/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/ja-jp/resources.resjson @@ -6,7 +6,7 @@ "loc.messages.PSLIB_EnumeratingSubdirectoriesFailedForPath0": "パス '{0}' のサブディレクトリを列挙できませんでした", "loc.messages.PSLIB_FileNotFound0": "ファイルが見つかりません: '{0}'", "loc.messages.PSLIB_Input0": "'{0}' 入力", - "loc.messages.PSLIB_InvalidPattern0": "使用できないパターンです: '{0}'", + "loc.messages.PSLIB_InvalidPattern0": "パスの末尾をディレクトリ区切り文字にすることはできません: '{0}'", "loc.messages.PSLIB_LeafPathNotFound0": "リーフ パスが見つかりません: '{0}'", "loc.messages.PSLIB_PathLengthNotReturnedFor0": "パスの正規化/展開に失敗しました。Kernel32 サブシステムからパス '{0}' の長さが返されませんでした", "loc.messages.PSLIB_PathNotFound0": "パスが見つかりません: '{0}'", diff --git a/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/ko-KR/resources.resjson b/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/ko-KR/resources.resjson index 17e0d28..382f024 100644 --- a/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/ko-KR/resources.resjson +++ b/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/ko-KR/resources.resjson @@ -1,12 +1,12 @@ { "loc.messages.PSLIB_AgentVersion0Required": "에이전트 버전 {0} 이상이 필요합니다.", "loc.messages.PSLIB_ContainerPathNotFound0": "컨테이너 경로를 찾을 수 없음: '{0}'", - "loc.messages.PSLIB_EndpointAuth0": "'{0}' 서비스 끝점 자격 증명", - "loc.messages.PSLIB_EndpointUrl0": "'{0}' 서비스 끝점 URL", + "loc.messages.PSLIB_EndpointAuth0": "'{0}' 서비스 엔드포인트 자격 증명", + "loc.messages.PSLIB_EndpointUrl0": "'{0}' 서비스 엔드포인트 URL", "loc.messages.PSLIB_EnumeratingSubdirectoriesFailedForPath0": "경로에 대해 하위 디렉터리를 열거하지 못함: '{0}'", "loc.messages.PSLIB_FileNotFound0": "{0} 파일을 찾을 수 없습니다.", "loc.messages.PSLIB_Input0": "'{0}' 입력", - "loc.messages.PSLIB_InvalidPattern0": "잘못된 패턴: '{0}'", + "loc.messages.PSLIB_InvalidPattern0": "경로는 디렉터리 구분 문자로 끝날 수 없습니다. '{0}'", "loc.messages.PSLIB_LeafPathNotFound0": "Leaf 경로를 찾을 수 없음: '{0}'", "loc.messages.PSLIB_PathLengthNotReturnedFor0": "경로 정규화/확장에 실패했습니다. 다음에 대해 Kernel32 subsystem에서 경로 길이를 반환하지 않음: '{0}'", "loc.messages.PSLIB_PathNotFound0": "경로를 찾을 수 없음: '{0}'", diff --git a/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/ru-RU/resources.resjson b/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/ru-RU/resources.resjson index b9c5a27..6402831 100644 --- a/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/ru-RU/resources.resjson +++ b/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/ru-RU/resources.resjson @@ -4,9 +4,9 @@ "loc.messages.PSLIB_EndpointAuth0": "Учетные данные конечной точки службы \"{0}\"", "loc.messages.PSLIB_EndpointUrl0": "URL-адрес конечной точки службы \"{0}\"", "loc.messages.PSLIB_EnumeratingSubdirectoriesFailedForPath0": "Сбой перечисления подкаталогов для пути: \"{0}\".", - "loc.messages.PSLIB_FileNotFound0": "Файл не найден: \"{0}\".", + "loc.messages.PSLIB_FileNotFound0": "Файл не найден: \"{0}\"", "loc.messages.PSLIB_Input0": "Входные данные \"{0}\".", - "loc.messages.PSLIB_InvalidPattern0": "Недопустимый шаблон: \"{0}\".", + "loc.messages.PSLIB_InvalidPattern0": "Путь не может заканчиваться символом разделителя каталогов: \"{0}\"", "loc.messages.PSLIB_LeafPathNotFound0": "Путь к конечному объекту не найден: \"{0}\".", "loc.messages.PSLIB_PathLengthNotReturnedFor0": "Сбой нормализации и расширения пути. Длина пути не была возвращена подсистемой Kernel32 для: \"{0}\".", "loc.messages.PSLIB_PathNotFound0": "Путь не найден: \"{0}\".", diff --git a/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/zh-CN/resources.resjson b/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/zh-CN/resources.resjson index 49d824b..a06dd5f 100644 --- a/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/zh-CN/resources.resjson +++ b/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/zh-CN/resources.resjson @@ -6,7 +6,7 @@ "loc.messages.PSLIB_EnumeratingSubdirectoriesFailedForPath0": "枚举路径的子目录失败:“{0}”", "loc.messages.PSLIB_FileNotFound0": "找不到文件: {0}。", "loc.messages.PSLIB_Input0": "“{0}”输入", - "loc.messages.PSLIB_InvalidPattern0": "无效的模式:“{0}”", + "loc.messages.PSLIB_InvalidPattern0": "路径不能以目录分隔符结尾:“{0}”", "loc.messages.PSLIB_LeafPathNotFound0": "找不到叶路径:“{0}”", "loc.messages.PSLIB_PathLengthNotReturnedFor0": "路径规范化/扩展失败。路径长度不是由“{0}”的 Kernel32 子系统返回的", "loc.messages.PSLIB_PathNotFound0": "找不到路径:“{0}”", diff --git a/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/zh-TW/resources.resjson b/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/zh-TW/resources.resjson index 7cbf22e..4b30477 100644 --- a/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/zh-TW/resources.resjson +++ b/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/zh-TW/resources.resjson @@ -6,7 +6,7 @@ "loc.messages.PSLIB_EnumeratingSubdirectoriesFailedForPath0": "為路徑列舉子目錄失敗: '{0}'", "loc.messages.PSLIB_FileNotFound0": "找不到檔案: '{0}'", "loc.messages.PSLIB_Input0": "'{0}' 輸入", - "loc.messages.PSLIB_InvalidPattern0": "模式無效: '{0}'", + "loc.messages.PSLIB_InvalidPattern0": "路徑不能以目錄分隔符號結尾: '{0}'", "loc.messages.PSLIB_LeafPathNotFound0": "找不到分葉路徑: '{0}'", "loc.messages.PSLIB_PathLengthNotReturnedFor0": "路徑正規化/展開失敗。Kernel32 子系統未傳回 '{0}' 的路徑長度", "loc.messages.PSLIB_PathNotFound0": "找不到路徑: '{0}'", diff --git a/task/ps_modules/VstsTaskSdk/ToolFunctions.ps1 b/task/ps_modules/VstsTaskSdk/ToolFunctions.ps1 index 7e62ebd..bb6f8d6 100644 --- a/task/ps_modules/VstsTaskSdk/ToolFunctions.ps1 +++ b/task/ps_modules/VstsTaskSdk/ToolFunctions.ps1 @@ -39,7 +39,8 @@ function Assert-Path { if ($PathType -eq [Microsoft.PowerShell.Commands.TestPathType]::Any) { Write-Verbose "Asserting path exists: '$LiteralPath'" - } else { + } + else { Write-Verbose "Asserting $("$PathType".ToLowerInvariant()) path exists: '$LiteralPath'" } @@ -75,7 +76,7 @@ This parameter not required for most scenarios. Indicates how to interpret the e .PARAMETER RequireExitCodeZero Indicates whether to write an error to the error pipeline if the exit code is not zero. #> -function Invoke-Tool { # TODO: RENAME TO INVOKE-PROCESS? +function Invoke-Tool { [CmdletBinding()] param( [ValidatePattern('^[^\r\n]*$')] @@ -86,7 +87,8 @@ function Invoke-Tool { # TODO: RENAME TO INVOKE-PROCESS? [string]$Arguments, [string]$WorkingDirectory, [System.Text.Encoding]$Encoding, - [switch]$RequireExitCodeZero) + [switch]$RequireExitCodeZero, + [bool]$IgnoreHostException) Trace-EnteringInvocation $MyInvocation $isPushed = $false @@ -104,12 +106,22 @@ function Invoke-Tool { # TODO: RENAME TO INVOKE-PROCESS? $FileName = $FileName.Replace('"', '').Replace("'", "''") Write-Host "##[command]""$FileName"" $Arguments" - Invoke-Expression "& '$FileName' --% $Arguments" + try { + Invoke-Expression "& '$FileName' --% $Arguments" + } + catch [System.Management.Automation.Host.HostException] { + if ($IgnoreHostException -eq $False) { + throw + } + + Write-Host "##[warning]Host Exception was thrown by Invoke-Expression, suppress it due IgnoreHostException setting" + } Write-Verbose "Exit code: $LASTEXITCODE" if ($RequireExitCodeZero -and $LASTEXITCODE -ne 0) { Write-Error (Get-LocString -Key PSLIB_Process0ExitedWithCode1 -ArgumentList ([System.IO.Path]::GetFileName($FileName)), $LASTEXITCODE) } - } finally { + } + finally { if ($originalEncoding) { [System.Console]::OutputEncoding = $originalEncoding } @@ -121,3 +133,95 @@ function Invoke-Tool { # TODO: RENAME TO INVOKE-PROCESS? Trace-LeavingInvocation $MyInvocation } } + +<# +.SYNOPSIS +Executes an external program as a child process. + +.DESCRIPTION +Executes an external program and waits for the process to exit. + +After calling this command, the exit code of the process can be retrieved from the variable $LASTEXITCODE or from the pipe. + +.PARAMETER FileName +File name (path) of the program to execute. + +.PARAMETER Arguments +Arguments to pass to the program. + +.PARAMETER StdOutPath +Path to a file to write the stdout of the process to. + +.PARAMETER StdErrPath +Path to a file to write the stderr of the process to. + +.PARAMETER RequireExitCodeZero +Indicates whether to write an error to the error pipeline if the exit code is not zero. + +.OUTPUTS +Exit code of the invoked process. Also available through the $LASTEXITCODE. + +.NOTES +To change output encoding, redirect stdout to file and then read the file with the desired encoding. +#> +function Invoke-Process { + [CmdletBinding()] + param( + [ValidatePattern('^[^\r\n]*$')] + [Parameter(Mandatory = $true)] + [string]$FileName, + [ValidatePattern('^[^\r\n]*$')] + [Parameter()] + [string]$Arguments, + [string]$WorkingDirectory, + [string]$StdOutPath, + [string]$StdErrPath, + [switch]$RequireExitCodeZero + ) + + Trace-EnteringInvocation $MyInvocation + try { + $FileName = $FileName.Replace('"', '').Replace("'", "''") + Write-Host "##[command]""$FileName"" $Arguments" + + $processOptions = @{ + FilePath = $FileName + NoNewWindow = $true + PassThru = $true + } + if ($Arguments) { + $processOptions.Add("ArgumentList", $Arguments) + } + if ($WorkingDirectory) { + $processOptions.Add("WorkingDirectory", $WorkingDirectory) + } + if ($StdOutPath) { + $processOptions.Add("RedirectStandardOutput", $StdOutPath) + } + if ($StdErrPath) { + $processOptions.Add("RedirectStandardError", $StdErrPath) + } + + # TODO: For some reason, -Wait is not working on agent. + # Agent starts executing the System usage metrics and hangs the step forever. + $proc = Start-Process @processOptions + + # https://stackoverflow.com/a/23797762 + $null = $($proc.Handle) + $proc.WaitForExit() + + $procExitCode = $proc.ExitCode + Write-Verbose "Exit code: $procExitCode" + + if ($RequireExitCodeZero -and $procExitCode -ne 0) { + Write-Error (Get-LocString -Key PSLIB_Process0ExitedWithCode1 -ArgumentList ([System.IO.Path]::GetFileName($FileName)), $procExitCode) + } + + $global:LASTEXITCODE = $procExitCode + + return $procExitCode + } + finally { + Trace-LeavingInvocation $MyInvocation + } +} diff --git a/task/ps_modules/VstsTaskSdk/VstsTaskSdk.psd1 b/task/ps_modules/VstsTaskSdk/VstsTaskSdk.psd1 index 483585d6ba7cfd1c2c59ac7c44e5f1d2780e46cc..1cd0394253334f8df3e84af48d5b55b56e781a53 100644 GIT binary patch literal 899 zcmbtTU2EGg6n)RH5bPn_z>X8=Lm3Pj>TM09Bh*RWudS#N@b;@6#0?pCo@BKb;&d+Y2L>@jD@SlfC$>@ai{^wZ?t5iuOCxk> z9ys>-HYXutl4n1A#6~@!$t#rdO~$DYxQpO>+mzw5-KuYo-bSb7^NWv~NuTrEN?+K6 z5l~3HP+Ca=_EKSE#0eZ`;J^#L>gOZO$R>Y()}0%5kEPog5sX#NY5Qd~I{3$Ji?~$v z=ryYmJhcWREi_8eppBdlAd;f!)dsS#{Ik@;-GHqEVUdo3rUf4_W{@uCv`D9OSTf|4 zEoW?=@JUL!pM-y&!+yj< literal 1738 zcmchY+iuf95QgU(iFdHX1qUgP(}W~NLZWJbR;Vayo7~5BoVsxiid|ZScy-{L*)EAq zD|!R6);r#v!#^|su7Cb`C*S0$Jdxn;Ih7SpDJQ%Wxt3g}?7U?>m$4M=6ml*T-g7xa zV=ker`C3Q|ja^T>9>#dtpq1fu`P*NFZHp(A2-`rOF$QP^=qQE&uZkj*RKB7W5c!g? z0_h7Fa_}j-8E?fE5Mv6OoV^RAgq4Z;iP6kh*Od}!VRko2B_4I{(pGl8rg&SSx!qlx z-#KrM7|InfHJ`AO_eUAYF?sl^#S$BqNIJ}W(y+OYtWqR>*+<$(n%M4ZR$_+Esaf{H z-LF;mfQ%IN3Y0$53He+YYQ>eZU+u`D<)c|Fspn^AR|nVK$5^ki+Yn_&WbKc$d_mNg zeC?4#OS(vZ`qJ(l(1DzJ>%sS|AkPgw)t-el)B{!v%PXU|+Pz&4jbY(AL%HEt8Spib zPc<(?tZppIne|$c+|SB32$YYzT>e0{mtgSG^$e`!z1)IGJFu@RSev0mQr?$X4Q!rJP3>&`Zt!=+&?>AJf79Gr=vlfV zg4S?kF+F>fNu}K(Z=}gHBL`*nHQ9&g>ltj`!>A^FaraRJeb@VjRUoeQz@zZ9I|mDk zb7Yo!2RJVGI5#Ow?y=qmZv={jr^{*&IYR2*oz^L5G-brBv_Yz;wu5eD9@@M+Ao<_- zTJ<*aIe)M4x%zcPo;e*jhT|#q9?2=PugJgekDl<9dh6e&6yF`ar4mto>Tbqa^N9R^ J$g$t$@(XnB12_Nx diff --git a/task/ps_modules/VstsTaskSdk/VstsTaskSdk.psm1 b/task/ps_modules/VstsTaskSdk/VstsTaskSdk.psm1 index 43b9561..62323bf 100644 --- a/task/ps_modules/VstsTaskSdk/VstsTaskSdk.psm1 +++ b/task/ps_modules/VstsTaskSdk/VstsTaskSdk.psm1 @@ -54,6 +54,7 @@ Export-ModuleMember -Function @( 'Write-AddBuildTag' 'Write-AssociateArtifact' 'Write-LogDetail' + 'Write-LoggingCommand' 'Write-PrependPath' 'Write-SetEndpoint' 'Write-SetProgress' @@ -82,6 +83,7 @@ Export-ModuleMember -Function @( 'Assert-Agent' 'Assert-Path' 'Invoke-Tool' + 'Invoke-Process' # Trace functions. 'Trace-EnteringInvocation' 'Trace-LeavingInvocation' diff --git a/task/ps_modules/utils.psm1 b/task/ps_modules/utils.psm1 index 79cb234..0db58c7 100644 --- a/task/ps_modules/utils.psm1 +++ b/task/ps_modules/utils.psm1 @@ -7,6 +7,11 @@ function Get-VSPath { PROCESS { Trace-VstsEnteringInvocation $MyInvocation try { + if ($Version -eq "17.0" -and + ($instance = Get-VSSetupInstance | Select-VSSetupInstance -Version '[17.0,)') -and + $instance.installationPath) { + return $instance.installationPath + } if ($Version -eq "16.0" -and ($instance = Get-VSSetupInstance | Select-VSSetupInstance -Version '[16.0,)') -and $instance.installationPath) { @@ -18,11 +23,6 @@ function Get-VSPath { $instance.installationPath) { return $instance.installationPath } - - # Fallback to searching for an older install. - if ($path = (Get-ItemProperty -LiteralPath "HKLM:\SOFTWARE\WOW6432Node\Microsoft\VisualStudio\$Version" -Name 'ShellFolder' -ErrorAction Ignore).ShellFolder) { - return $path - } } finally { Trace-VstsLeavingInvocation $MyInvocation @@ -38,7 +38,7 @@ function Select-VSVersion { Trace-VstsEnteringInvocation $MyInvocation try { $specificVersion = $PreferredVersion -and $PreferredVersion -ne 'latest' - $versions = '16.0', '15.0', '14.0', '12.0', '11.0', '10.0' | Where-Object { $_ -ne $PreferredVersion } + $versions = '17.0', '16.0', '15.0' | Where-Object { $_ -ne $PreferredVersion } # Look for a specific version of Visual Studio. if ($specificVersion) { diff --git a/task/task.json b/task/task.json index ee5b7e9..4882725 100644 --- a/task/task.json +++ b/task/task.json @@ -60,11 +60,9 @@ "defaultValue": "latest", "options": { "latest": "Latest", + "17.0": "Visual Studio 2022", "16.0": "Visual Studio 2019", - "15.0": "Visual Studio 2017", - "14.0": "Visual Studio 2015", - "12.0": "Visual Studio 2013", - "11.0": "Visual Studio 2012" + "15.0": "Visual Studio 2017" } }, {