为什么所有Powershell输出都未写入txt文件

为什么所有Powershell输出都未写入txt文件,powershell,Powershell,我在Powershell Core中运行以下Powershell脚本: PS C:\> Get-ChildItem -Recurse -File -Filter *.pbix | Sort-Object -Property LastAccessTime | Select-object -Property Name, FullName, LastAccessTime, LastWriteTime -Last 10 >> files.txt 打开files.txt文件La

我在Powershell Core中运行以下Powershell脚本:

 PS C:\> Get-ChildItem -Recurse -File -Filter *.pbix | 
Sort-Object -Property LastAccessTime | 
Select-object -Property Name, FullName, LastAccessTime, LastWriteTime -Last 10 
>> files.txt
打开files.txt文件LastAccessTime和LastWriteTime没有列-为什么会这样?如何修改脚本以将它们包含在文本文件中?

两个旁白:

  • >
    输出文件-Append的(虚拟)别名;如果目的不是附加(到预先存在的文件),而是仅捕获当前命令的(整个)输出,则只使用
    /
    输出文件
    ,而不使用
    -append

  • 输出文件
    /
    >
    捕获文件中输入对象的显示表示,这不适合后续编程处理。对于后者,请使用生成结构化输出的cmdlet,例如

这就是说,如果目标是文件而不是显示器,那么期望
Out File
捕获所有用于显示的数据是合理的

遗憾的是,从PowerShell[Core]v7.0开始,
输出文件
/
/
>>
对控制台(终端)窗口的宽度(仍然)敏感,只能捕获屏幕上当前适合的内容

您可以使用
-Width
参数来解决以下问题:

Get-ChildItem -Recurse -File -Filter *.pbix |
  Sort-Object -Property LastAccessTime |
    Select-object -Property Name, FullName, LastAccessTime, LastWriteTime -Last 10 |
      Out-File -Width ([int]::MaxValue-1) files.txt # Add -Append, if needed.

注意:从v7.0开始,
[int]::MaxValue-1
似乎是可接受的最高值<代码>[int]::MaxValue
被悄悄忽略。另外,请确保不要在Windows PowerShell中使用如此高的值,在Windows PowerShell中,每个输出行都被无条件地正确填充到该长度,这将导致文件过大。

我建议对结构化数据使用CSV文件,而不是纯文本。查看cmdlet
导出Csv
输出文件
仅限于屏幕上的空间量,如果屏幕不适合,它将不会显示所有数据,尝试将输出存储到一个变量,如
$test=Get ChildItem-Recurse-File-Filter*.pbix | Sort Object-Property LastAccessTime |选择Object-Property Name、FullName、LastAccessTime、LastWriteTime-Last 10
,然后您可以使用
$test.LastWriteTime
访问任何数据。