Powershell:导出CSV和输出文件没有达到我的预期

Powershell:导出CSV和输出文件没有达到我的预期,powershell,output,export-csv,Powershell,Output,Export Csv,为什么我这里有一个空白文件?当我在导出csv之前运行它时,我得到大量的记录,所有记录都显示在控制台中 这是我使用的代码 $path = "C:\test" Get-ChildItem -Path $path -Include *.edi, *.x12, *.filename, *.dat, *.log, *.mdn, *.req -Recurse -Force | Where-Object {!$_.PSIsContainer -and ((get-date)-$_.LastWriteTim

为什么我这里有一个空白文件?当我在导出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
而不使用
-WhatIf
也不会产生数据输出,因此通常没有必要在后续的管道段中处理其输出

最好的方法是
-OutVariable
-ov
)公共参数添加到
Where Object
调用中,这样您就可以在单独的命令中通过
导出Csv
导出收集的文件信息对象:


上面的命令仍然会将预览信息打印到控制台,但也会收集变量
$filesToRemove
Where Object
选择的
[System.IO.FileInfo]
对象,然后可以以CSV格式导出。

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

顺便说一下:
Remove Item
而不使用
-WhatIf
也不会产生数据输出,因此通常没有必要在后续的管道段中处理其输出

最好的方法是
-OutVariable
-ov
)公共参数添加到
Where Object
调用中,这样您就可以在单独的命令中通过
导出Csv
导出收集的文件信息对象:


上面的命令仍然会将预览信息打印到控制台,但也会收集变量
$filesToRemove
Where Object
选择的
[System.IO.FileInfo]
对象,您可以将其导出为CSV格式。

非常肯定-Whatif会生成详细的输出,这样在管道中就不会有任何对象可以传递到导出CSV。@EBGreen:Whatif
-Whatif
一般来说很好,但看起来信息是直接打印到控制台的,而不是详细的输出流(编号
4
)@mklement0您的假设是正确的(这是一个
[string]
对象输出到
1
流)@theincorgible1:在PowerShell的上下文中,
1
是成功(数据)输出流,但这不是
-据我所知,如果
输出是什么,您无法从PowerShell中捕获/重定向所有内容。(你可以从外面,比如从
cmd.exe
调用时)。@mklement0-Hmm,我很快就跳到了这里。在parens中包装命令并访问其类型报告字符串,但现在尝试使用重定向或其他cmdlet无法捕获该输出。它甚至不像PSv5Pretty中的写入主机那样使用
5
(信息)
,当然-Whatif会生成详细的输出,这样在管道中就不会有任何对象可以传递到导出csv。@EBGreen:,不适用于详细的输出流(数字
4
)。@mklement0您的假设是正确的(它是
[string]
对象输出到
1
流)@TheIncorrigible1:在PowerShell的上下文中,
1
是成功(数据)输出流,但这不是
-WhatIf
输出的地方-据我所知,您无法从PowerShell中捕获/重定向所有内容。(你可以从外面,比如从
cmd.exe
调用时)。@mklement0-Hmm,我很快就跳到了这里。在parens中包装命令并访问其类型报告字符串,但现在尝试使用重定向或其他cmdlet无法捕获该输出。它甚至不像PSv5中的写入主机那样使用
5
(信息)
Get-ChildItem ... | Where-Object -OutVariable filesToRemove { ... } | 
  Remove-Item -WhatIf ...
$filesToRemove | Export-Csv D:\output.csv