Tôi đang cố truy vấn tên tất cả các lớp WMI trong không gian tên root \ CIMV2. Có cách nào để sử dụng lệnh powershell để lấy thông tin này trong C#?Lệnh Powershell trong C#
Trả lời
Dọc theo đường của cách tiếp cận của 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);
}
}
}
}
Tôi không chắc chắn lý do bạn nhắc đến PowerShell; bạn có thể làm điều này trong C# và WMI thuần túy (không gian tên System.Management
).
Để có được một danh sách tất cả các lớp WMI, sử dụng truy vấn SELECT * FROM Meta_Class
:
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);
}
Bạn có thể muốn chỉ cần sử dụng namespace System.Management như Helen đã trả lời, nhưng bạn cũng có thể lưu trữ PowerShell trong vòng của bạn ứng dụng. Xem http://www.codeproject.com/KB/cs/HowToRunPowerShell.aspx
Cá nhân tôi sẽ đi theo phương pháp của Helen và loại bỏ việc phụ thuộc vào PowerShell. Điều đó nói rằng, đây là cách bạn sẽ mã này trong C# để sử dụng PowerShell để lấy các thông tin mong muốn:
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);
}
}
}
}
}
Chỉ cần lưu ý rằng có một công cụ có sẵn mà cho phép bạn tạo, chạy và lưu các tập lệnh WMI được viết bằng PowerShell, công cụ PowerShell Scriptomatic, có sẵn để tải xuống từ trang web Microsoft TechNet.
Sử dụng công cụ này, bạn có thể khám phá tất cả các lớp WMI bên trong thư mục gốc \ CIMV2 hoặc bất kỳ vùng tên WMI nào khác.
- 1. lệnh Run PowerShell trong C#
- 2. Gọi lệnh ghép ngắn powershell từ C#
- 3. lệnh Chain trong dòng lệnh PowerShell
- 4. PHP Powershell lệnh
- 5. Nhận tên tập lệnh trong Powershell
- 6. PowerShell dòng 2.0 lệnh chuyển hướng
- 7. Xử lý lệnh Powershell (Chuyển các biến)
- 8. Powershell tương đương với lệnh Chọn LINQ?
- 9. Gọi tập lệnh Powershell từ Java
- 10. Calling PowerShell Từ C#
- 11. Chạy tập lệnh bash từ Windows PowerShell
- 12. powershell: tập lệnh có biến args
- 13. Chạy tệp tập lệnh SQL từ PowerShell
- 14. PowerShell: cách đầu ra lệnh grep?
- 15. Cách khởi chạy tập lệnh PowerShell từ dòng lệnh OS?
- 16. Làm cách nào để truyền chuỗi thô tới các lệnh thông qua dòng lệnh trong PowerShell?
- 17. Chuyển đổi lệnh xargs Bash thành PowerShell?
- 18. PowerShell vượt qua đối số dòng lệnh
- 19. Lệnh ghép ngắn PowerShell là gì?
- 20. Chạy tập lệnh Powershell sống trong điều khiển nguồn TFS
- 21. Cách kết thúc lệnh nhiều dòng trong PowerShell
- 22. Kiểm tra quyền quản trị viên trong tập lệnh PowerShell?
- 23. Tương đương với lệnh thời gian Unix trong PowerShell?
- 24. Cách gọi hàm trong câu lệnh Powershell Write-Host
- 25. Truy cập Powershell qua Visual C++ (API)
- 26. Cách đọc mã thoát PowerShell qua C#
- 27. Làm thế nào để thêm Powershell snapin trong C#
- 28. Gọi nhiều lệnh từ powershell, ví dụ: psftp
- 29. Thực thi PowerShell Script từ C# với các đối số dòng lệnh
- 30. Cách chạy PowerShell trong CMD
Điều này hoạt động hoàn hảo. Cảm ơn đã giúp đỡ. – Sanch01R