Frage

Ich möchte eine kleine Anwendung erstellen, die Systeminformationen sammeln kann (Win32_blablabla) unter Verwendung von WinRM zu WMI gegenüber. Wie kann ich das tun von C #?

Das Hauptziel ist WS-Man (WinRM) im Gegensatz zu DCOM (WMI) zu verwenden.

War es hilfreich?

Lösung

Ich denke, der einfachste Weg, WSMAN Automatisierung zu verwenden wäre. Referenz wsmauto.dll von windwos \ system32 in Ihrem Projekt:

alt text

dann, Code unten sollte für Sie arbeiten. API-Beschreibung ist hier: 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);
    }
}

hoffe, das hilft, Grüße

Andere Tipps

Ich habe einen Artikel bekam, die eine einfache Art und Weise beschreibt von .NET unter http://getthinktank.com/2015/06/22/naos-winrm-windows-remote-management-through-net/ .

Der Code ist in einer einzigen Datei, wenn Sie es möchten, kopieren Sie einfach und es ist auch ein NuGet-Paket, das den Verweis auf System.Management.Automation enthält.

Es Auto verwaltet vertrauenswürdige Hosts können Skriptblocks laufen, und auch Dateien versenden (die nicht wirklich unterstützt wird, aber ich erstellt eine Arbeit um). Die Renditen sind immer die rohen Objekte von Powershell.

// this is the entrypoint to interact with the system (interfaced for testing).
var machineManager = new MachineManager(
    "10.0.0.1",
    "Administrator",
    MachineManager.ConvertStringToSecureString("xxx"),
    true);

// will perform a user initiated reboot.
machineManager.Reboot();

// can run random script blocks WITH parameters.
var fileObjects = machineManager.RunScript(
    "{ param($path) ls $path }",
    new[] { @"C:\PathToList" });

// can transfer files to the remote server (over WinRM's protocol!).
var localFilePath = @"D:\Temp\BigFileLocal.nupkg";
var fileBytes = File.ReadAllBytes(localFilePath);
var remoteFilePath = @"D:\Temp\BigFileRemote.nupkg";
machineManager.SendFile(remoteFilePath, fileBytes);

Hope, das hilft, ich habe schon eine Weile mit meiner automatisierten Installation mit diesem. Lassen Sie bitte Anmerkungen, wenn Sie Fragen zu finden.

würde Ich mag, dass dies zeigt Fehler eines Interop beachten, die standardmäßig in Visual Studio 2010
c.f. http://blogs.msdn.com/b/mshneer/archive/2009/12/07/interop-type-xxx-cannot-be-embedded-use-the-applicable-interface-instead aspx

Es erscheint zwei Möglichkeiten, um diese zu lösen. Das erste ist in dem Artikel dokumentiert oben aufgeführten und scheint der richtige Weg, um das Problem zu behandeln. Die entsprechenden Änderungen für dieses Beispiel ist:

WSMan wsManObject = new WSMan (); Dies ist anstelle von IWSMan wsman = new WSManClass (); die den Fehler ausgelöst wird.

Die zweite Auflösung ist auf die VS2010- gehen> Lösung Explorer-> Pflegemittel-> Project-> Verweise und wählen Sie WSManAutomation. Rechtsklick auf oder drücken Sie Alt-Geben Sie die Eigenschaften zuzugreifen. Ändern Sie den Wert der „Embed Interop-Typen“ Eigenschaft des wsmauto Referenz.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top