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")
这是我最初询问的问题的(部分)解决方案。下面的代码 - 注意这两个变化:
- $_.innertext 在排序语句中用引号括起来
- 对 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")
我认为这将是一个非常简单的任务 - 一个 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")
这是我最初询问的问题的(部分)解决方案。下面的代码 - 注意这两个变化:
- $_.innertext 在排序语句中用引号括起来
- 对 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")