Announcement

Collapse
No announcement yet.

Freien Plattenplatz ermitteln

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Freien Plattenplatz ermitteln

    <font size=1 face='verdana'>
    <b>Hallo Ng,</b>

    gibt es eine Möglichkeit, den freien Speicherplatz einer Festplatte mit Hilfe einer DOTNET-Klasse zu ermitteln?

    <i>
    Gruß
    Thomas
    </i></font>

  • #2
    Hallo,

    diese Aufgabe wird am Besten über eine WQL-Abfrage erledigt. Die WMI-Klasse Win32_LogicalDisk stellt über 40 Eigenschaften von Laufwerken zur Verfügung, so dass sich dieser Weg universell für alles Mögliche eignet.

    <pre>

    ' 1. Assembly System.Management als Referenz zum Projekt hinzufügen
    ' 2. Imports System.Management hinzufügen

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim sWQL As String = "SELECT Caption, FreeSpace FROM Win32_LogicalDisk WHERE DeviceID = ""C:"""
    Dim aMAS As New ManagementObjectSearcher(sWQL)
    Dim aObj As ManagementObject
    For Each aObj In aMAS.Get()
    MessageBox.Show(aObj.Item("Caption") + aObj.Item("FreeSpace").ToString())
    Next
    End Sub

    </pre>

    Das dahinter liegende WMI ist ab Windows 2000 vorinstalliert, für ältere Windows-Versionen kann WMI nachinstalliert werden

    Comment


    • #3
      hat super funktioniert, danke

      Comment


      • #4
        <font face="arial" size="2"><b>Hallo NG,</b><br><br>Soweit so gut, aber wie kann ich jetzt den Speicherplatz auf einer Platte eines Netzwerkrechners ermitteln? Meine Idee wäre ein Netzlaufwerk per Quellcode zu verbinden und dann über den Laufwerksbuchstaben mit o. g. Skript den Speicherplatz ermitteln. Wie kann ich aber ein Netzlaufwerk per VB.NET einrichten?
        <br><br>
        <i>Gruß<br>Thomas Hempeler</i>
        </font&gt

        Comment


        • #5
          Hallo,

          &gt;..auf einer Platte eines Netzwerkrechners ..

          genau auf dem gleichen Weg, nur mit dem Unterschied, dass zuerst beim Verbindungsaufbau zu WMI der Rechnername übergeben wird. Bei dem folgenden Beispiel verbirgt sich hinter dem UNC-Namen <i>P4W2K</i> ein Windows 2000 Server. Als WMI-Namespace wird <i>root\cimv2</i> definiert, da sich die benötigte WMI-Klasse in diesem Namespace befindet.

          <pre>
          ' 1. Assembly System.Management als Referenz zum Projekt hinzufügen
          ' 2. Imports System.Management hinzufügen
          Dim aCO As New ConnectionOptions
          aCO.Username = "Administrator"
          aCO.Password = "sehrgeheim"
          Dim aMS As New ManagementScope("\\P4W2K\root\cimv2", aCO)
          Dim aOQ As New ObjectQuery("SELECT Caption, FreeSpace FROM Win32_LogicalDisk WHERE DeviceID = ""C:""")
          Dim aMAS As New ManagementObjectSearcher(aMS, aOQ)
          Dim aObj As ManagementObject
          For Each aObj In aMAS.Get()
          MessageBox.Show(aObj.Item("Caption") + aObj.Item("FreeSpace").ToString())
          Next
          </pre>

          &gt;Wie kann ich aber ein Netzlaufwerk per VB.NET einrichten?

          Die Krücke eines Netzlaufwerk-Buchstabens stammt noch aus den Uralt-Zeiten von Novell Netware 3.11 und Windows 3.x. Ab Win32 (und erst recht in .NET) greift man direkt über den UNC-Namen auf eine Netzwerk-Ressource zu

          Comment


          • #6
            Hallo.

            Wenn ich diesen Code ausführen möchte bekomme ich nach dem Button1_Click nur die Meldung:

            Eine nicht behandelte Ausnahme des Typs 'System.Security.SecurityException' ist in system.windows.forms.dll aufgetreten.

            Welch Einstellungen müssen da noch geändert werden.

            Mfg

            Sven Nebelun

            Comment


            • #7
              Hallo,

              ist der abgefragte (externe) Rechner auch im gleichen Active Directory

              Comment


              • #8
                Hallo.

                Ja, ist er.

                Mfg
                S. Nebelun

                Comment


                • #9
                  Hallo,

                  wenn die <i>ConnectionOptions</i>-Instanz mit Username und Password richtig gefüllt wird, sollte der Zugriff auf einen im gleichen Active Directory integrierten anderen Rechner erfolgreich sein, solange die Username-/Password-Kombination im Active Directory auch die Zugriffsrechte dafür hat

                  Comment


                  • #10
                    hi

                    bei:

                    Dim aMS As New ManagementScope("\\P4W2K\root\cimv2", aCO)

                    einfach aCO nicht übergeben.
                    also auch die dimensionierung weglassen. und es funktioniert. (ADS-basierte Freigabe)

                    ren

                    Comment

                    Working...
                    X