powershell - 可以使用自定义 属性 按从所有元素中提取的字符串排序吗?

powershell - possible to sort by string extracted from alllelements using custom property?

我认为这将是一个非常简单的任务 - 一个 returns webrequest 元素并按自定义 属性 对它们进行排序的程序,在这种情况下,它是一个子字符串 "extracted"来自 $_.innertext。 (具体来说,我想对 "deals" 的列表进行排序,这些列表按 $-amount 以各种方式描述。)

但即使是对 $_.innertext 的简单字符串操作似乎也不起作用,总是会产生此类错误。

Sort-Object : You cannot call a method on a null-valued expression.

这是我正在使用的代码 - 我将不胜感激任何指导,无论是指出代码问题还是建议替代方法。

# function to scrub text from a Class filtering on keyword, sort by $*
function Get-Deals {
    param($keyword)

    $url = "https://slickdeals.net/newsearch.php?q=$keyword"
    $result = Invoke-WebRequest $url
    $result.AllElements |
        Where Class -eq "dealTitle" | 
        Where {($_.innertext -match ($keyword)) -and ($_.innertext -match ("$"))} | 
        Sort-Object @{Expression={$_.inntertext.substring($_.innertext.IndexOf('$'))}} |
        Select -ExpandProperty innerText
        }

Get-Deals("TV")

这是我最初询问的问题的(部分)解决方案。下面的代码 - 注意这两个变化:

  1. $_.innertext 在排序语句中用引号括起来
  2. 对 Where 标准进行了一些更改,以确保我进行了充分的过滤,以确保所有元素中都有一个“$”(以前我遗漏了一些情况)。

这就是为什么我说这只是一个“(部分)”解决方案:现在我的排序工作正常,但我是基于字符串而不是数字进行排序。所以 1999.99 美元之后是 9.99 美元。

但这与我最初询问的问题完全不同。

function Get-Deals {
param($keyword)
$url = "https://slickdeals.net/newsearch.php?q=$keyword"
$result = Invoke-WebRequest $url
$result.AllElements |
    Where Class -eq "dealTitle" | 
    Where {( ($_.innertext -match ($keyword)) -and ($_.innertext -like '*$*') )} |
    #Where {$_.innertext -like '*$*'} | 
    Sort-Object @{Expression={"$_.innertext".substring("$_.innertext".IndexOf('$'))}} |
    Select -ExpandProperty innerText
    }
Get-Deals("TV")