Partage
  • Partager sur Facebook
  • Partager sur Twitter

Wmi mes requête ne passe pas ??

wmi et le C#

Anonyme
    3 juillet 2020 à 5:51:56

    Bonours,

    Précision débutant en C# (wmi compris)

    Suite a un autre post on ma conseiller d'utiliser les wmi et celle ci contienne des requête SQL. merci à bacelar

    Avec l'utilisation d'un soft WMI Explorer, dans celui-ci il est possible d'y faire des requête.

    Une sortie quelque soi celle chois,i cela donne rien et pas d'erreur sauf celle ou les droit sont insuffisant, j'ai même tenter en mode administrateur , aucun changement. bref pour revenir a du code C#

    public int tcp2() 
    		{
    
    			string NamespacePath = "\\\\.\\ROOT\\WMI";
    			string ClassName = "TcpIp_TypeGroup1";
    
    			//Create ManagementClass
    			ManagementClass oClass = new ManagementClass(NamespacePath + ":" + ClassName);
    
    			//Get all instances of the class and enumerate them
    			foreach (ManagementObject oObject in oClass.GetInstances())
    			{
    				//access a property of the Management object
    				Console.WriteLine("PID : {8}", oObject["Process ID"]);
    			}
    }

    ce code compile mai pas d'erreur et rien .... bon je débute j'imagine que la requête n'est pas a jour m'enfin c est ce qui est préconiser dans la doc. PID : {8} n'est surement pas correct mai j'ai tester avec d'autre valeur rien a faire .... sa ne rentre même pas dans la boucle ??

    Merci de m'avoir lu et de votre patience

    • Partager sur Facebook
    • Partager sur Twitter
      3 juillet 2020 à 8:36:47

      Bonjour,

      Pourquoi dans ton WriteLine tu as "{8}" et que tu ne mets qu'un seul paramètre ?

      Je pense que tu n'as pas compris ce qu'était "{8}", as tu trouvé ce code quelque part ?

      Je te laisse chercher avec la doc de WriteLine pour trouver ton erreur, et si jamais tu ne comprends toujours pas, n'hésite pas a revenir, j'essayerai de te l'expliquer le plus simplement possible.

      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        3 juillet 2020 à 11:15:36

        Oui j'ai bien trouver le code quelque par, chez microsoft .... la doc sa va mai pour ce qui est des wmi je comment a ne plus trop y croire les doc date, rien ne marche.  bref disons les aléa du débutant....  j'ai tester des soft rien a faire ce truc la ne veux visiblement rien savoir.

        Pour ce qui est du paramètre de WritLine  je supposai (oui bon...) que cela sélectionnerai le paramètre choisi. 

        je me documente sur la question actuellement.

        merci pour ta réponse

        • Partager sur Facebook
        • Partager sur Twitter
          3 juillet 2020 à 11:35:19

          Je ne connais pas les wmi.

          Mais si l'affiche c'est seulement : "PID : " c'est normal, le "{8}" est faux.

          Tu indiques que tu veux mettre le paramètre 8, alors que n'en donne qu'un.

          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            3 juillet 2020 à 13:34:18

            Merci Matioso pour ces précision.:)

             Bon je vais faire le résumer parce que on va dire que wmi c'est génial .... ouai ouai...

            Utilitaire présent sur windows pour wmi est WBEMTest que je qualifie d'incomplet ... je plein les gens qui doive s'en servir...

            nager avec une enclume c'est surrment possible ....

            utilitaire extérieur: WMI explorer , très joli mai ne ser uniquement a lister les class. alors on va voir la doc de Microsoft

            La doc de microsoft sur wmi: des paver lourd a n'en plus finir.... sa deviens a ce stade du nucléaire pure le top de la physique quantique.

            les exemples .. .plein qui visiblement ne sont pas a jours.

            On peux donner son avis sur les pages,Je devine que ça sert de marque page quand il débarque sur leur doc...

            (bon j'ai eté contaminer ça commence a ressembler a un paver... et franchement on s'en fou.)

            Le site web: https://wutils.com/ fantastique documentation, légèrement périmée ? ...

            Sont auteur a mon respect car le boulot est propre.

            A un moment je me pose la question la doc et chercher ok. et coder c'est pour quand ?.

            bon l'eau est froide aux depart, mai après ?->

            C'est vraiment viable dans le temps ce truc, vu comment la doc est maintenue, et les résulta que j’obtiens

            je ne peux que supposer que le soft que je vai faire, va vite avoir des soucis..

            pour le fun :)

            https://fr.qwe.wiki/wiki/Windows_Management_Instrumentation#WMI_tools

            le début d'une légende.

            le wmi c'est la boite de pandore, le secret ce trouve dans la doc de microsoft.

            -
            Edité par Anonyme 3 juillet 2020 à 13:36:12

            • Partager sur Facebook
            • Partager sur Twitter
              3 juillet 2020 à 13:34:35

              Heu, vous l'avez trouvé où ces paramètres ???

              Un article pour VB.NET, mais c'est tout pareil en C# :

              http://devcity.net/PrintArticle.aspx?ArticleID=144

              • Partager sur Facebook
              • Partager sur Twitter
              Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
              Anonyme
                3 juillet 2020 à 16:27:49

                bacelar a écrit:

                Heu, vous l'avez trouvé où ces paramètres ???

                Un article pour VB.NET, mais c'est tout pareil en C# :

                http://devcity.net/PrintArticle.aspx?ArticleID=144


                Published on 4/24/2005 ...... un peux de sérieux quoi...
                • Partager sur Facebook
                • Partager sur Twitter
                  3 juillet 2020 à 22:36:33

                  Un bout de code qui fonctionne chez moi :

                  public int tcp2()
                  {
                      string NamespacePath = @"\\127.0.0.1\root\cimv2";
                      ManagementScope ms = new ManagementScope(NamespacePath);
                  
                      ms.Connect();
                  
                      if (!ms.IsConnected) {
                          MessageBox.Show("Could not connect to WMI namespace");
                      }
                      else
                      {
                          var mso = new ManagementObjectSearcher(ms.Path.ToString(),"SELECT * FROM Win32_Process");
                  
                          var mc = mso.Get();
                  
                          foreach (var obj in mc)
                          {
                              foreach (var prop in obj.Properties)
                              {
                                  Console.WriteLine("Name : {0} , Value : {1}", prop.Name, prop.Value);
                              }
                          }
                      }
                  }

                  C'est un exemple sur les processus. Pour les connexions ouvertes, ça doit être un autre espace de noms et/ou une autre nom de classe.

                  Je vous avais conseillé WMI parce que c'est l'API "moderne" et que les scripts d'administration PowerShell comme "Get-NetTCPConnection" l'utilisent massivement WMI.

                  Je n'ai malheureusement pas un PowerShell/OS récent sous la main pour récupérer le code source de ce script mais vous devriez l'avoir sur une machine avec un PowerShell3 ou 4 d'installé sur un Win8 ou plus.

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
                  Anonyme
                    4 juillet 2020 à 9:50:30

                    Merci pour ta réponse et ton code qui marche ,

                    curieusement parfois sa ne veux rien savoir:

                    string NamespacePath = @"\\127.0.0.1\root\wmi\ms_409";
                    string ClassName = "TcpIp_TypeGroup1";


                    La connection ce fait bien mai rien n'en sort ??

                    j'ai comme l'impression que ça déconne dès qu'on passe des des namespaces ms_* ex: ms_409 qui reviendrai a dire que cela ne peux etre lu par "instanciation" 

                     en cherchant sur le Get-NetTCPConnection je suis tomber sur ce lien

                    https://sysnetdevops.com/2017/04/24/exploring-the-powershell-alternative-to-netstat/

                    En dessous  on peux lire, Just take a look at my little script "regarde mon petit script"  o_O

                    je garde sa sous la main si je ne peux pas faire autrement avec les wmi

                    Edit en attendant que les 24 heure s'coule entre deux post ......

                    Bon les wmi c'est long a comprendre quand sa veux pas marcher , mai on dirait que ce que je veux chopper sont considérer comme des événement et donc gérer de manière différentes des exemples je ne suis pas sorti d'affaire.

                    En attendant ça à viré aux powershell c'est pas qu'il faudrais que sa ce fasse mai bon.... Cela ma pris de la doc et 3 heure de rechercher (ou je sais c'est pas du C# ) mai ça reste valide

                    Précision le fichier est effacer si il existe sans préavis. pour le stopper le bon vieux ctrl + c (ou la croix) a adapter celons les besoins

                    si sa peux dépanner quelqu'un d'autre ;)

                    Param (
                    $file = "./co.txt"
                    )
                    If ( (Test-Path  $file))
                    {   
                        Remove-Item $file -Recurse
                        #echo "Le fichier $file a été supprimé" 
                     
                    }
                    
                    function AutoStartMe (){
                    	#Write-Host "Execution du script"	
                    	Get-NetTCPConnection -State Established | Select-Object -Property RemoteAddress, RemotePort, State, OwningProcess, ProcessName | ForEach-Object {
                    	$_.Processname = (Get-Process -Id $_.OwningProcess).Processname
                    	$_ 
                    	$_.Processname + " : " + $_.OwningProcess + " : "  + $_.RemoteAddress + " : " + $_.RemotePort  >> $file
                    	}
                    
                    
                    }
                    while($true) {
                    	#permet une sortie plus facile si l'utilisateur apuiye sur ctrl + c
                    	sleep 0.1
                    	#insere une ligne  vide entre chaque passage
                    	" " >> $file
                    	AutoStartMe
                    }
                    
                    
                    # ligne de commande est aussi possible avec le choix du port pour changer
                    #Get-NetTCPConnection -RemotePort 443 -State Established | Select-Object -Property RemoteAddress, State, OwningProcess, ProcessName | ForEach-Object {
                    #$_.Processname = (Get-Process -Id $_.OwningProcess).Processname
                    #$_ }
                    

                    -
                    Edité par Anonyme 4 juillet 2020 à 16:04:58

                    • Partager sur Facebook
                    • Partager sur Twitter
                      4 juillet 2020 à 19:40:09

                      Pourquoi utiliser "ms_409" qui est réservé aux données spécifiquement US ??? (ms_ c'est pour ce qui spécifique à une langue et 409 c'est le code des US.)

                      Vous utilisez toujours un "ClassName" qui ne correspond à rien, pour moi.

                      WMI Explorer devrait vous faciliter à trouver les "chemins" valide pour votre OS ou configuration d'OS.

                      Je vous ai conseillé du coté de WMI car c'est le moyen le plus polyvalent de faire des utilitaires systèmes mais c'est peut-être pas le plus simple pour votre cas, qui est somme toute assez bateau.

                      j'ai mentionné "Get-NetTCPConnection" car c'est le genre d'outils utilisés par les administrateurs réseaux pour faire leur monitoring.

                      Il est très probable qu'il se basse sur WMI, mais la difficulté pour tomber sur son code source me fait dire qu'il n'est pas si trivial que cela d'obtenir ces informations depuis WMI.

                      Le but n'est de voir le code des outils qui se servent de ce script mais d'avoir accès au code source du script lui-même.

                      C'est un script donc le code source est lisible.

                      Comme c'est du PowerShell, son code est quasi directement transposable en code C# "classique".

                      Techniquement, c'est le code source que vous pouvez directement utilisé dans votre code d'application "lourde". Il faut juste supprimer un peu d'habillage qui le rend "digeste" pour PowerShell.

                      Si ce script fait tout ce qu'il faut pour vous, n'ayez aucun scrupules, utilisez le.

                      >sont considérer comme des événement et donc gérer de manière différentes des exemples je ne suis pas sorti d'affaire

                      C'est pour cela que le code source de "Get-NetTCPConnection" ferait gagner beaucoup de temps.

                      S'il (votre script) fonctionne chez vous, c'est que vous avez "Get-NetTCPConnection.psh" ou équivalent qui traîne sur votre machine, vous pouvez nous montrez à quoi il ressemble ?

                      • Partager sur Facebook
                      • Partager sur Twitter
                      Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
                      Anonyme
                        5 juillet 2020 à 3:19:46

                        Merci pour ta réponse.

                        Je ne savais pas que cela correspondait une langue.

                        j'ai pas trouver de fichier Get-NetTCPConnection

                        par contre j'ai trouver: MSFT_NetTCPConnection.cdxml


                        <?xml version="1.0" encoding="utf-8"?>
                        <PowerShellMetadata xmlns="http://schemas.microsoft.com/cmdlets-over-objects/2009/11">
                          <Class ClassName="ROOT/StandardCimv2/MSFT_NetTCPConnection" ClassVersion="1.0.0">
                            <Version>1.0.0</Version>
                            <DefaultNoun>NetTCPConnection</DefaultNoun>
                        
                            <InstanceCmdlets>
                              <GetCmdletParameters DefaultCmdletParameterSet="ByName">
                                <QueryableProperties>
                                  <Property PropertyName="LocalAddress">
                                    <Type PSType="System.String" />
                                    <RegularQuery AllowGlobbing="true">
                                      <CmdletParameterMetadata IsMandatory="false" Aliases="IPAddress" Position="0" ValueFromPipelineByPropertyName="true" CmdletParameterSets="ByName" />
                                    </RegularQuery>
                                  </Property>
                                  <Property PropertyName="LocalPort">
                                    <Type PSType="System.UInt16" />
                                    <RegularQuery AllowGlobbing="false">
                                      <CmdletParameterMetadata IsMandatory="false" Position="1" CmdletParameterSets="ByName" />
                                    </RegularQuery>
                                  </Property>
                                  <Property PropertyName="RemoteAddress">
                                    <Type PSType="System.String" />
                                    <RegularQuery AllowGlobbing="true">
                                      <CmdletParameterMetadata IsMandatory="false" CmdletParameterSets="ByName" />
                                    </RegularQuery>
                                  </Property>
                                  <Property PropertyName="RemotePort">
                                    <Type PSType="System.UInt16" />
                                    <RegularQuery AllowGlobbing="false">
                                      <CmdletParameterMetadata IsMandatory="false" CmdletParameterSets="ByName" />
                                    </RegularQuery>
                                  </Property>
                                  <Property PropertyName="State">
                                    <Type PSType="NetTCPConnection.State" />
                                    <RegularQuery AllowGlobbing="false">
                                      <CmdletParameterMetadata IsMandatory="false" CmdletParameterSets="ByName" />
                                    </RegularQuery>
                                  </Property>
                                  <Property PropertyName="AppliedSetting">
                                    <Type PSType="NetTCPConnection.AppliedSetting" />
                                    <RegularQuery AllowGlobbing="false">
                                      <CmdletParameterMetadata IsMandatory="false" CmdletParameterSets="ByName" />
                                    </RegularQuery>
                                  </Property>
                                  <Property PropertyName="OwningProcess">
                                    <Type PSType="System.UInt32" />
                                    <RegularQuery AllowGlobbing="false">
                                      <CmdletParameterMetadata IsMandatory="false" CmdletParameterSets="ByName" />
                                    </RegularQuery>
                                  </Property>
                                  <Property PropertyName="CreationTime">
                                    <Type PSType="System.DateTime" />
                                    <RegularQuery AllowGlobbing="false">
                                      <CmdletParameterMetadata IsMandatory="false" CmdletParameterSets="ByName" />
                                    </RegularQuery>
                                  </Property>
                                  <Property PropertyName="OffloadState">
                                    <Type PSType="NetTCPConnection.OffloadState" />
                                    <RegularQuery AllowGlobbing="false">
                                      <CmdletParameterMetadata IsMandatory="false" CmdletParameterSets="ByName" />
                                    </RegularQuery>
                                  </Property>
                                </QueryableProperties>
                              </GetCmdletParameters>
                            </InstanceCmdlets>
                        
                          </Class>
                        
                          <Enums>
                            <Enum EnumName="NetTCPConnection.State" UnderlyingType="System.Byte">
                              <Value Name="Closed" Value="1" />
                              <Value Name="Listen" Value="2" />
                              <Value Name="SynSent" Value="3" />
                              <Value Name="SynReceived" Value="4" />
                              <Value Name="Established" Value="5" />
                              <Value Name="FinWait1" Value="6" />
                              <Value Name="FinWait2" Value="7" />
                              <Value Name="CloseWait" Value="8" />
                              <Value Name="Closing" Value="9" />
                              <Value Name="LastAck" Value="10" />
                              <Value Name="TimeWait" Value="11" />
                              <Value Name="DeleteTCB" Value="12" />
                              <Value Name="Bound" Value="100" />
                            </Enum>
                            <Enum EnumName="NetTCPConnection.AppliedSetting" UnderlyingType="System.Byte">
                              <Value Name="Internet" Value="0" />
                              <Value Name="Datacenter" Value="1" />
                              <Value Name="Compat" Value="2" />
                              <Value Name="DatacenterCustom" Value="3" />
                              <Value Name="InternetCustom" Value="4" />
                            </Enum>
                            <Enum EnumName="NetTCPConnection.OffloadState" UnderlyingType="System.Byte">
                              <Value Name="InHost" Value="0" />
                              <Value Name="Offloading" Value="1" />
                              <Value Name="Offloaded" Value="2" />
                              <Value Name="Uploading" Value="3" />
                            </Enum>
                          </Enums>
                        </PowerShellMetadata>
                        


                        Class ClassName="ROOT/StandardCimv2/MSFT_NetTCPConnection"
                        • il n'est pas disponible dans WMI explorer, quand je clique sur les sous branches 
                        • il n'y a pas d'instance.  La classename "NetTCPConnection" n’appariait nulle part si je fait une recherche avec. 
                        • j'ai chercher avec tcp et la on a bien des entrées qui sont présente, mai pas ou il faut d'après ce que tu ma dit 
                        • bref rien ne correspond, essaye avec tcp tu devrai en principe voir ce que j'ai

                        J'espère que sa pourra te fournir les informations voulue.

                         Le powershell  est temporaire. peux viable et surtout pas du tout portable .

                        Merci pour ton aide et ta patience ( et la sa use vraiment ce truc )

                        • Partager sur Facebook
                        • Partager sur Twitter
                          7 juillet 2020 à 9:28:29

                          Si votre script PowerShell fonctionne, c'est que vous avez le code source quelque part sur votre machine, comme dans:

                          C:\Windows\System32\WindowsPowerShell\v1.0\Modules

                          Le code source du cmdlet n'est pas forcement dans un fichier qui porte son nom. Chaque .ps1 a tendance à regrouper plusieurs cmdlet.

                          • Partager sur Facebook
                          • Partager sur Twitter
                          Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
                          Anonyme
                            7 juillet 2020 à 12:26:45

                            Comment tu veux que je trouve quelque chose qui porte un nom quelque part si je ne connais pas le nom a trouver...  en plus la dedans c'est 586 Fichiers, 138 Dossiers ..... pour 769 Mb donc bon  .

                            Bon marre, je laisse tomber les wmi ou dll une perte de temps. en plus sa fait perdre du temps aux gens qui m'on aider , ce qui m’énerve le plus.

                            je me quoi comme titre?: contourner par le powershell.

                            • Partager sur Facebook
                            • Partager sur Twitter
                              7 juillet 2020 à 15:35:17

                              >je trouve quelque chose qui porte un nom quelque part si je ne connais pas le nom a trouver

                              L'option "Find in Files" ;)

                              • Partager sur Facebook
                              • Partager sur Twitter
                              Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
                              Anonyme
                                8 juillet 2020 à 13:29:55

                                sa ma sorti ce que je t'ai donner ...
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  8 juillet 2020 à 21:46:27

                                  Ok.

                                  Je n'ai qu'un Win7 sous la main et :

                                  https://stackoverflow.com/questions/26940438/why-root-standardcimv2-in-windows-7-doesnt-work

                                  Je ne peux pas tester mes dires mais :

                                  public int tcp2()
                                  {
                                      string NamespacePath = @"\\127.0.0.1\root\StandardCimv2";
                                      ManagementScope ms = new ManagementScope(NamespacePath);
                                   
                                      ms.Connect();
                                   
                                      if (!ms.IsConnected) {
                                          MessageBox.Show("Could not connect to WMI namespace");
                                      }
                                      else
                                      {
                                          var mso = new ManagementObjectSearcher(ms.Path.ToString(),"SELECT * FROM MSFT_NetTCPConnection");
                                   
                                          var mc = mso.Get();
                                   
                                          foreach (var obj in mc)
                                          {
                                              foreach (var prop in obj.Properties)
                                              {
                                                  Console.WriteLine("Name : {0} , Value : {1}", prop.Name, prop.Value);
                                              }
                                          }
                                      }
                                  }

                                  Ca donne quoi ?

                                  P.S.: Sinon le code à base d'appel natif de Dll, il fait aussi le taf, non ?

                                  -
                                  Edité par bacelar 8 juillet 2020 à 21:47:28

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                  Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
                                  Anonyme
                                    9 juillet 2020 à 12:06:18

                                    j'ai tenter le truc dans un powershell bien plus simple. la classe n'existe pas 

                                    Get-WmiObject -Query "select * from MSFT_NetTCPConnection"
                                    Get-WmiObject : Classe non valide « MSFT_NetTCPConnection »
                                    Au caractère Ligne:1 : 1
                                    + Get-WmiObject -Query "select * from MSFT_NetTCPConnection"
                                    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                        + CategoryInfo          : InvalidType: (:) [Get-WmiObject], ManagementException
                                        + FullyQualifiedErrorId : GetWMIManagementException,Microsoft.PowerShell.Commands.GetWmiObjectCommand


                                    celle qui son accessible son dans la sortie de cette commande: 

                                     gwmi -list | Get-Member * > list.txt

                                    je serai en vacance d'ici peux les réponse risque de ce faire plus rare:)

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      9 juillet 2020 à 13:09:28

                                      MSFT_NetTCPConnection n'est pas dans le namespace par défaut, c'est donc "normal". Spécifiez le namespace de recherche.
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                      Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.

                                      Wmi mes requête ne passe pas ??

                                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                      • Editeur
                                      • Markdown