smhamk1985
Goto Top

Kix - Byte in Megabyte umwandeln

Hallo,

ich lese mit hilfe von Kix den Freien Festplattenplatz aus. Es wird in Byte wiedergegeben. Gäbe es vielleicht die möglichkeit die in Megabyte umwandelns zulassen?

Hier das Code:
$strComputer = "."
$objWMIService = GetObject("winmgmts:\\"+ $strComputer + "\root\cimv2")
$colItems = $objWMIService.ExecQuery("Select * from Win32_LogicalDisk")


For Each $objItem in $colItems

? "Laufwerk: " + $objItem.Caption
? "Dateisystem: " + $objItem.FileSystem
? "HDD Freier Specher: " + $objItem.FreeSpace + " Byte"
?;;
Next
? "Size: " + $objItem.Size
? "Volume Serial Number: " + $objItem.VolumeSerialNumber

Danke für eure Hilfe

MfG

Content-Key: 34407

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

Printed on: April 25, 2024 at 07:04 o'clock

Member: Dani
Dani Jun 19, 2006 at 07:04:19 (UTC)
Goto Top
Hi,
das musst du selber machen. einfach 2x durch 1024 teilen. So habe ich das mal gelöst. Anders kenn ich das von Kix nix.


Gruß
Dani
Member: SMHAMK1985
SMHAMK1985 Jun 19, 2006 at 07:14:17 (UTC)
Goto Top
Hallo,

wie meinst du es einfach 2x durch 1024? Also rein rechnerisch würde ich es hinbekommen face-smile, aber wie müsste ich es ins code einbringen, damit er es in megabyte anzeigt?

Danke

MfG
Member: Leibeigener
Leibeigener Jun 19, 2006 at 07:16:28 (UTC)
Goto Top
genau, geteielt durch 1024².

als beispiel: 31457280 byte : 1024 = 30720 kbyte : 1024 = 30 gb.
Member: Dani
Dani Jun 19, 2006 at 07:20:39 (UTC)
Goto Top
Hi,
also ich würds so machen:
$objItem.Size = ($objItem.Size/1024)/1024


Gruß
Dani
Member: SMHAMK1985
SMHAMK1985 Jun 19, 2006 at 07:49:52 (UTC)
Goto Top
Hi,
also ich würds so machen:
> $objItem.Size = ($objItem.Size/1024)/1024
> 


Gruß
Dani

Hi,

erstmal Danke für deine Hilfe, aber wo woll ich das denn einfügen?

so arbeitet er nicht richtig irgendwie!?

MfG
Member: Biber
Biber Jun 19, 2006 at 08:28:48 (UTC)
Goto Top
Anmerkung:

Schon richtig, Dani,

aber auch KiX kann IMHO nur mit Zahlen bis 2 hoch 32 -1 "richtig" rechnen, also bis 2.147.483.647 = (fast) 2048 MegaByte.

Das heißt, wenn die Platte/der freie Plattenplatz größer ist als 2 GByte, dann wird es schwierig mit der Division.

Als "Byte-Wert" wird $objItem.FreeSpace richtig angezeigt... aber eben als String behandelt. Bei einer Division käme ein negativer Wert oder 0.

Grüße
Biber
Member: superboh
superboh Jul 11, 2006 at 00:23:00 (UTC)
Goto Top
aber auch KiX kann IMHO nur mit Zahlen bis 2 hoch 32 -1 "richtig" rechnen, also
bis 2.147.483.647 = (fast) 2048 MegaByte.

Das heißt, wenn die Platte/der freie Plattenplatz größer ist als 2 GByte,
dann wird es schwierig mit der Division.

@Biber:
Ja das stimmt mit den 2.147.483.647, das steht so auch in der Doku zu Kix.
Allerdings ... was ich nicht verstehe ... ich ermittle die Grösse der Homeverzeichnisse mit Kix und meines ist momentan 3.663.056.936 (3,41 GB) gross. Genau diesen Wert in Bytes zeigt mir auch der Eigenschafts-Dialog von Windows an.

Hier jetzt das Kix-Schnippsel:

? "ungerundet: "(GetFolderSize(H:)/1024/1024)  
? "gerundet:   "Round((GetFolderSize(H:)/1024/1024),2)  

Function GetFolderSize($path)
    Dim $fso, $fold
    $GetFolderSize = -3
    If Exist($path) = 1
        $FSO = CreateObject("scripting.filesystemobject")  
        $fold = $fso.getfolder($path)
        $GetFolderSize = $fold.size
        Exit(0)
    Else
        Exit(3)
    EndIf
EndFunction
Die Ausgabe ist folgende:
ungerundet: 3493,36331939697
gerundet: 3493,36
Steh ich komplett auf dem Schlauch oder wo ist der Denkfehler? Weil ich habe ja mehr als 2 GByte und kann richtig damit rechnen.

Gruß,
Thomas
Member: Biber
Biber Jul 11, 2006 at 07:32:35 (UTC)
Goto Top
@superboh
...verblüfft mich jetzt auch..hätte ich nicht erwartet.

Unterm CMD-Prompt (den ich ja -wie bekannt- immer griffbereit habe) kommt erwartungsgemäß Bullshit raus.
(= 9:27:08  D:\temp=)
>set /a 3493*1024
3576832
(= 9:27:14  D:\temp=)
>set /a 3493*1024*1024
-632291328
(= 9:31:04  D:\temp=)
>

...hätte jetzt bei KiX auch nicht mehr erwartet.
Muss ich wohl noch mal recherchieren....

(To be cont'd)

Biber
Member: JJKix
JJKix Jul 13, 2006 at 14:34:25 (UTC)
Goto Top
Hi,

hier noch eine Variante mit Division:
Vor der Division muss der Wert zum Double gecastet werden CDbl (nicht unbedingt, aber schöner, danach diesen zum String-Wert casten mit CStr)

;========================================================
break on

$strComputer = "."
$objWMIService = GetObject("winmgmts:\\"+ $strComputer + "\root\cimv2")
$colItems = $objWMIService.ExecQuery("Select * from Win32_LogicalDisk")

For Each $objItem in $colItems
? "Laufwerk: " + $objItem.Caption
? "Dateisystem: " + $objItem.FileSystem
? "HDD Freier Specher: " + $objItem.FreeSpace + " Byte" + " -----> " + cstr(cDbl($objItem.FreeSpace)/1024/1024) + " GigaByte"
?;;
? "Size: " + $objItem.Size
? "Volume Serial Number: " + $objItem.VolumeSerialNumber
Next