【发布时间】:2020-02-20 13:50:52
【问题描述】:
我希望根据 $debug 的布尔值将文件和文件夹属性发送到 csv 文件或屏幕。我试图通过在以下管道的末尾包含一个三元运算符来实现这一点:
Get-ChildItem $directory -Recurse -File |
Select-Object @{name='Folder_Name';expression={$($_.directoryname)}},
@{name='File_type';expression={$($_.extension)}},
@{name='File_name';expression={$($_.name)}},
@{name='File_size_bytes';expression={$($_.length)}},
@{name='Creation_datetime';expression={$($_.creationtime)}},
@{name='Last_update_datetime';expression={$($_.lastwritetime)}},
@{name='Last_read_datetime';expression={$($_.lastaccesstime)}} |
(&{if ($debug) {Write-Host} else {Export-Csv -path $outpath -NoTypeInformation -force -Delimiter ';'}})
这是一种不好的方法,推荐哪种方法?
【问题讨论】:
-
使用
Write-Host直接将内容发送到屏幕,而不是“stdout”。那将使用Write-Output。此外,除了换行符之外,您不会向屏幕发送任何内容。 ///// 最重要的是,Expressions are only allowed as the first element of a pipeline.所以你的最后一行意味着代码永远不会运行。 -
是否有理由不简单地保存到 $Var 然后决定将输出发送到哪里?
-
谢谢! [grin] 一种想法是将它放入一个接受顶部目录作为参数的函数中,添加您需要的任何其他参数,将所有信息收集到一个 $Var 中,然后发送该 $Var给来电者。让调用者决定如何使用该信息。这是“工具与控制器”的想法。
-
另一个想法是将管道的输出保存到 $Var。然后根据需要使用它。
-
第二个更简单,第一个更灵活。如果您已经编写了高级功能并且对它们感到满意,那么第一个就是要走的路。我可能会从第二个开始,寿。 [咧嘴]
标签: powershell pipe pipeline ternary-operator