10
votes

Commande PowerShell en C #

J'essaie d'interroger les noms toutes les classes WMI dans l'espace de noms root \ CIMV2. Existe-t-il un moyen d'utiliser une commande PowerShell pour récupérer ces informations en C #?


0 commentaires

5 Réponses :


7
votes

Je ne sais pas pourquoi vous avez mentionné PowerShell; Vous pouvez le faire dans Pure C # et WMI (le System.Management. Code> Espace de noms, c'est-à-dire).

Pour obtenir une liste de toutes les classes WMI, utilisez le Sélectionnez * à partir de Meta_Class Code> Query: P>

using System.Management;
...

try
{
    EnumerationOptions options = new EnumerationOptions();
    options.ReturnImmediately = true;
    options.Rewindable = false;

    ManagementObjectSearcher searcher =
        new ManagementObjectSearcher("root\\cimv2", "SELECT * FROM Meta_Class", options);

    ManagementObjectCollection classes = searcher.Get();

    foreach (ManagementClass cls in classes)
    {
        Console.WriteLine(cls.ClassPath.ClassName);
    }
}
catch (ManagementException exception)
{
    Console.WriteLine(exception.Message);
}


0 commentaires

3
votes

Vous voudrez probablement simplement utiliser l'espace de noms System.Management comme Helen répondit, mais vous pouvez également accueillir PowerShell dans votre demande. Voir http://www.codeproject.com/kb/cs/howtorunpowershell.aspx


0 commentaires

4
votes

Personnellement, j'irais avec l'approche de Helen et éliminerais de prendre une dépendance sur PowerShell. Cela dit, voici comment vous allez coder cela en C # pour utiliser PowerShell pour récupérer les informations souhaitées:

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Management.Automation;

namespace RunspaceInvokeExp
{
    class Program
    {
        static void Main()
        {
            using (var invoker = new RunspaceInvoke())
            {
                string command = @"Get-WmiObject -list -namespace root\cimv2" +
                                  " | Foreach {$_.Name}";
                Collection<PSObject> results = invoker.Invoke(command);
                var classNames = results.Select(ps => (string)ps.BaseObject);
                foreach (var name in classNames)
                {
                    Console.WriteLine(name);
                }
            }
        }
    }
}


0 commentaires

8
votes

Le long des lignes de l'approche de Keith xxx


0 commentaires

4
votes

Juste pour noter qu'il existe un outil disponible qui vous permet de créer, d'exécuter et de sauvegarder des scripts WMI écrits dans PowerShell, le PowerShell Scriptomaticy Outil, disponible au téléchargement à partir du Microsoft Techet site.

Utilisation de cet outil, vous pouvez explorer toutes les classes WMI dans la racine \ CIMV2 ou tout autre espace de noms WMI.

 image de l'outil scriptomatic powershell


0 commentaires