gpt4 book ai didi

loops - Powershell foreach循环在第三次执行时未退出

转载 作者:行者123 更新时间:2023-12-03 00:12:45 24 4
gpt4 key购买 nike

我有一个Powershell脚本,该脚本循环遍历URL的SQL表并收集网页标签中的所有其他URL。

当SQL表中只有几个URL时,它似乎运行良好,但是在几次运行并且表已增长(但仅增长到约250+行)之后,foreach循环似乎停止工作,之后它挂了,我不知道为什么。 Activity 只是停止而foreach循环永不退出。

$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server=localhost\SQLEXPRESS;Database=PowerScrape;trusted_connection=true;"
$SqlConnection.Open()
$SqlCommand = New-Object System.Data.SQLClient.SQLCommand
$SqlCommand.Connection = $SqlConnection

$SqlSelectStatement = ("SELECT URL as url FROM dbo.CapturedURL WHERE NOT LEFT(Url,7) ='mailto:'")
$SqlCommand.CommandText = $SqlSelectStatement
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCommand
$SqlCommand.Connection = $SqlConnection
$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($Dataset)

ForEach ($Row in $Dataset.Tables[0].Rows)
{

$Request = Invoke-WebRequest -Uri $Row[0]
$UrlArray = $Request.Links | Select-Object -ExpandProperty href
$UrlAuthority = $Request.BaseResponse | Select-Object -ExpandProperty ResponseUri | Select-Object -ExpandProperty Authority

ForEach ($Url in $UrlArray)
{
If ($Url -like "/*")
{
$ScrapedUrl = $UrlAuthority+$Url
}

Else
{
$ScrapedUrl = $Url
}

If ($ScrapedUrl -notlike "#*"-and $ScrapedUrl -ne '' -and $ScrapedUrl -ne $null)
{
$SqlInsertStatement = "
BEGIN
IF NOT EXISTS (SELECT * FROM CapturedUrl WHERE URL = '"+$ScrapedUrl+"')
BEGIN
INSERT CapturedURL (URL) VALUES ('"+$ScrapedUrl+"')
END
END;"

$SqlCommand = $SqlConnection.CreateCommand()
$SqlCommand.CommandText = $SqlInsertStatement
$SqlCommand.ExecuteNonQuery()
}
}
}

当我在表格中插入一行时,例如 http://rouge.jneen.net(不是我的网站,只是我喜欢的一个,只有几个链接可以开始),还插入了六个URL。然后,当我再次运行它时,它将转到表中的所有URL并插入279个URL。很好,但是当我第三次运行它时,它在Uri https://github.com/edwardloveall/portfolio上调用Invoke-WebRequest后挂起,并且没有执行任何其他操作。

有人可以向我指出如何进行调试或出现问题的方向。

最佳答案

试试这个,

$Request = Invoke-WebRequest -Uri $Row[0] -TimeoutSec 30

我有一个类似的问题,罪魁祸首是调用,它一直等到调用发生。所以给调用一个超时,以跳过一些消耗您时间的调用。

另外,我建议您尝试使用工作流,并使用 For eac Parallel进行此操作以加快执行速度。

关于loops - Powershell foreach循环在第三次执行时未退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44677562/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com