Я использую следующую задачу в конвейере Azure DevOps на vmImage: ubuntu-latest
:
- pwsh: Get-ChildItem *.* -Recurse -Path $(Pipeline.Workspace)
displayName: 'Show folder contents for debugging'
Я делаю это, чтобы dir
получить список файлов, загруженных на предыдущем этапе артефакта download
конвейера. Я также пробовал обычный powershell
вместо Powershell Core.
имена папок отображаются правильно, и записи для файлов, по-видимому, отображаются, но имена файлов вообще не включены. Вот часть вывода, которую я вижу:
/usr/bin/pwsh -NoLogo -NoProfile -NonInteractive -Command . '/home/vsts/work/_temp/1f22f03a-d1c6-4983-a08e-39ed349876be.ps1'
Directory: /home/vsts/work/1
UnixMode User Group LastWriteTime Size
-------- ---- ----- ------------- ----
drwxr-xr-x vsts docker 04/03/2022 16:22 4096
drwxr-xr-x vsts docker 04/03/2022 16:22 4096
drwxr-xr-x vsts docker 04/03/2022 16:22 4096
drwxr-xr-x vsts docker 04/03/2022 16:22 4096
drwxr-xr-x vsts docker 04/03/2022 16:22 4096
Directory: /home/vsts/work/1/s
UnixMode User Group LastWriteTime Size
-------- ---- ----- ------------- ----
drwxr-xr-x vsts docker 04/03/2022 16:22 4096
-rw-r--r-- vsts docker 04/03/2022 16:22 3507
-rw-r--r-- vsts docker 04/03/2022 16:22 2370
-rw-r--r-- vsts docker 04/03/2022 16:22 1636
-rw-r--r-- vsts docker 04/03/2022 16:22 1056
-rw-r--r-- vsts docker 04/03/2022 16:22 913980
et cetera
Directory: /home/vsts/work/1/s/src
UnixMode User Group LastWriteTime Size
-------- ---- ----- ------------- ----
drwxr-xr-x vsts docker 04/03/2022 16:22 4096
drwxr-xr-x vsts docker 04/03/2022 16:22 4096
drwxr-xr-x vsts docker 04/03/2022 16:22 4096
et cetera
Почему он не показывает имена файлов? Как я могу убедиться, что это так?
Похоже, что эффективная ширина консоли составляет 80
символов (что отражено в [Console]::WindowWidth
, и в этом случае столбец Name
не подходит и просто удаляется.
В идеале Azure позволит вам указать большую ширину окна консоли (я не знаю, есть ли такая возможность — сообщите нам, если знаете),[1], но обходной путь должен передаваться в Out-String
и использовать его параметр -Width
; например.:
- pwsh: Get-ChildItem *.* -Recurse -Path $(Pipeline.Workspace) | Out-String -Width 160
displayName: 'Show folder contents for debugging'
Примечание:
Как следует из названия командлета, он преобразует выходные объекты Get-ChildItem
в струны, поэтому он подходит только для захвата представлений для отображения.
Как вы заметили, если вам не нужны столбцы все, более простое решение, которое дополнительно позволяет избежать строкового преобразования, заключается в передаче Select-Object
; например.:
- pwsh: Get-ChildItem *.* -Recurse -Path $(Pipeline.Workspace) | Select-Object UnixMode, Length, Name
displayName: 'Show folder contents for debugging'
[1] Unfortunately, setting the dimensions of the [Console]
class - e.g. [Console]::WindowWidth = 160
is not supported on Unix-like platforms.
Рад это слышать, @Jeroen. Хорошо, что Select-Object
предлагает более простое решение, если нужны не все столбцы - я соответствующим образом обновил ответ. Да, параметр размер [Console]
(к которому все сводится), к сожалению, не поддерживается на Unix-подобных платформах.
Я попытался это решение изменить
BufferSize
наGet-Host
, но Azure сообщает «настройка BufferSize: операция не поддерживается на этой платформе.».