Estoy intentando consultar los nombres de todas las clases WMI dentro del espacio de nombres root \ CIMV2. ¿Hay alguna manera de usar un comando powershell para recuperar esta información en C#?Comando Powershell en C#
Respuesta
A lo largo de las líneas de acercamiento de Keith
using System;
using System.Management.Automation;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
var script = @"
Get-WmiObject -list -namespace root\cimv2 | Foreach {$_.Name}
";
var powerShell = PowerShell.Create();
powerShell.AddScript(script);
foreach (var className in powerShell.Invoke())
{
Console.WriteLine(className);
}
}
}
}
No estoy seguro de por qué mencionó PowerShell; puede hacerlo en C# puro y WMI (el espacio de nombre System.Management
, eso es).
Para obtener una lista de todas las clases WMI, utilice el SELECT * FROM Meta_Class
consulta:
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);
}
Usted probablemente querrá sólo tiene que utilizar el espacio de nombres como System.Management respondió Helen, pero también se puede alojar dentro de su PowerShell solicitud. Ver http://www.codeproject.com/KB/cs/HowToRunPowerShell.aspx
Personalmente me gustaría ir con el enfoque de Helen y eliminar tomar una dependencia de PowerShell. Dicho esto, aquí es cómo se codificar esto en C# para utilizar PowerShell para recuperar la información deseada:
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);
}
}
}
}
}
para notar que hay una herramienta disponible que le permite crear, ejecutar y guardar scripts WMI escritos en PowerShell, la herramienta PowerShell Scriptomatic, disponible para descargar desde el sitio Microsoft TechNet.
Usando esta herramienta, puede explorar todas las clases WMI dentro de la raíz \ CIMV2 o cualquier otro espacio de nombres WMI.
- 1. Powershell Comando: rm -rf
- 2. PHP Powershell comando
- 3. Powershell Comando Procesando (Pasando en Variables)
- 4. Equivalente al comando * Nix 'which' en Powershell?
- 5. equivalente Powershell del comando Select de LINQ?
- 6. Ejecutando un comando almacenado en una variable de Powershell
- 7. Obteniendo los argumentos del último comando invocado en powershell?
- 8. PowerShell: cómo grep salida de comando?
- 9. Convierte el comando xargs Bash a PowerShell?
- 10. argumentos de línea de comando pase powershell
- 11. powershell enviando parámetros múltiples a un comando externo
- 12. Cómo confirmar la finalización del comando anterior en powershell
- 13. ¿Equivalente al comando 'más' o 'menos' en Powershell?
- 14. Powershell: dos puntos en los parámetros del comando
- 15. Implementar PowerShell PSProvider * en * PowerShell
- 16. Equivalente al comando C# 'as' en C++?
- 17. Carpeta Ruta del archivo Powershell En Powershell
- 18. equivalente de PowerShell del comando 'tipo' de BASH (etc.)?
- 19. Ejecutar el script de PowerShell desde C# con los argumentos de la línea de comando
- 20. ¿Cómo usar una variable de PowerShell como parámetro de comando?
- 21. ¿Cómo obtener PowerShell para mantener abierta una ventana de comando?
- 22. Cómo agregar Powershell SnapIn en C#
- 23. ¿Cuál es el equivalente de PowerShell a este comando Bash?
- 24. comando script/Powershell para restablecer un adaptador de red
- 25. PowerShell: error al ejecutar el comando usando Invoke-Command?
- 26. PowerShell: Ejecute el comando desde el directorio de scripts
- 27. ¿Cómo escapar de los argumentos de línea de comando en Powershell?
- 28. Genere dinámicamente el comando de la línea de comando, luego invoque usando powershell
- 29. ¿Por qué no puedo ejecutar un comando con argumentos de una cadena en powershell?
- 30. Cómo llamar cmd.exe de PowerShell con un espacio en el nombre del directorio especificado del Comando
Esto funciona perfectamente. Gracias por la ayuda. – Sanch01R