PowerShell将变量列与其他变量合并

时间:2015-08-03 00:45:16

标签: powershell powershell-v3.0

我有以下PowerShell脚本:

$Top40 = @()
$Top40Response = Invoke-WebRequest -Uri 'https://www.radioinfo.com.au/knowledge/chart'

$Top40Entries = $Top40Response.ParsedHtml.getElementsByTagName("tr") | Where-Object {$_.className -eq 'layoutTr'}

$Top40 = $Properties = @{
        position = ($Top40Entries.getElementsByTagName("td") | Where-Object {$_.className -eq 'twRank'}).innerText
        artist = ($Top40Entries.getElementsByTagName("td") | Where-Object {$_.className -eq 'artist'}).innerText
        title = ($Top40Entries.getElementsByTagName("td") | Where-Object {$_.className -eq 'title'}).innerText
    }

New-Object -TypeName psobject -Property $Properties

$Top40

运行此脚本然后在最后运行 $ Top40 时,会列出我需要的结果,但是它会将结果分组到每个属性的同一行像这样http://screencast.com/t/rge78fYwL6V。因此,我不想在三个属性中的每个属性的同一行上列出结果,而是希望将结果列在另一个之下,例如3个包含结果的漂亮列。我错过了什么。

1 个答案:

答案 0 :(得分:1)

问题是你没有将结果分解为个人。这里有一个循环应该解决这个问题。我不擅长HTML解析(因此可能会有其他改进),但从我所看到的艺术家们都按顺序进行了解析,所以让我们有这个功能。

WebDriverWaits._SeleniumRealWaitByInputType(driver, "submit");

该代码将产生40位艺术家和40位作品。使用简单的计数器数组$Top40 = @() $Top40Response = Invoke-WebRequest -Uri 'https://www.radioinfo.com.au/knowledge/chart' $Top40Entries = ($Top40Response.ParsedHtml.getElementsByTagName("tr") | Where-Object {$_.className -eq 'layoutTr'}).getElementsByTagName("td") $artists = ($Top40Entries| Where-Object {$_.className -eq 'artist'}).innerText $titles = ($Top40Entries| Where-Object {$_.className -eq 'title'}).innerText $Top40 = 0..39 | ForEach-Object{ [pscustomobject][ordered]@{ Position = $_ + 1 Artist = $artists[$_] Title = $titles[$_] } } ,我们构建了40个对象以获得所需的输出。

由于您使用的是3.0,我们可以使用强制转换0..39而不是担心New-Object语法,我们只使用管道来填充[pscustomobject][ordered]。数组基于0,因此我们通过将$top40增加一来来解释这一点。

如果我们查看前3次点击,这是我们现在获得的样本

Position