IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Baux DHCP dans base de données mysql [PowerShell]


Sujet :

Scripts/Batch

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 134
    Points : 65
    Points
    65
    Par défaut Baux DHCP dans base de données mysql
    Bonjour,

    je débute sous powershell et j'aimerai importer dans une base de donnée MySQL, un baux d'un DHCP sous windows serveur 2012.

    J'ai réussi pour à faire ce script :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
    #Load library connector
    [void][System.Reflection.Assembly]::LoadWithPartialName("MySql.Data")
    
    #connexion parametre
    $port = "3306"
    $srv= "localhost"
    $user = "test"
    $mdp = "test"
    $bdd = "dhcp"
    
    #connexion to database
    $connection = New-Object MySql.Data.MySqlClient.MySqlConnection
    $connection.ConnectionString = “server=$srv;port=$port;uid=$user;pwd=$mdp;database= bdd;Pooling=False”
    $connection.Open()
    
    #SQL request
    get-DhcpServer4Lease -computername MyNameServer -ScopeId 192.168.0.1
    
    #end on connexion
    $connection.Close()
    la ou je bloque c'est pour la requête, si j'ai bien compris la commande get-DhcpServer4Lease sert à faire l'enregistrement des baux ?
    cependant je vois pas comment l'écrire ?

    SI quelqu'un peut l'expliquer le principe , je lui en serait reconnaissant !!

    Merci

  2. #2
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Salut,
    Citation Envoyé par schranz Voir le message
    si j'ai bien compris la commande get-DhcpServer4Lease sert à faire l'enregistrement des baux ?
    Non, le verbe Get renvoi des données sous forme d'objets.
    Une requête SQL est différente, il te faut soit faire un Insert soit un Update de ces données dans ta base ou mieux créer une procédure stockée qui simplifierais le code du script.
    Voir aussi.

  3. #3
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 134
    Points : 65
    Points
    65
    Par défaut
    Merci pour ce retour,

    J'ai refais le code en suivant ce lien .

    N'ayant pas de serveur réel sous la main, je passe sur une machine virtuel

    J'ai juste quelque précision à te demander :

    - Est ce que l'insertion dans la base de donnée peut juste être faite pour l'adresse mac (c'est le Type ID unique je suppose ) et l'adresse IP ?
    - Est il possible d’inséré des donnée directement depuis le DhcpServer4Lease ou faut 'il passer par un export d'un fichier texte comme je l'ai mentionné ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
    [void][System.Reflection.Assembly]::LoadWithPartialName("MySql.Data")
    
    $connectionString = “server=localhost;uid=admin;pwd=test;database= dhcp;port=3306;“
    $connection = New-Object MySql.Data.MySqlClient.MySqlConnection
    $connexion.ConnectionString = $connectionString
    get-DhcpServer4Lease -computername winserver -ipaddress 192.168.0.1
    
    ConvertTo-CSV |
out-file -FilePath "c:\junk\test1.csv"
    $File = «*c:\schranz\test1.csv"
$collection = Get-Content $File
get-content c:\schranz\test1.csv
    $sql = INSERT INTO DHCP (Adresse IP du client Nom	Expiration du bail Type ID unique Description	Protection d’accès réseau Expiration de la période d’essai Profil du filtre Stratégie) VALUES(Adresse IP du client Nom	Expiration du bail Type ID unique Description	Protection d’accès réseau Expiration de la période d’essai Profil du filtre Stratégie)
    
    $command = New-Object MySql.Data.MySqlClient.MySqlCommand($sql, $connection)
    
    $dataAdapter = New-Object MySql.Data.MySqlClient.MySqlDataAdapter($command)
    
    $dataSet = New-Object System.Data.DataSet
    
    $recordCount = $dataAdapter.Fill($dataSet, "sample_data")
    
    $connection.Close()
    Merci pour l'aide

  4. #4
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par schranz Voir le message
    - Est ce que l'insertion dans la base de donnée peut juste être faite pour l'adresse mac (c'est le Type ID unique je suppose ) et l'adresse IP ?
    En théorie oui, mais cela dépend de la conception de ta base. Tu es le seul à pouvoir répondre à cette question.
    Essaie, et si ce n'est pas possible tu auras un message d'erreur du SGBD.
    Citation Envoyé par schranz Voir le message
    - Est il possible d’insérer des données directement depuis le DhcpServer4Lease ou faut-il passer par un export d'un fichier texte comme je l'ai mentionné ?
    Oui, en utilisant le pipeline tu effectues une itération sur tous les baux DHCP, enfin je suppose car je ne connais pas ce cmdlet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Function Import-DHCPLeaseInDatabases {
     param (...)
    
    #fait qq chose
    }
    
    Get-DhcpServer4Lease -computername winserver -ipaddress 192.168.0.1 |
     Foreach-Object {
      $Current=$_
      Import-DHCPLeaseInDatabases $Current.Property1 $Current.Property2 ...
     }
    Il te faut vérifier si pour un objet renvoyé tu as bien toutes les informations nécessaires pour créer une entrée dans ta base.
    Le traitement ne semble pas complexe, par contre si n'as pas un référentiel de scripts sur lequel t'appuyer, cela va te demander un certains temps

  5. #5
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 134
    Points : 65
    Points
    65
    Par défaut
    Re bon mon code a quelque peu évoluer

    La ou je bloque c'est que le script se lance mais ma base de donnée ne contient aucun enregistrement. On je peux trouver les log sur un windows server (bascule pas évident depuis linux) par rapport au powershell ?

    voici le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    [void][System.Reflection.Assembly]::LoadWithPartialName("MySql.Data")
    
    $connectionString = "server=localhost;uid=test;pwd=test;database=zabbix;port=3306;"
    $connection = New-Object MySql.Data.MySqlClient.MySqlConnection
    $connection.ConnectionString = $connectionString
    
    Get-DhcpServerv4Lease -ScopeId 192.168.0.0 -ComputerName winserver |
    Select-Object -Property ClientId, IPAddress |
    Export-Csv -NoTypeInformation -Path C:\Users\Administrateur\mysql.csv
    
    $sql = @'
        LOAD DATA LOCAL INFILE 'C:\Users\Administrateur\mysql.csv'
        INTO TABLE dhcp
        FIELDS OPTIONALLY ENCLOSED BY '"'
        LINES TERMINATED BY '\r\n'
        IGNORE 1 LINES;
    '@
    
    $command = New-Object MySql.Data.MySqlClient.MySqlCommand($sql, $connection)
    
    $dataAdapter = New-Object MySql.Data.MySqlClient.MySqlDataAdapter($command)
    
    $dataSet = New-Object System.Data.DataSet
    
    $recordCount = $dataAdapter.Fill($dataSet, "sample_data")
    
    $dataSet.Tables["sample_data"] | Format-Table > C:\inetpub\wwwroot\samples.html
    
    $connection.Close()

  6. #6
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Le DataSet ne me semble pas nécessaire pour des insertions, par contre il manque l'exécution de ta requête.
    Recherche du code C#, cela te donnera des pistes.
    Pour visualiser le contenu de ta table utilise un requêteur SQL, sinon une requête Select via Powershell.

  7. #7
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 134
    Points : 65
    Points
    65
    Par défaut
    Bon finalement j'ai reussi à faire le script.
    j'ai juste 2 questions j'ai enlever les guillemets de mon csv , et la je bloque pour enlever la virgule et mettre un espace à la place. L' espace me servira de délimiteur pour la fonction LOAD DATA infile.
    la 2 la je travaille sur un serveur mysql local, quand je tente de mettre l'adresse ip d'un autre serveur avec tout les bon renseignements j'ai le droit à un message d'erreur unable to connect to any of the specified Mysql hosts. Le serveur distant est un linux et j'ai modifier le bind adresse en mettant l'adresse ip du serveur windows....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    [void][System.Reflection.Assembly]::LoadWithPartialName("MySql.Data")
    $connectionString = "server=localhost;uid=test;pwd=test;database=zabbix;port=3306;Allow User Variables=true;Pooling=false;"
    $connection = New-Object MySql.Data.MySqlClient.MySqlConnection
    $connection.ConnectionString = $connectionString
    $connection.Open()
     
    Get-DhcpServerv4Lease -ScopeId 192.168.0.0 -ComputerName winserver |
    Select-Object -Property ClientId, IPAddress, ClientType, HostName |
    Export-Csv -NoTypeInformation -Path C:\Users\Administrateur\mysql.csv
    $extractfile= "C:\Users\Administrateur\mysql.csv"
    $delguill = Get-Content C:\Users\Administrateur\mysql.csv | Foreach {$_ -replace '"',''}
    $delguill > C:\Users\Administrateur\mysql.csv
    
    $sql = @'
        LOAD DATA LOCAL INFILE 'C:\\Users\\Administrateur\\mysql.csv'
        INTO TABLE dhcp
        FIELDS ENCLOSED BY ','
        LINES TERMINATED BY '\n'
        IGNORE 1 LINES;
    '@
      
    $command = New-Object MySql.Data.MySqlClient.MySqlCommand($sql, $connection)
     
     
    $rowsAffected = $command.ExecuteNonQuery();
      
    $sql = 'SELECT * FROM dhcp'
     
    $command = New-Object MySql.Data.MySqlClient.MySqlCommand($sql, $connection)
    $dataAdapter = New-Object MySql.Data.MySqlClient.MySqlDataAdapter($command)
    $dataSet = New-Object System.Data.DataSet
     
    $recordCount = $dataAdapter.Fill($dataSet, "sample_data")
    $dataSet.Tables["sample_data"] | Format-Table > C:\inetpub\wwwroot\samples.html
     
    $connection.Close()

  8. #8
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Pour le premier, pourquoi ne pas adapter ta commande Load, au lieu de modifier ton fichier csv ?
    CSV étant normé, MySql devrait le manipuler correctement.

    Pour le second, l'usage d'un requêteur permet de simplifier le test d'accès. Tu peux aussi consulter ce site.
    Et sinon le mieux est de demander dans le forum approprié.

  9. #9
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 134
    Points : 65
    Points
    65
    Par défaut
    Le script marche maintenant !! en revanche la connection marche pas , je passe bien en ssh et avec mysqlworbench et il voit bien les fichier distants. Je te remercie en tout cas pour ton aide.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    [void][System.Reflection.Assembly]::LoadWithPartialName("MySql.Data")
    $connectionString = "server=localhost;uid=test;pwd=test;database=zabbix;port=3306;Allow User Variables=true;Pooling=false;"
    $connection = New-Object MySql.Data.MySqlClient.MySqlConnection
    $connection.ConnectionString = $connectionString
    $connection.Open()
     
    Get-DhcpServerv4Lease -ScopeId 192.168.0.0 -ComputerName winserver |
    Select-Object -Property ClientId, IPAddress, ClientType, HostName |
    Export-Csv -NoTypeInformation -Path C:\Users\Administrateur\mysql.csv
    
     
    $sql = @'
        LOAD DATA LOCAL INFILE 'C:\\Users\\Administrateur\\mysql.csv'
        INTO TABLE dhcp
        FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
        LINES TERMINATED BY '\r\n'
        IGNORE 1 LINES;
    '@
      
    $command = New-Object MySql.Data.MySqlClient.MySqlCommand($sql, $connection)
     
    # If we've done anything wrong up to this point, ExecuteNonQuery() will produce an error.
     
    $rowsAffected = $command.ExecuteNonQuery();
     
    # Now that we're done sending data to the DB, it's time to pull it back out again using the
    # sample code you found which started with a SELECT statement.  In this case, the table name
    # is dhcp (taken from your "LOAD DATA INFILE 'filename' INTO TABLE dhcp" query.)
     
    #$sql = 'SELECT * FROM dhcp'
     
    #$command = New-Object MySql.Data.MySqlClient.MySqlCommand($sql, $connection)
    #$dataAdapter = New-Object MySql.Data.MySqlClient.MySqlDataAdapter($command)
    #$dataSet = New-Object System.Data.DataSet
     
    # Here, "sample_data" is whatever you want to call it, so long as it's the same value in the
    # call to Fill(), and in the next line which access that name in $dataSet.Tables.
     
    #$recordCount = $dataAdapter.Fill($dataSet, "sample_data")
    #$dataSet.Tables["sample_data"] | Format-Table > C:\inetpub\wwwroot\samples.html
     
    $connection.Close()

  10. #10
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par schranz Voir le message
    Le script marche maintenant !! en revanche la connection marche pas
    Je ne suis pas sûr de comprendre, peux-tu reformuler ?

  11. #11
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 134
    Points : 65
    Points
    65
    Par défaut
    Oui en effet j'etais fatigué quand j'ai fait le post. Le script fonctionne parfaitement en local, je retrouve bien mes champs remplis dans la base de donnée. La ou ca coince c'est la connection à distance, j'ai fais le test de connection avec mysqlworkbench en SSH, il voit bien les base de donnée du serveur distant, mais lors de l'execution du script , j'ai le message d'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Unable to nomduserveur connect to any of the specified MySQL hosts
    . Pourtant j'ai spécifié l'adresse ip du serveur dans le bind-address du fichier my.cnf et donner les droits utilisateurs....

  12. #12
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1

  13. #13
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 134
    Points : 65
    Points
    65
    Par défaut
    Le soucis venait l’utilisateur qui ne pouvait atteindre la machine distante. Tout marche sinon.

    Merci de ton aide !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. recherche dans base de donnée mysql
    Par alex01pernot dans le forum Bases de données
    Réponses: 13
    Dernier message: 03/05/2020, 16h50
  2. Baux DHCP dans base de donnée MYSQL
    Par schranz dans le forum Windows Serveur
    Réponses: 2
    Dernier message: 20/07/2014, 20h37
  3. Stocker mails imap dans base de données mysql
    Par energie13 dans le forum Langage
    Réponses: 2
    Dernier message: 20/01/2009, 15h52
  4. Réponses: 1
    Dernier message: 17/10/2008, 11h25
  5. [MySQL] Caractères accentués dans base de données MySQL
    Par enfin dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 11/01/2007, 21h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo