データベース (MS SQL 2008) からコンピューター情報の行を読み取り、それをリーダーに格納する powershell があります。
# Open the database connection
$conn.Open()
# Create and execute the SQL Query
$cmd = New-Object System.Data.SqlClient.SqlCommand($sql,$conn)
$rdr = $cmd.ExecuteReader()
# Read Computer Information into multidimensional array
$count=0
while ($rdr.read()){
$sql_output += ,@($rdr.GetValue(0), $rdr.GetValue(1), $rdr.GetValue(2),
$rdr.GetValue(3))
$count=$count + 1
}
# Close the database connection
$conn.Close()
Write-host Finished reading $count IP addresses from database
約 50% の確率で例外が発生します
"0" 個の引数を指定して "Read" を呼び出す例外: "トランザクション (プロセス ID 107) は別のプロセスのロック リソースでデッドロックされ、デッドロックの犠牲者として選択されました。トランザクションを再実行してください。" C:\script.ps1:83 char:17 + while ($rdr.read <<<< ()){ + CategoryInfo : NotSpecified: (:) []、MethodInvocationException + FullyQualifiedErrorId : DotNetMethodException
データベースには約 18,000 台のコンピューターがあります。この例外がスローされると、おそらく 10,000 しか読み取れず、時々異なります。
例外を処理して 18,000 台のコンピューターすべてを読み取るにはどうすればよいですか?