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

MS SQL Server Discussion :

[powershell] Lister les instances SQL Server distant


Sujet :

MS SQL Server

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 137
    Points : 56
    Points
    56
    Par défaut [powershell] Lister les instances SQL Server distant
    hello,

    en utilisant le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Import-Module SQLPS -DisableNameChecking
     
    $servername = "localhost"
    $managedComputer = New-Object "Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer" $servername
    $managedComputer.ServerInstances |
    Select Name, State, ServerProtocols, Urn |
    Format-List
    j'aimerais renseigner à un endroit un login/mdp pour me connecter sur un serveur distant (au lieu de localhost) sur un autre domaine

    merci pour votre aide!

  2. #2
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 137
    Points : 56
    Points
    56
    Par défaut
    je n'ai pas eu beaucoup de succès ;-)

    peut-être que je devrais poser cette question dans le forum SQL Server?

  3. #3
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Hello,

    Quel est le but ici ? Tu veux uniquement lister les instances ou te connecter également à une instance particulière trouvée par exemple?

    ++

  4. #4
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 137
    Points : 56
    Points
    56
    Par défaut
    Bonjour Mikedavem,
    C'est effectivement ma prochaine étape :-)
    J'aimerais dans un premier temps lister les instances de mes serveurs distants puis m'y connecter.

    Merci pour ton aide.

  5. #5
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Voici la méthode que j'utilise personnellement:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $objDomain = New-Object System.DirectoryServices.DirectoryEntry;
    $objSearcher = New-Object System.DirectoryServices.DirectorySearcher;
     
    $objSearcher.SearchRoot = $objDomain;
    $objSearcher.Filter = ("(objectClass=computer)");
    $objSearcher.PropertiesToLoad.Add("name");
    $computers = $objSearcher.FindAll();
     
    foreach ($computer_name in $computers | Sort computername)
    {
        $computer_name | Select computername;
        $sql_instances = get-wmiobject -Class win32_service -ComputerName $computer_name;
     
        $sql_instances | where { $_.name -like "MSSQL$" -or $_.name -eq "MSSQLSERVER" } | select name;
    ++

  6. #6
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 137
    Points : 56
    Points
    56
    Par défaut
    merci!

    mais ton script "scanne" tout le domaine? ça ne risque pas de créer une grosse charge réseau?

  7. #7
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Of course not !

    Cela reste un gentil script .. il ne fait de de denial of services :-)

    Mais tu peux changer la partie filtre en fonction de ton besoin

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $objSearcher.Filter = ("(objectClass=computer)");
    ++

  8. #8
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 137
    Points : 56
    Points
    56
    Par défaut
    je débute complètement, je suis un peu perdu

    en fait j'aurais aimé lister les instances SQL Server d'un serveur distant dont je connais l'ip (ou le nom) que je donne en paramètre à mon script
    et ensuite pouvoir me connecter à une des instances
    le souci c'est que mon serveur distant est dans un autre domaine que le poste sur lequel j'exécute le script powershell

    merci

  9. #9
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Ah oui autant pour moi le script fourni ne correspond pas à ton besoin.

    Quelque chose dans ce style est plus adapté:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $computer_name = read-host "Enter computer Name or IP";
     
    $sql_instances = get-wmiobject -Class win32_service -ComputerName $computer_name;
     
    $sql_instances | where { $_.name -like "MSSQL$" -or $_.name -eq "MSSQLSERVER" } | select name;
     
    ...
    ++

  10. #10
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 137
    Points : 56
    Points
    56
    Par défaut
    merci

    en exécutant le script, j'ai donné 127.0.0.1 ou localhost en paramètre mais je n'ai aucun résultat (j'ai pourtant 2 instances qui tournent sur mon poste)

  11. #11
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Les 2 fonctionnement chez moi.

    Des SQL Express sur ton poste ?

    Edit : ceci dit les express doivent être détectés également

    ++

  12. #12
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 137
    Points : 56
    Points
    56
    Par défaut
    non ce sont des versions Entreprise

  13. #13
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Etonnant ...

    Quel est le résultat de ce script:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Get-Service -Name *sql*
    ++

  14. #14
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 137
    Points : 56
    Points
    56
    Par défaut
    ah là ça me rend bien toutes les instances et agents, sqlbrowser, sqlwriter

  15. #15
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 137
    Points : 56
    Points
    56
    Par défaut
    Citation Envoyé par mikedavem Voir le message
    Voici la méthode que j'utilise personnellement:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $objDomain = New-Object System.DirectoryServices.DirectoryEntry;
    $objSearcher = New-Object System.DirectoryServices.DirectorySearcher;
     
    $objSearcher.SearchRoot = $objDomain;
    $objSearcher.Filter = ("(objectClass=computer)");
    $objSearcher.PropertiesToLoad.Add("name");
    $computers = $objSearcher.FindAll();
     
    foreach ($computer_name in $computers | Sort computername)
    {
        $computer_name | Select computername;
        $sql_instances = get-wmiobject -Class win32_service -ComputerName $computer_name;
     
        $sql_instances | where { $_.name -like "MSSQL$" -or $_.name -eq "MSSQLSERVER" } | select name;
    ++
    en passant ce script, j'ai ces erreurs (une par machine):

    get-wmiobject : The RPC server is unavailable. (Exception from HRESULT: 0x800706BA)
    At C:\Users\myname\Desktop\ec.ps1:12 char:22
    + $sql_instances = get-wmiobject -Class win32_service -ComputerName $computer_ ...
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : InvalidOperation: ( [Get-WmiObject], COMException
    + FullyQualifiedErrorId : GetWMICOMException,Microsoft.PowerShell.Commands.GetWmiObjectCommand
    j'ai vérifié que les services RPC sont démarrés, je n'ai pas accès aux firewalls et je ne pense pas pouvoir obtenir de "laisser passer"...

  16. #16
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 137
    Points : 56
    Points
    56
    Par défaut
    Citation Envoyé par mikedavem Voir le message
    Ah oui autant pour moi le script fourni ne correspond pas à ton besoin.

    Quelque chose dans ce style est plus adapté:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $computer_name = read-host "Enter computer Name or IP";
     
    $sql_instances = get-wmiobject -Class win32_service -ComputerName $computer_name;
     
    $sql_instances | where { $_.name -like "MSSQL$" -or $_.name -eq "MSSQLSERVER" } | select name;
     
    ...
    ++
    en remplaçant par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $computer_name = read-host "Enter computer Name or IP";
     
    $sql_instances = get-wmiobject -Class win32_service -ComputerName $computer_name;
     
    $sql_instances | where { $_.name -like "*MSSQL*" } | select name;
    ça fonctionne

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

Discussions similaires

  1. [WD20] Lister les instances SQL Server sur le réseau
    Par Invité dans le forum WinDev
    Réponses: 12
    Dernier message: 06/05/2015, 15h33
  2. Lister les instances SQL Server 2000 d'un serveur
    Par CleeM dans le forum Développement
    Réponses: 11
    Dernier message: 14/06/2012, 11h47
  3. Réponses: 1
    Dernier message: 05/03/2012, 15h20
  4. [C#] Lister les instances SQL Server du reseau
    Par Idredeguerre dans le forum C#
    Réponses: 2
    Dernier message: 09/11/2010, 13h46
  5. Réponses: 1
    Dernier message: 30/10/2007, 12h49

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