Jump to content

grbennemsi

Members
  • Gesamte Inhalte

    7
  • Registriert seit

  • Letzter Besuch

Letzte Besucher des Profils

Der "Letzte Profil-Besucher"-Block ist deaktiviert und wird anderen Benutzern nicht angezeit.

Fortschritt von grbennemsi

Apprentice

Apprentice (3/14)

  • Erste Antwort
  • Erster eigener Beitrag

Neueste Abzeichen

0

Reputation in der Community

  1. Wie oben schon beschrieben, kenne ich die Struktur der Datenbank nicht. Der externe Softwarehersteller hilft mir hier auch nicht weiter. Ich wollte mir diese Arbeit ersparen mich da reinzudenken. Aufgrund der hohen RAM-auslastung, wenn ich die ganze Tabelle lade, werde ich dies in den Query einbauen.
  2. Die Datatable wird als DataTable (System.ComponentModel.MarshalByValueComponent) Objekt in Powershell geladen. PS D:\OneDrive\10 Programmieren\Powershell\Ad User aus SeMI> $OpenTable.GetType() IsPublic IsSerial Name BaseType -------- -------- ---- -------- True True DataTable System.ComponentModel.MarshalByValueComponent Ich kann sie jedoch mit Select-Object in ein Array umwandeln. Dazu muss ich nur die gewünschten Spalten aussuchen. $OpenTable = $OpenTable | Select-Object FirstName, LastName, Firma, Mitarbeiter, ... Jetzt wird es als System.Array angegeben. PS D:\OneDrive\10 Programmieren\Powershell\Ad User aus SeMI> $OpenTable.GetType() IsPublic IsSerial Name BaseType -------- -------- ---- -------- True True Object[] System.Array Für den Zugriff auf die SQL Daten benutze ich folgende Funktion: # Function for the SQL query function Perform-SQL { Param( [string]$sqlHost, [string]$DB, [string]$SqlQuery, [string]$User, [string]$Password ) if (($User) -and ($Password)) { $connectionParam = "Data Source=$sqlHost;User ID=$User;Password=$Password;Initial Catalog=$DB" } else { $connectionParam = "Data Source=$sqlHost;Integrated Security=SSPI;Initial Catalog=$DB" } $sqlconnection = new-object system.data.SqlClient.SQLConnection($connectionParam) $command = new-object system.data.sqlclient.sqlcommand($sqlQuery,$sqlconnection) $sqlconnection.Open() $sqlDataAdapter = New-Object System.Data.sqlclient.sqlDataAdapter $command $dataset = New-Object System.Data.DataSet $sqlDataAdapter.Fill($dataSet) | Out-Null $sqlconnection.Close() $dataSet.Tables } Diese erstellt ein DataTable (System.ComponentModel.MarshalByValueComponent) Objekt. Eventuell sollte ich hier die Funktion ändern.
  3. Ich habe jetzt folgendes gemacht. Das Datatable Objekt in ein System.Array geladen. Braucht jedoch viel mehr Speicher. Jetzt kommt die Fehlermeldung wieder. Ich werde die Funktion wie von dir empfohlen, in einer Schleife abarbeiten. Mal schauen was es dann ausgibt.
  4. Ich habe schon folgendes probiert: $GetDate = (Get-Date). AddYears(-1) $OpenTable2 = $OpenTable | Where-Object {$_.Rows.EventStart -ge $GetDate} Dies sollte ja das Datum vor einem Jahr in die Variable $GetDate laden. leider ohne Erfolg. In der Tabelle habe ich Daten bis ins Jahr 2023:
  5. Ich habe folgendes herausgefunden: Bei der DataTable wird immer Rows für zeile nach dem ersten Punkt hinzugefügt. Wenn ich den Code wie folgt eingebe: $OpenTable2 = $OpenTable | Where-Object {$_.Rows.EventStart -ge [datetime]::today} Dann wird die Fehlermeldung nicht mehr ausgegeben. Leider funktioniert die Filterung immer noch nicht richtig. Die Operatoren -le und -lt funktionieren. Bei den andern Operatoren bleibt die Variable $OpenTable2 leer. Hier noch mein ganzer Script: # Function SQL-Querry . .\Perform-SQL.ps1 # Path to SQL Query $SQLPath = '.\QueryTest.sql' # SQL Query $Query = Get-Content $SQLPath # Path to Data $DataPath = '.\data' # Read SQL Table in SeMI $OpenTable = Perform-SQL -sqlHost SVXXXXXXXX -DB seXXXXXX -SqlQuery $Query # Load all entries that start after today's date. $OpenTable2 = $OpenTable | Where-Object {$_.Rows.EventStart -ge [datetime]::today} Ich filtere bewusst nicht schon im SQL Query, da diese Datenbank sehr speziell aufgebaut ist und mir die Zeit fehlt mich reinzudenken.
  6. Mit dem $_.EventStart verweise ich auf auf das Startdatum des Kurses in der Variable $OpenTable. Wenn ich $OpenTable.EventStart eingebe bekomme ich ja alle Daten aus der Tabelle. Ich weiss nicht ob ich die Funktion $_. richtig begriffen habe. Hier ein Ausschnitt aus meiner Tabelle die ich von einer SQL Datenbank beziehe. EventStart und EventEnd sind als DataTime und nicht als String gespeichert:
  7. Ich habe eine DateTable aus einer SQL Abfrage erstellt. in dieser sind diverse Namen und Adresse von Kursteilnehmern enthalten. Zusätzlich ist das Datum vom Kursstart in DateTime enthalten. Ich möchte die DateTable jetzt Filtern, so das nur noch Einträge mit einem grösser oder gleichem Datum wie heute ersichtlich sind. $OpenTable2= $OpenTable| Where-Object{$_.EventStart -ge[datetime]::today} Ich bekomme jedoch immer die Fehlermeldung: InvalidOperation: Cannot compare “” because it is not IComparable. Aus meiner Sicht müssten beide Werte als DateTime und nicht als String vorliegen. Wenn ich mit *getType() nachschaue, zeigt es mir auch DateTime an. Mit andern Tebllen hatte ich dieses Problem nicht. Liegt es eventuelle am Objekt DataTable? Hat jemand noch eine Idee?
×
×
  • Neu erstellen...