Прежде всего, мой код работает каждый раз, когда я запускаю его, даже если получаю сообщение об ошибке. Мне любопытно узнать, что происходит и как это исправить.У вас возникли проблемы с неразрывной ошибкой
Мой код используется для очистки метаданных из массива ссылок на сайты.
Неразрывная ошибка:
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' –