Powershell:导出CSV和输出文件没有达到我的预期
为什么我这里有一个空白文件?当我在导出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
$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