J'ai un script, qui consiste essentiellement à lire un fichier csv et à rechercher les enregistrements de base de données ms-access associés et à les mettre à jour. Le problème est qu'il devient plus lent après 100-150 enregistrements. Quelqu'un peut-il avoir une opinion à ce sujet? Mais s'il vous plaît considérez que les premiers enregistrements sont implémentés rapidement, c'est pourquoi son étrange problème pour moi. D'ailleurs, le script s'exécute sur un ordinateur local, pas sur un serveur.Accélération du script PowerShell avec la base de données Access
$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
Vous ouvrez rs une fois, puis faites votre lecture et la boucle, enfin fermer rs. – Gustav