过滤器/ if语句没有正确地从管道工作?

时间:2017-09-06 12:58:49

标签: powershell if-statement conditional

我将Select-String | Select-Object段代码汇总到sort,输出两列。我有两个文件设置了两个不同的排序但是想尝试使用基于Read-Host的条件将它们组合到一个文件,询问用户他们想要使用哪种排序(1或2)。

我首先在管道中尝试了if语句。据我所知,我实际上不能在管道内做if。以下是声明。 $sort由键入' 1'的用户设置。第一种,第二种,其他任何东西。它会产生一个关于无法识别if的错误。

... | if ($sort -eq 1) {
    Sort-Object { $_.'Character' }
} else {
    Sort-Object { [double]$_.'Value' } –Descending
} | ...

我读过关于制作过滤器的内容,所以我也尝试使用这段代码并将代码传输到过滤器名称中,然后排序':

filter sortby {
    if ($sort -eq 1) {
        Sort-Object { $_.'Character' }
    } else {
        Sort-Object { [double]$_.'Value' } –Descending
    }
}

这没有错误,但输出实际上是空白的。

有没有办法可以成功地在管道中实现条件排序而不会出错?或者我犯了错误?

1 个答案:

答案 0 :(得分:3)

您不能在管道中使用条件语句。

翻转逻辑并将参数存储在可用于splatting的哈希表中:

$sortArgs = @{
    Property = if($sort -eq 1){{ $_.Character }} else {{ $_.Value -as [double]}}
    Descending = $sort -ne 1
}

... | Sort-Object @sortArgs |...