Powershell:Export-CSV 和 OutFile 没有按照我的预期进行

Powershell: Export-CSV and OutFile not doing what I expect

为什么我在这里得到一个空白文件?当我在 export-csv 之前 运行 它时,我得到了大量的记录,所有记录都显示在控制台中。

这是我使用的代码

$path = "C:\test"

Get-ChildItem -Path $path -Include *.edi, *.x12, *.filename, *.dat, *.log, *.mdn, *.req -Recurse -Force |
Where-Object {!$_.PSIsContainer -and ((get-date)-$_.LastWriteTime).days -gt 30 } |
Remove-Item -force -whatif | export-csv D:\output.csv #also I try out-file D:\output.txt 

公共参数-WhatIf - 用于预览命令的动作 - 从不输出数据;相反,预览信息会直接打印到控制台,这意味着它既不能通过管道发送,也不能重定向到文件,也不能捕获

顺便说一句:Remove-Item without -WhatIf 也永远不会产生数据输出,所以通常没有必要尝试在后续管道段中处理其输出。

您最好的选择是 向您的 Where-Object 调用 添加一个 -OutVariable (-ov) 通用参数,这样您就可以导出在 单独的 命令中通过 Export-Csv 收集的 file-info 对象:

Get-ChildItem ... | Where-Object -OutVariable filesToRemove { ... } | 
  Remove-Item -WhatIf ...
$filesToRemove | Export-Csv D:\output.csv

上面仍然将预览信息打印到控制台,而且还收集了 Where-Object 选择的 [System.IO.FileInfo] 对象到变量 $filesToRemove 中,然后您可以将其导出为 CSV 格式。