Avatar billede ahrensberg Nybegynder
18. februar 2008 - 10:28 Der er 1 kommentar og
1 løsning

WMI kald fra C# til anden maskine

Hej alle

Jeg skal hive data fra en anden maskine, men uanset hvad jeg gør får jeg info på localhost. Er der nogen der kan fortælle mig hvad der er forkert i nedenstående, siden jeg ikke får data på "TestMaskine" (men på localhost).

- - - - - - - - - - - -

    public string Testing()
    {
        long mb = 1024 * 1024; //megabyte

        //Connection credentials to the remote computer - not needed if the logged in account has access
        ConnectionOptions oConn = new ConnectionOptions();

        //oConn.Username = "username";
        //oConn.Password = "password";

        System.Management.ManagementScope oMs = new System.Management.ManagementScope(@"\\" + "TestMaskine", oConn);

        //get fixed disk stats
        System.Management.ObjectQuery oQuery = new System.Management.ObjectQuery("SELECT FreeSpace, Size, Name FROM Win32_LogicalDisk WHERE DriveType = 3");
        ManagementObjectSearcher oSearcher = new ManagementObjectSearcher(oMs, oQuery);
        ManagementObjectCollection oReturnCollection = oSearcher.Get();

        //variables
        string name = "";
        double fs = 0;
        double us = 0;
        double tot = 0;
        double up = 0;
        double fp = 0;

        //select objects
        foreach (ManagementObject oReturn in oReturnCollection)
        {
            // Disk name
            name = oReturn["Name"].ToString();

            //Free space in MB
            fs = Convert.ToInt64(oReturn["FreeSpace"]) / mb;

            //Used space in MB
            us = (Convert.ToInt64(oReturn["Size"]) - Convert.ToInt64(oReturn["FreeSpace"])) / mb;

            //Total space in MB
            tot = Convert.ToInt64(oReturn["Size"]) / mb;

            //used percentage
            up = us / tot * 100;

            //free percentage
            fp = fs / tot * 100;
        }

        string extraInfo = ". Should be around 48 GB (not 8,26 GB, that's localhost).";
        switch (1)
        {
            case 1:
                return "Free space in GB: " + (fs / 1024) + extraInfo;
                break;

            case 2:
                return "Used space in GB: " + (us / 1024) + extraInfo;
                break;

            case 3:
                return "Total space in MB: " + tot.ToString() + extraInfo;
                break;

            case 4:
                return "Used percentage: " + up.ToString() + extraInfo;
                break;

            default:
                return "Free percentage: " + fp.ToString() + extraInfo;
                break;

        }
    }
Avatar billede ahrensberg Nybegynder
18. februar 2008 - 10:55 #1
Fundet frem til at der umiddelbart til remote stien skal tilføje "\\root\\civm2". Herefter fik jeg dog en unhandlet exeption som jeg fandt frem til var på linien:

    ManagementObjectCollection oReturnCollection = oSearcher.Get();

Ved try/catch får jeg så denne fejlmeddelelse:

System.Management.ManagementException: Invalid namespace at System.Management.ManagementException.ThrowWithExtendedInfo(ManagementStatus errorCode) at System.Management.ManagementScope.InitializeGuts(Object o) at System.Management.ManagementScope.Initialize() at System.Management.ManagementObjectSearcher.Initialize() at System.Management.ManagementObjectSearcher.Get() at WMI_call.Testing() in c:\Documents and Settings\Xxxx\My Documents\Visual Studio 2005\WebSites\Test\App_Code\WMI_call.cs:line 49

Nogen der har en idé til det?
Avatar billede ahrensberg Nybegynder
18. februar 2008 - 12:06 #2
Fandt et andet eksempel og fik dette til at fungere:

    public string FreeSpace(string HostOrIP)
    {
        ConnectionOptions myConnectionOptions = new ConnectionOptions();
        myConnectionOptions.Impersonation = ImpersonationLevel.Impersonate;

        ManagementScope objwmiservice;
        ManagementObjectSearcher myObjectSearcher;
        ManagementObjectCollection myCollection;

        try
        {
            objwmiservice = new ManagementScope((@"\\" + HostOrIP + "\\root\\cimv2"), myConnectionOptions);
            objwmiservice.Connect();
            myObjectSearcher = new ManagementObjectSearcher(objwmiservice.Path.ToString(), "SELECT FreeSpace, Size, Name FROM Win32_LogicalDisk WHERE DriveType = 3");
            myObjectSearcher.Options.Timeout = new TimeSpan(0, 0, 0, 0, 7000);
            myCollection = myObjectSearcher.Get();

            foreach (ManagementObject myObject in myCollection)
            {
                if (myObject.GetPropertyValue("FreeSpace") != null)
                {
                    long Userx = Convert.ToInt64(myObject.GetPropertyValue("FreeSpace"));
                    return "FreeSpace: " + (Userx / (1024*1024*1024)) + " GB";
                }
            }
            return "Nobody";
        }
        catch (Exception e)
        {
            return e.ToString();
        }
    }
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester