最初にエラーが返されても、実行するたびにコードが機能しているようです。何が起こっているのか、それをどう修正するのかが不思議です。破損していないエラーで問題が発生しました
マイコードを使用して、ウェブサイトリンクの配列からメタデータをスクレイプします。
非破壊エラー:
Cannot index into a null array.
At C:\test\websiteScrape.ps1:127 char:5
+ $List += [pscustomobject]@{
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : NullArray
コード:
$web = New-Object Net.WebClient
$web | Get-Member
function getMetaData($Array){
$fullArray = @()
foreach ($element in $Array){
$metaString = $web.DownloadString($element)
$metaArray = $metaString| Select-String -AllMatches '(meta name=".*?".+")|(a lang="fr" href=".*?")' | % { $_.Matches } | % { $_.Value }
select -expa matches | select -expa value
$fullArray += ,($element,$metaArray)
}
return $fullArray
}
#$Array is a System.Array and it holds a bunch of strings"links" to a website.
$metaData = getMetaData $Array
$List = @()
for ($i=0; $i -le $metaData.length; $i++){
$List += [pscustomobject]@{
PageName = $metaData[$i][0]
Description = [regex]::Replace($metaData[$i][1][1], 'meta name=".*?" content="(.*?)"', '$1');
Creator = [regex]::Replace($metaData[$i][1][2], 'meta name=".*?" content="(.*?)"', '$1');
Instituation = [regex]::Replace($metaData[$i][1][3], 'meta name=".*?" content="(.*?)"', '$1');
Languague = [regex]::Replace($metaData[$i][1][4], 'meta name=".*?" content="(.*?)"', '$1');
Subject =[regex]::Replace($metaData[$i][1][5], 'meta name=".*?" content="(.*?)"', '$1');
Indentifier= [regex]::Replace($metaData[$i][1][6], 'meta name=".*?" content="(.*?)"', '$1');
}
}
List| Select-Object -Property PageName, Description| Export-Csv -path C:\Desktop\urlsAndMetaData.csv -NoTypeInformation
は、私はちょうどこれを追加しました '$ web'は次 –
@MartinBrandl、感謝の定義を欠場します。 – ImTrying
にも '$ List'の宣言がありません –