PowerShell – die besten Beiträge

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

powershell script für vergleicher zweier Excel-dateien?

Hi Leutz,

ich brauche hilfe bei einem Powershell-Script das mir 2 riesige(20+ Mappen in den Dateien) Exceldateien inhaltlich vergleicht und mir dann möglichst die nicht übereinstimmenden Zellen(mit jeweiliger Arbeitsmappe) ausgibt und das am besten in eine separate Excel/CSV-Datei schreibt, damit ich schauen kann welcher der Einträge aktueller ist.

bisher sieht mein script so aus:

# Pfade zu den zu vergleichenden Dateien definieren

$PfadDatei1 = "X:\xyz\IP-Adressen.xlsx"

$PfadDatei2 = "X:\xyz\IP-Adressen2.xlsx"

# Excelldateien in Powershellobjekte laden

$ExcelInhalt1 = get-content -Path $PfadDatei1

$ExcelInhalt2 = get-content -Path $PfadDatei2

# Vergleichen der Excell-Inhalte

$Unterschiede = Compare-Object -ReferenceObject $PfadDatei1 -DifferenceObject $PfadDatei2

# Prüfen ob Unterschiede gefunden wurden und Ausgabe derer

if ($Unterschiede.count -eq 0)

{

   Write-Host "Keine Unterschiede gefunden"

}

else

{

   Write-Host "Unterschiede gefunden"

   $Unterschiede | Export-Csv -Path "X:\xyz\Documents\Ergebnis.csv" -NoTypeInformation -Force

}

Das Script vergleicht die Dateien zwar, gibt mir aber total kryptische Ergebnisse aus. Also als würde ich ne C++ Datei verschlüsselt im Editor öffnen

Hat jemand ne Idee was ich da ändern muss damit der mir das so ausgibt, dass ich am besten den Namen der Arbeitsmappe und die Zelle ausgegeben bekomme?

danke schon mal

Microsoft Excel, programmieren, Script, PowerShell, Office 365

Powershell remote Script zum Client wird ausgeführt aber ohne Fehlermeldung und ohne starten der Anwendung?

Hallo, ich versuche vom Host per Remote auf eine VM mit Remote eine Anwendung zu starten und bekomme auch die Rückmeldung das der Prozess gestartet ist, (Es wird auch kurz ein PowerShell Fenster angezeigt und die Anwendung startet auch irgendwann im Hintergrund) aber egal was ich versuche die Anwendung lässt sich nicht normal starten. Der ps Befehl an sich funktioniert an sich (etwas abgeändert) einwandfrei auf dem Client. Das komische ist ja das einfache Sachen wie eine Txt Datei erstellen ohne Probleme funktionieren. Ich hab in der vm schon alles mögliche probiert auch ohne Firewall gleiches Ergebnis. openai hat auch schon aufgegeben, anscheinend soll laut meinem Kollegen sowas vorher ohne Probleme funktioniert haben, aber an den win Updates kanns nicht liegen da die vm frisch installiert ist. Chrome wurde nur als Test mit eingefügt


$chromeScriptBlock = {

  Start-Process -FilePath "C:\Program Files\Google\Chrome\Application\chrome.exe" -WindowStyle Normal

}

$padScriptBlock = {

  $padExePath = "C:\Program Files (x86)\Power Automate Desktop\PAD.Console.Host.exe"

  $flowUrl = "XXXXr"

  Start-Process -FilePath $padExePath -ArgumentList $flowUrl -WindowStyle Normal

}

# Für Chrome

C:\Users\Administrator\Desktop\PSTools\psexec.exe \\192.168.56.10 -i 1 -u XX powershell -ArgumentList "-NoProfile -ExecutionPolicy Bypass -Command & {$chromeScriptBlock}"

# Für Power Automate Desktop

C:\Users\Administrator\Desktop\PSTools\psexec.exe \\192.168.56.10 -i 1 -u XX -p XXX-d powershell -ArgumentList "-NoProfile -ExecutionPolicy Bypass -Command & {$padScriptBlock}"

Server, Script, PowerShell, Remote Desktop, Windows 10, windows server 2019

Meistgelesene Beiträge zum Thema PowerShell