PDA

Vollständige Version anzeigen : Daten techn. Festplatte auslesen?


Dil
01.09.2017, 20:15
Hallo,

ich habe mir mit Excell (Office 15) eine Anwendung für Backup's geschrieben, die mir anzeigt, auf welcher Festplatte welches Backup ist und wie viel Platz noch auf welcher BackupPlatte ist. Das Auslesen der BackupPlatten geschied mit einem Makro, siehe Auszug unten. Das funktionierte bisher auch einwandfrei.

Makroauszug

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

Sub LwU()
Dim FSO As Object
Dim drv As Object

Set FSO = CreateObject("Scripting.FileSystemObject")
Set drv = FSO.GetDrive(FSO.GetDriveName(FSO.GetAbsolutePathName("U:")))

Range("P3") = drv.freeSpace / 1024000000
Range("P4") = drv.TotalSize / 1024000000
Range("P2") = Range("P4") - Range("P3")

End Sub


Sub LwV()
Dim FSO As Object
Dim drv As Object

Set FSO = CreateObject("Scripting.FileSystemObject")
Set drv = FSO.GetDrive(FSO.GetDriveName(FSO.GetAbsolutePathName("V:")))

Range("P10") = drv.freeSpace / 1024000000
Range("P11") = drv.TotalSize / 1024000000
Range("P9") = Range("P11") - Range("P10")

End Sub


Sub LwW()
Dim FSO As Object
Dim drv As Object

Set FSO = CreateObject("Scripting.FileSystemObject")
Set drv = FSO.GetDrive(FSO.GetDriveName(FSO.GetAbsolutePathName("W:")))

Range("P17") = drv.freeSpace / 1024000000
Range("P18") = drv.TotalSize / 1024000000
Range("P16") = Range("P18") - Range("P17")

End Sub

Laufwerk W: funktioniert noch einwandfrei.


Bisher hatte ich 3 Backupplatten und zwar 2x je 1TB (U:+V) und eine 2TB (W).Die je 1TB Platten U: und V: habe ich jetzt durch je 8TB ersetzt. Seit dem erkennt Sub LwU(), Zeile: Range("P4")= drv.TotalSize /1024000000
und Sub LwV(), Zeile: Range("P11")= drv.TotalSize / 1024000000

nicht mehr die Größe der Festplatte. Sie wird immer mit "0" angezeigt.

Hat jemand vieleich ne Idee warum? :sos:

Gruß Dil

Case_Germany
02.09.2017, 09:08
Hallo, :)

ich glaube die Grenze von FSO liegt bei 4 TB. :rolleyes:

Mit WMI (Windows Management Instrumentation) bzw. dem Commandline Control WMIC kannst Du m. M. n. auch grössere Festplatten auslesen - sofern das im Firmennetzwerk nicht unterbunden ist. :mrcool:

Teste das mal. ;)

Folgendes musst Du nur etwas anpassen:

WMIC... (http://vbanet.blogspot.de/search/label/WMI)

Z. B. mit...

wmic /output:clipboard logicaldisk where ""DeviceID='E:'"" get FreeSpace

Servus
Case

Dil
02.09.2017, 13:46
Hallo Case_Germany,
vielen Dank für Deine Antwort.
ich glaube die Grenze von FSO liegt bei 4 TB.

Dazu: Die 8TB-Platten sind noch zu 90% leer, also "FreeSpace" ist weit über 7TB und wird ja auch in meiner jetzigen Form richtig angezeigt, während die Größe der Festplatten (Kapazität) mit "0" angezeigt wird.

Gibt es noch eine andere Möglichkeit?
bin für Tipp dankbar.
Gruß Dil

Nepumuk
02.09.2017, 15:09
Hallo Dil,

teste mal:

<div style="background-color:#FFFFFF; border-width:2px; border-style: groove; border-color:#ff9966; padding:4px;"><nobr><span style="font-family:Courier New,Arial; font-size:9pt ;" ><span style="color:#000080"; >Option</span> <span style="color:#000080"; >Explicit</span><br /><br /><b><span style="color:#000080"; >Public</span> <span style="color:#000080"; >Sub</span> Drives()</b><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >Dim</span> objDrives <span style="color:#000080"; >As</span> Object, objDrive <span style="color:#000080"; >As</span> <span style="color:#000080"; >Object</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >Set</span> objDrives = GetObject(<span style="color:#800000"; >"winmgmts:\.rootcimv2"</span>).ExecQuery(<span style="color:#800000"; >"SELECT * FROM Win32_DiskDrive"</span>)<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >For</span> Each objDrive In objDrives<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Debug.Print objDrive.Size<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >Next</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >Set</span> objDrive = <span style="color:#000080"; >Nothing</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >Set</span> objDrives = <span style="color:#000080"; >Nothing</span><br /><b><span style="color:#000080"; >End</span> <span style="color:#000080"; >Sub</span></b><br /></span></nobr></div>

Nepumuk
02.09.2017, 16:10
Nochmal Hallo,

eine andere Möglichkeit:

<div style="background-color:#FFFFFF; border-width:2px; border-style: groove; border-color:#ff9966; padding:4px;"><nobr><span style="font-family:Courier New,Arial; font-size:9pt ;" ><span style="color:#000080"; >Option</span> <span style="color:#000080"; >Explicit</span><br /><br /><span style="color:#000080"; >Private</span> <span style="color:#000080"; >Declare</span> PtrSafe <span style="color:#000080"; >Function</span> GetDiskFreeSpaceA <span style="color:#000080"; >Lib</span> <span style="color:#800000"; >"kernel32.dll"</span> ( _<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >ByVal</span> lpRootPathName <span style="color:#000080"; >As</span> String, _<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >ByRef</span> lpSectorsPerCluster <span style="color:#000080"; >As</span> Long, _<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >ByRef</span> lpBytesPerSector <span style="color:#000080"; >As</span> Long, _<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >ByRef</span> lpNumberOfFreeClusters <span style="color:#000080"; >As</span> Long, _<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >ByRef</span> lpTotalNumberOfClusters <span style="color:#000080"; >As</span> <span style="color:#000080"; >Long</span>) <span style="color:#000080"; >As</span> <span style="color:#000080"; >Long</span><br /><br /><b><span style="color:#000080"; >Public</span> <span style="color:#000080"; >Sub</span> Beispiel()</b><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >Dim</span> Sectors <span style="color:#000080"; >As</span> Long, Bytes <span style="color:#000080"; >As</span> Long, FreeCluster <span style="color:#000080"; >As</span> Long, TotalCluster <span style="color:#000080"; >As</span> <span style="color:#000080"; >Long</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >Dim</span> dblTotalSpace <span style="color:#000080"; >As</span> Double, dblFreeSpace <span style="color:#000080"; >As</span> <span style="color:#000080"; >Double</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >Call</span> GetDiskFreeSpaceA(<span style="color:#800000"; >"C:"</span>, Sectors, Bytes, FreeCluster, TotalCluster)<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;dblTotalSpace = (CDbl(TotalCluster) * CDbl(Sectors) * CDbl(Bytes)) / 1024 ^ 3<br />&nbsp;&nbsp;&nbsp;&nbsp;dblFreeSpace = CDbl(FreeCluster) * CDbl(Sectors) * CDbl(Bytes) / 1024 ^ 3<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;Tabelle1.Cells(2, 5).Value = dblTotalSpace - dblFreeSpace<br />&nbsp;&nbsp;&nbsp;&nbsp;Tabelle1.Cells(4, 5).Value = dblFreeSpace<br />&nbsp;&nbsp;&nbsp;&nbsp;<br /><b><span style="color:#000080"; >End</span> <span style="color:#000080"; >Sub</span></b><br /></span></nobr></div>

Dil
03.09.2017, 13:50
@Nepumuk
Vielen Dank! Ich teste! :top:

haklesoft
04.09.2017, 10:06
Da die Forensoftware mal wieder zugeschlagen hat besser so: Set objDrives = GetObject("winmgmts:\\.\root\cimv2").ExecQuery("SELECT * FROM Win32_DiskDrive")

Case_Germany
04.09.2017, 10:50
Hallo, :)

Gibt es noch eine andere Möglichkeit?
bin für Tipp dankbar.
Gruß Dil

Es würde sich noch die PowerShell anbieten. ;)

In der Beispielgrafik siehst Du als erstes die Ausgabe der Laufwerke noch mit DVD-Laufwerk.

Dann ohne, aber etwas aufgeräumter. :p

Es lann auch in eine Datei geschrieben werden. Entweder überschreiben (>), oder anhängen (>>).

Es besthet weiterhin die Möglichkeit das in eine Exceldatei zu schreiben - in eine neue, oder in eine bestehende. :cool:

Servus
Case

Dil
14.11.2017, 19:44
Hallo
vielen Dank für Eure Vorschläge.
Ich habe alle durch probiert, ohne Erfolg.
Die Programmteile haben alle so gut funktioniert, wie das von mir geschriebene Sub-Modul.
Leider scheiterten alle an der 8TB bzw 4TB Grenze.
Die Größe der Festplatten wächst wohl schneller als die Möglichkeiten zum Auslesen der technischen Daten.

Ich werde das Ganze erst mal zur Seite legen, bis ich genügend Zeit habe, das Ganze noch mal ganz neu anzugehen.

Gruß Dil.