73978
Goto Top

Festplattenkapazität in MB mittels Batch- oder VB-Datei auslesen

Hallo zusammen,
ich bin grad dabei eine Recovery-DVD über WinPE 2.0 SP1 zu bearbeiten.
Diese DVD bringt einen beliebigen Server wieder in seinen Auslieferungszustand zurück.

Dabei kann man angeben wie groß die Partition der Systemplatte werden soll, auf der später dann das Recovery-Image aufgespielt wird.
Im Moment ist es aber noch so, dass man da eingeben kann was man will, also auch mehr als die HDD überhaupt hergibt...

Daher bräuchte ich ne Möglichkeit per Batch-Datei die Größe der jeweils eingebauten HDD in Megabyte auszulesen,
damit ich den Wert dann als Maximalwert speichern kann. Im MB muss der Wert sein, da "diskpart" die Partitionsgröße auch in MB haben will.
Über diskpart selbst kann ich ja leider nur die Größe der HDD in GB auslesen und nicht in MB...

Ich hoff mir kann da jemand helfen.

Danke schonmal und Gruß
Andi

/EDIT: Falls mir dazu jemand ein VB Skript hätte würd mir das auch reichen. Skripting ist eingeschaltet im PE face-smile

Content-ID: 106126

Url: https://administrator.de/contentid/106126

Ausgedruckt am: 26.11.2024 um 13:11 Uhr

73978
73978 15.01.2009 um 13:34:25 Uhr
Goto Top
Hallo zusammen,

nun hab ich von nem Kollegen grad ein VB Script bekommen in dem genau das passiert was ich will.
Allerdings liest dieses Skript mir erstens ALLE HDDs aus und nicht nur die erste und zweitens ist die Größe auf zig Kommastellen angegeben.

Wie schaff ichs dass mir nur die erste HDD angezeigt wird und dass er nach dem Komma einfach abbricht?
/EDIT: Und wie schreib ich den Wert dann anschlißend in eine txt-Datei?

Hier der Code:

strServer = "."

Set objWMI = GetObject("winmgmts://" & strServer & "/root\cimv2")
Set objInstances = objWMI.InstancesOf("Win32_DiskDrive")

On Error Resume Next
For Each objInstance in objInstances
With objInstance
WScript.Echo .size/1048576
End With
On Error Goto 0
Next


Sorry für die ganzen Fragen aber mit VB kenn ich mich bisher leider überhaupt nicht aus...

Gruß Andi
73978
73978 15.01.2009 um 14:36:01 Uhr
Goto Top
Okay ich habs nun so einigermaßen hinbekommen wie ich das wollte.
Er liest nun alle HDDs aus und schreibt diese in ne Textdatei.

Mit der cmd brauch ich ja dann nur einfach die erste Zeile auslesen und gut is face-smile

Hier der VB-Code:

strServer = "."

Set objWMI = GetObject("winmgmts://" & strServer & "/root\cimv2")
Set objInstances = objWMI.InstancesOf("Win32_DiskDrive")

Const ForReading = 1, ForWriting = 2, ForAppending = 8
Const CCreate = True
Set fso = CreateObject("Scripting.FileSystemObject")
Set datei = fso.OpenTextFile("hddsize.txt", ForWriting, CCreate)

On Error Resume Next
For Each objInstance in objInstances
With objInstance
datei.write round(.size/1048576)-2 & " " & chr(13) & chr(10)
End With
On Error Goto 0
Next

datei.Close


Vielleicht kann das der/die ein oder andere von euch ja mal brauchen.

Grüße
Andi
bastla
bastla 15.01.2009 um 18:57:23 Uhr
Goto Top
Hallo ade2k1 und willkommen im Forum!

Danke für das Script. face-smile

Nur als Ansatz einer Näherungslösung (in CMD kann nur mit ganzen Zahlen gerechnet werden) zum Ermitteln der Größe der ersten Festplatte als Batch (VBS ist für diesen Zweck unbestritten besser geeignet):
set S=
for /f "skip=1" %%i in ('wmic DiskDrive Get Size') do if not defined S set S=%%i  
set /a SizeMB=%S:~,-4%/105
echo %SizeMB%
Da die heutigen Festplattengrößen die auf 32 Bit begrenzte "Genauigkeit" (O-Text der Fehlermeldung bei Verwendung von Zahlen > 4294967295 in einer "set /a"-Anweisung) der CMD-Shell um ein Vielfaches überfordern, werden einfach die letzten 4 Stellen der ausgelesenen Byte-Anzahl weg gelassen (entspricht einer Division durch 10000 und Abrundung des Ergebnisses auf Ganze).

Danach wird durch 105 (= aufgerundet 1024 * 1024 / 10000) dividiert - so ist sicher gestellt, dass das Ergebnis in MB (um die Rundungsdifferenzen) zu niedrig angegeben wird, was im Hinblick auf die Zielsetzung "Vorgabe eines nicht zu hohen Wertes für die Partitionierung" zwar einen gewissen Sicherheitspolster darstellt, es allerdings verhindert, dass der gesamte Speicherplatz für die Partition verwendet werden kann ...

Grüße
bastla