我将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
}
}
这没有错误,但输出实际上是空白的。
有没有办法可以成功地在管道中实现条件排序而不会出错?或者我犯了错误?
答案 0 :(得分:3)
您不能在管道中使用条件语句。
翻转逻辑并将参数存储在可用于splatting的哈希表中:
$sortArgs = @{
Property = if($sort -eq 1){{ $_.Character }} else {{ $_.Value -as [double]}}
Descending = $sort -ne 1
}
... | Sort-Object @sortArgs |...