是否可以在管道中使用三元运算符?

时间:2019-10-24 08:53:04

标签: powershell pipe pipeline ternary-operator

我希望根据$ 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 ';'}})

这是一个不好的方法,推荐哪种方法?

1 个答案:

答案 0 :(得分:1)

这将完成您想要的操作。但是,这是处理问题的一种非常奇怪的方法。它很慢,因为它会为每个项目写入文件,或者为每个项目都进行屏幕写入(如果启用)。保存到$ Var,然后写入文件和/或屏幕将 快得多 。 [咧嘴]

此代码将您的最后一行扩展为使用ForEach-Object进行的if调用,以测试输出目标。它还向-ErrorAction调用中添加了Get-ChildItem,以处理“无法访问的文件”错误。

它还删除了$()行中不需要的expression =

$directory = $env:TEMP
$outpath = "$env:TEMP\GustavRasmussen.csv"

# uncomment the 2nd line to test the negative
$ToScreen = $True
#$ToScreen = $False

Get-ChildItem $directory -Recurse -File -ErrorAction SilentlyContinue |
    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}} |
    ForEach-Object {
        if ($ToScreen)
            {
            $_
            }
            else
            {
            Export-Csv -InputObject $_ -path $outpath -NoTypeInformation -force -Delimiter ';' -Append
            }
        }

CSV的前三行...

"Folder_Name";"File_type";"File_name";"File_size_bytes";"Creation_datetime";"Last_update_datetime";"Last_read_datetime"
"C:\Temp";".tmp";"DELCD3A.tmp";"861968";"2019-07-13 11:43:18 PM";"2019-07-13 11:42:36 PM";"2019-07-13 11:43:18 PM"
"C:\Temp";".txt";"FXSAPIDebugLogFile.txt";"0";"2015-11-03 6:54:02 PM";"2015-11-03 6:54:02 PM";"2015-11-03 6:54:02 PM"
"C:\Temp";".log";"Genre-List_2019-10-01.log";"178";"2019-10-01 12:33:47 PM";"2019-10-01 12:33:47 PM";"2019-10-01 12:33:47 PM"

屏幕输出的前三项...

Folder_Name          : C:\Temp
File_type            : .tmp
File_name            : DELCD3A.tmp
File_size_bytes      : 861968
Creation_datetime    : 2019-07-13 11:43:18 PM
Last_update_datetime : 2019-07-13 11:42:36 PM
Last_read_datetime   : 2019-07-13 11:43:18 PM

Folder_Name          : C:\Temp
File_type            : .txt
File_name            : FXSAPIDebugLogFile.txt
File_size_bytes      : 0
Creation_datetime    : 2015-11-03 6:54:02 PM
Last_update_datetime : 2015-11-03 6:54:02 PM
Last_read_datetime   : 2015-11-03 6:54:02 PM

Folder_Name          : C:\Temp
File_type            : .log
File_name            : Genre-List_2019-10-01.log
File_size_bytes      : 178
Creation_datetime    : 2019-10-01 12:33:47 PM
Last_update_datetime : 2019-10-01 12:33:47 PM
Last_read_datetime   : 2019-10-01 12:33:47 PM