Ich habe einen sehr einfachen Code erstellt, um meinen XML-Export an eine SQL Server-Datenbank zu übergeben. Alles funktioniert und die Daten erscheinen in der Tabelle wie es sollte.PowerShell XML zu SQL Server
Jedoch, wenn ich mit einem einzelnen Datensatz aus der Liste (etwa 120k von ihnen) getestet und es hat mich um 20sec. Es muss ein besserer Weg sein, um Informationen weiterzugeben. Ich habe den Code unten für Leute angebracht, die wissen, wie es geht. Ich denke, mein Code ist sehr einfach und funktioniert mit den Prinzipien und nicht notwendig, den richtigen Weg.
Da ich eine XML jeden Tag produzieren, ist es wirklich wichtig, dass ich dieses Verfahren bis zu beschleunigen. Wie ich es noch nie zuvor getan habe und gerne irgendwelche Kommentare/Links erfahren möchte sind sehr willkommen. Danke für die Zeit im Voraus.
$sqlserver="test"
$db="test"
$table="dbo.test"
$conn = New-Object System.Data.SqlClient.SqlConnection
$conn.ConnectionString = "Server=$sqlserver; Database=$db; Integrated Security = True;"
$conn.Open()
$cmd=$conn.CreateCommand()
[xml]$xmllog="<logroot>$(get-content("I:\somefile.xml"))</logroot>"
$idevent=$xmllog.logroot.Event.system.eventid[0]
$levelcode=$xmllog.logroot.Event.system.level[0]
$times=$xmllog.logroot.Event.system.timecreated.systemtime[0]
$computers=$xmllog.logroot.Event.system.computer[0]
$subUser=$xmllog.logroot.Event.selectsinglenode("//*[@Name='SubjectUserName']")[0].'#text'
$subdomain=$xmllog.logroot.Event.selectsinglenode("//*[@Name='SubjectDomainName']")[0].'#text'
$targUser=$xmllog.logroot.Event.selectsinglenode("//*[@Name='TargetUserName']")[0].'#text'
$targetDom=$xmllog.logroot.Event.selectsinglenode("//*[@Name='TargetDomainName']")[0].'#text'
$logontypes=$xmllog.logroot.Event.selectsinglenode("//*[@Name='LogonType']")[0].'#text'
$logonproc=$xmllog.logroot.Event.selectsinglenode("//*[@Name='LogonProcessName']")[0].'#text'
$workstation=$xmllog.logroot.Event.selectsinglenode("//*[@Name='WorkstationName']")[0].'#text'
$ipaddress=$xmllog.logroot.Event.selectsinglenode("//*[@Name='IpAddress']")[0].'#text'
$cmd.CommandText="insert dbo.test values (1, '$idevent', '$levelcode', '$times','$computers', '$subUser', '$subdomain','$targUser', '$targetDom', '$logontypes', '$logonproc', '$workstation','$ipaddress')"
$cmd.ExecuteNonQuery()
$conn.Close()
Ist es die 'INSERT', die 20 Sekunden dauert oder die XML-Datei analysiert? Willst du sagen, dass du 120K separate Datensätze in der einzelnen XML-Datei hast? Vielleicht hilft ein XML-Snippet. –
Die Datei lädt dauert 5 Sekunden, die selectsinglenodes sind eacha einige Sekunden die INSERT ist ziemlich schnell –
Können Sie ein Snippet der XML hinzufügen? Es ist möglicherweise möglich, die Menge der XML-Analyse zu reduzieren und die Leistung zu verbessern. –