Powershell Script soll keine Duplikate in der DB erstellen?

Hallo,

ich habe ein Powershell Script welches Daten von API Seiten abfragt und diese in eine Datenbank schreibt. Das funktioniert soweit auch. Leider dupliziert das Script bei jeder Abfrage die Daten in der Datenbank, dabei sollen schon vorhandene Datensätze nicht erneut geschrieben werden sondern nur neue, die auf der abgefragten Seite hinzugekommen sind. Habe verschiedene Lösungswege versucht aber nichts funktionierte. Entweder schrieb das Script trotzdem Duplikate oder es gab andere Fehlermeldungen... Kann mir jemand sagen wie ich das lösen kann?

Das Script:

# Konfiguration der Vote-Server

$voteServer = @(

   @("LINKZURAPI1", "1.Server", 3),

   @("LINKZURAPI2", "2.Server", 3)

)

# MySQL-Datenbank

$MySQLHost = "localhost"

$MySQLPort = "3306"

$MySQLDatabase = "test"

$MySQLUser = ""

$MySQLPassword = ""

# Funktion zum Überprüfen und Erstellen der Tabelle

function Ensure-DatabaseTable {

   param (

       [MySql.Data.MySqlClient.MySqlConnection]$connection

   )

   $tableName = "votings"

   $query = @"

   CREATE TABLE IF NOT EXISTS $tableName (

       id INT PRIMARY KEY AUTO_INCREMENT,

       name VARCHAR(100),

       voteAt DATE,

       server VARCHAR(100),

       site VARCHAR(100),

       received TINYINT(4) DEFAULT 0,

       coins INT DEFAULT 0

   );

"@

   $command = $connection.CreateCommand()

   $command.CommandText = $query

   $command.ExecuteNonQuery() | Out-Null

}

# Verbindung zur Datenbank

try {

   [System.Reflection.Assembly]::LoadFrom("C:\Program Files (x86)\MySQL\MySQL Connector NET 8.2.0\MySQL.Data.dll") | Out-Null

   $constr = "server=$($MySQLHost);port=$($MySQLPort);database=$($MySQLDatabase);user id=$($MySQLUser);password=$($MySQLPassword)"

   $con = New-Object MySql.Data.MySqlclient.MySqlConnection($constr)

   $maxAttempts = 5

   $attempts = 0

   while ($attempts -lt $maxAttempts -and $con.State -ne 'Open') {

       try {

           $con.Open()

       } catch {

           Write-Output "Fehler beim Verbinden zur Datenbank: $_"

       }

       $attempts++

       Start-Sleep -Seconds 1

   }

   # Verbindung erfolgreich oder nicht

   if ($con.State -ne 'Open') {

       Write-Output "Verbindung zur Datenbank konnte nicht hergestellt werden."

       Exit

   } else {

       Write-Output "Datenbankverbindung erfolgreich geöffnet."

   }

# Abfrage für die Vote Links

foreach ($server in $voteServer) {

   try {

       Write-Output "Starte Abfrage für Server $($server[1])"

       $r = Invoke-RestMethod -Method Get -Uri $server[0]

       if ($r.GetType().FullName -eq "System.String") {

           Write-Output "Abruf vom Vote-Server fehlgeschlagen (String erhalten)."

           Continue

       }

foreach ($voter in $r.data) {

   $votedatum = $voter.timestamp

   if (![System.DBNull]::Value.Equals($votedatum) -and $votedatum -ne $null -and $votedatum -ne "") {

       try {

           $date = [datetime]::ParseExact($votedatum, 'yyyy-MM-ddTHH:mm:ssZ', $null)

           $cmd = $con.CreateCommand()

           $cmd.CommandText = @"

               INSERT INTO votings (name, voteAt, server, site, received, coins)

               VALUES (@name, @voteAt, @server, @site, @received, @coins)

               ON DUPLICATE KEY UPDATE

                   name = VALUES(name),

                   voteAt = VALUES(voteAt),

                   server = VALUES(server),

                   site = VALUES(site),

                   received = VALUES(received),

                   coins = VALUES(coins)

"@

           $cmd.Parameters.AddWithValue("@name", $voter.Username) | Out-Null

           $cmd.Parameters.AddWithValue("@voteAt", $date.ToString("yyyy-MM-dd")) | Out-Null

           $cmd.Parameters.AddWithValue("@server", $server[1]) | Out-Null

           $cmd.Parameters.AddWithValue("@site", 'deutsche-arkserver') | Out-Null

           $cmd.Parameters.AddWithValue("@received", 0) | Out-Null

           $cmd.Parameters.AddWithValue("@coins", 0) | Out-Null

           $cmd.ExecuteNonQuery() | Out-Null

           Write-Output "Datensatz für $($voter.Username) erfolgreich eingefügt oder aktualisiert."

       } catch {

           Write-Output "Fehler beim Einfügen oder Aktualisieren in die Datenbank: $_"

       }

   }

}

       Write-Output "Abfrage für Server $($server[1]) erfolgreich durchgeführt."

   } catch {

       Write-Output "Fehler bei Server $($server[1]): $_"

       Write-Output $_.Exception.InnerException.StackTrace

   }

}

} catch {

   Write-Output "Fehler beim Verbinden zur Datenbank: $_"

} finally {

# Schließe die Datenbankverbindung am Ende der äußeren Schleife

if ($con.State -eq 'Open') {

   $con.Close()

   Write-Output "Datenbankverbindung erfolgreich geschlossen."

}

}

Datenbank, MySQL, PowerShell
Soll ich die Wohnung nehmen?

Hallo,

ich trenne mich von meiner Frau und suche entsprechend eine eigene Wohnung. Leider ist selbst hier auf dem Land der Wohnungsmarkt ziemlich angespannt. Auf eine halbwegs bezahlbare Wohnung kommen teils hunderte an Bewerber, entsprechend ist es echt schwer was zu finden...

Nun habe ich unverhoft eine Zusage bekommen und bin trotzdem am Überlegen ob ich die nehmen sollte oder lieber weitersuchen soll?!

Es handelt sich dabei um einen Anbau mit rund 50m² 2 Zimmer. Leider ist die Wohnung unrenoviert und früher wohnte da wohl mal eine alte Frau. Überall ist uralter hässlicher Filzteppich verlegt (selbst im Badezimmer!), die Tapeten ebenso uralt. Die Küche sehr unpraktisch angeordnet (die halbe Wand ist ein eingebauter Schrank...).

Ich müsste also die komplette Wohnung renovieren und hier kommt der kleine Knackpunkt:

Ich habe ca. 2500€ nach Kautionszahlung noch über. Mindestens ein Sofa wollte ich mir noch kaufen sowie Wohnzimmertisch, Microwelle, Waschmaschine, Geschirr etc. der Rest kann erstmal warten bzw. kann ich mitbringen. Da die Wohnung eben komplett Renoviert werden muss weiß ich nicht ob ich das packe?!

Mindestens überall Laminat, im Bad und Küche idealerweise Vinyl (Feuchtraum Vinyl), alle Tapeten runter und neu. Ich habe natürlich schon nach Preisen für Boden/Wände geschaut bin mir wegen der Anschaffung der anderen Dinge aber nicht sicher ob es klappen kann. Was meint ihr?

Wohnung, Geld, Renovierung
Weitere Inhalte können nur Nutzer sehen, die bei uns eingeloggt sind.