filter/if-statement 管道工作不正常?

filter/if-statement not properly working from the pipe?

我正在将一段 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
} | ...

我读到了有关制作过滤器的信息,所以我也尝试使用这段代码并将代码通过管道传输到过滤器名称中 'sortby':

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

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

有没有一种方法可以成功地对管道进行条件排序而不出错?还是我弄错了?

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

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

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

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