Jump to content

grbennemsi

Members
  • Gesamte Inhalte

    7
  • Registriert seit

  • Letzter Besuch

Beiträge erstellt von grbennemsi

  1. 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.

  2. 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.

     

     

  3. 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:

    image.thumb.png.f7a5c12d7574830732475f993c814d88.png

  4. 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...