Azure Devops Powershell 不显示 Get-ChildItem 的文件名

Azure Devops Powershell not showing file names for Get-ChildItem

我在 vmImage: ubuntu-latest 上的 Azure DevOps 管道中使用以下任务:

- 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 将允许您指定更大的 console-window 宽度(我不知道这是否是一个选项 - 如果您知道请告诉我们),[1] 解决方法 是通过管道传输到 Out-String 并使用其 -Width 参数;例如:

- pwsh: Get-ChildItem *.* -Recurse -Path $(Pipeline.Workspace) | Out-String -Width 160
  displayName: 'Show folder contents for debugging'

注:

  • 顾名思义,它将Get-ChildItem的输出对象转换为字符串,因此这只适用于捕获for-display 表示.

  • 正如您所注意到的,如果您不需要 all 列,一个更简单的解决方案——另外避免字符串化——是通过管道传输到 Select-Object;例如:

- pwsh: Get-ChildItem *.* -Recurse -Path $(Pipeline.Workspace) | Select-Object UnixMode, Length, Name
  displayName: 'Show folder contents for debugging'

[1] 不幸的是,设置 [Console] class 的尺寸 - 例如[Console]::WindowWidth = 160 在 Unix-like 平台上 不受 支持。