我想创建一个小型应用程序,该应用程序可以使用WinRM而不是WMI来收集系统信息(Win32_blablabla)。我如何从C#中做到这一点?
主要目标是使用WS-Man(WinRm)而不是DCOM(WMI)。
最佳答案
我猜最简单的方法是使用WSMAN自动化。从项目中的windwos\system32引用wsmauto.dll:
然后,下面的代码将为您工作。 API说明在这里:msdn: WinRM C++ API
IWSMan wsman = new WSManClass();
IWSManConnectionOptions options = (IWSManConnectionOptions)wsman.CreateConnectionOptions();
if (options != null)
{
try
{
// options.UserName = ???;
// options.Password = ???;
IWSManSession session = (IWSManSession)wsman.CreateSession("http://<your_server_name>/wsman", 0, options);
if (session != null)
{
try
{
// retrieve the Win32_Service xml representation
var reply = session.Get("http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_Service?Name=winmgmt", 0);
// parse xml and dump service name and description
var doc = new XmlDocument();
doc.LoadXml(reply);
foreach (var elementName in new string[] { "p:Caption", "p:Description" })
{
var node = doc.GetElementsByTagName(elementName)[0];
if (node != null) Console.WriteLine(node.InnerText);
}
}
finally
{
Marshal.ReleaseComObject(session);
}
}
}
finally
{
Marshal.ReleaseComObject(options);
}
}
希望这会有所帮助,问候