私は、SQLのSQLテーブルをループし、Webページ上のタグのそれ以上のURLを収集するpowershellスクリプトを持っています。powershell foreachループが3回目の実行で終了しない
SQLテーブルにわずかなURLしかないのに、foreachループがいくつかの実行後に機能しなくなったようだが、テーブルが大きくなった(ただし約250+行まで)場合はうまくいくように思えますちょうどハングアップし、なぜ私は理解できません。アクティビティは単に停止し、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(ない私のウェブサイト、私はオフを開始するだけでいくつかのリンクで好きなだけ1)、さらに6つのURLが挿入されているため、私のテーブルに1行を挿入する場合。それから私は再びそれを実行すると、テーブルのすべてのURLに行き、279のURLを挿入します。これは問題ありませんが、3回目に実行するとUri https://github.com/edwardloveall/portfolioのInvoke-WebRequestを呼び出した後にハングアップし、何もしません。
誰かがこれをデバッグする方法や私が間違っているところを指し示してくれますか?
ISEでスクリプトをデバッグしようとしましたか?それは少なくともあなたに指示を与えるべきです。ハングするコマンドのVerboseスイッチを使用すると、それ以降のことが分かります。 – bluuf
ええ、私はそれを繰り返したが、何のエラーも投げなかったが、まだ終了しなかった。デバッグせずに実行すると失敗したURLに来たときには、ステップイン、アウト、またはアウトさせることはできません。 – boomcubist