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