0
私は基本的にcsvファイルを読み込み、関連するms-accessデータベースレコードを検索して更新するスクリプトを用意しています。問題は、100-150レコード後には遅くなります。誰かがそれについて意見を持つことができます。しかし、最初のレコードが速く実装されていると考えてください、それはなぜ私のためのその奇妙な問題です。ところで、スクリプトはサーバー上ではなくローカルPC上で動作します。Accessデータベースを使用したPowerShellスクリプトの高速化
$adOpenStatic = 3
$adLockOptimistic = 3
$cn = new-object -comobject ADODB.Connection
$rs = new-object -comobject ADODB.Recordset
$cn.Open("Provider = Microsoft.ACE.OLEDB.12.0;Data Source = $path")
Write-Host "database connection established"
$data = Import-Csv $csvfile
$data =$data | Where-Object{$_.b}
$itemNo=0
$dp=1
$fp=1
$total=0
$Verkaufsbeleg=0
$Verkaufsbelegposition=0
foreach ($element in $data) {
if($itemNo -ne $element.d + $element.f -and $element.d){
$itemNo=$element.d + $element.f
$Verkaufsbeleg=$element.d
$Verkaufsbelegposition=$element.f
$param1= [convert]::ToInt32($Verkaufsbeleg, 10)
$param2=[convert]::ToInt32($Verkaufsbelegposition, 10)
write-host $param1
write-host $param2
$dp=0
$fp=0
$position=99
}
if($element.k -eq $something){
$dp++
}elseif($element.k -eq $something){
$fp++
}
$rs.Open("Select * From Projects where ([Column1]='"+$param1+"' and [Column2]="+$param2+")", $cn,$adOpenStatic,$adLockOptimistic)
While ($rs.EOF -ne $True) {
$value=$element.i
if($element.k -eq $something){
$rs.Fields.Item("DP")=$value
$total++
}
if($element.k -eq $something){
$rs.Fields.Item("FP")=$value
$total++
}
write-host "Index" $rs.AbsolutePosition
$rs.MoveNext()
}
$rs.Close()
$rs= new-object -comobject ADODB.Recordset
}
$cn.Close()
Write-Host "Total Items Updated" $total
あなたはrsを一度開いてから、読んでループして、最後にrsを閉じます。 – Gustav