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

Jer*_*oen 11 powershell azure azure-devops powershell-core

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

- pwsh: Get-ChildItem *.* -Recurse -Path $(Pipeline.Workspace)
  displayName: 'Show folder contents for debugging'
Run Code Online (Sandbox Code Playgroud)

我这样做是为了列出在先前的管道工件步骤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
Run Code Online (Sandbox Code Playgroud)

为什么不显示文件名?我怎样才能确保它确实如此?

mkl*_*nt0 10

看起来有效的控制台宽度是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'
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 正如 cmdlet 的名称所暗示的,它将Get-ChildItem的输出对象转换为strings,因此这仅适合捕获用于显示的表示形式。

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

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

[1] 不幸的是,类 Unix 平台不支持设置维度[Console]- 例如。[Console]::WindowWidth = 160