Jump to content

kix erfahrene hier ???


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo zusammen,

 

 

Ich suche jemand mit Kix Erfahrung

 

Zu meinem Problem:

 

Ich lese über WMI die Werte der Festplatte aus

 

$objWMIService = GetObject("winmgmts:\\"+ $strComputer + "\root\cimv2")

$colItems = $objWMIService.ExecQuery("Select * from Win32_DiskDrive")

 

?"Size: " +$objDiskDrive.Size

 

 

Ausgegeben wird dann: Size: 40007761920

 

Ich will aber nicht das es in Byte (sind glaub ich Bytes) angegeben wird sondern in GB dazu müsste ich den Wert 3mal durch 1024 teilen.

Der Wert “40007761920“ ist allerdings zu groß um mit ihm zu rechnen

Es können nur Werte in Variablen gespeichert werden die maximal 9 stellen haben

 

Jetzt zu meiner Frage:

 

Wie kann ich mit der Zahl rechnen bzw. wie kann ich die letzten 3 Stellen der Variablen “abschneiden“ um mit dem Wert weiter rechnen zu können?

 

Ich hoffe dass mir jemand weiterhelfen kann

 

Gruss Snake

Link zu diesem Kommentar

also geschrieben ist es in kix ....

 

mein problem ist das ich nicht weiß wie ich mit der zahl 40007761920 rechnen kann

 

bzw mit der variablen $objDiskDrive.Size

 

beim arbeitsspeicher hatte ich das selbe problem

 

hier hat es sich allerdings so lösen lassen :

 

? "Arbeitsspeicher: " + Abs($objItem.TotalPhysicalMemory)/1024/1024

 

das geht aber bei der festplattengröße nicht... frag mich aber nicht warum :confused:

Link zu diesem Kommentar

Nuja, dann halt basteln - in etwa so

; ---- Check space on C --------------

$UsrDrive = GETDISKSPACE("C:\")

$szDrive = "" + $UsrDrive

$flen = Len($szDrive)-1

$dSize = ""

select

CASE $flen = 8

; 100Gb

$dSize = SUBSTR($szDrive,1,3)+"," + SUBSTR($szDrive,1,2)

$Unit= "GByte"

CASE $flen = 7

; 10GB

$dSize = SUBSTR($szDrive,1,2)+"," + SUBSTR($szDrive,1,2)

$Unit= "GByte"

CASE $flen = 6

; 1GB

$dSize = SUBSTR($szDrive,1,1)+"," + SUBSTR($szDrive,1,2)

$Unit= "GByte"

CASE $flen = 5

; 100MB

$dSize = SUBSTR($szDrive,1,3)+"," + SUBSTR($szDrive,1,2)

$Unit= "MByte"

CASE $flen = 4

; 10MB

$dSize = SUBSTR($szDrive,1,2)+"," + SUBSTR($szDrive,1,2)

$Unit= "MByte"

CASE $flen = 3

$dSize = SUBSTR($szDrive,1,$flen)

$Unit = "KByte"

endselect

$X = "Platz auf C:" $Y="$dSize $Unit" GOSUB DISP

 

Muste halt probieren :)

Link zu diesem Kommentar

Hab ich dir extra Strings und Substrings mit auf den Weg gegeben, nunja.

Das ist übrigends ein KIX-Script obiges, aber wenn du damit nicht zufrieden bist, dann machen wir das halt mit VBS.

------ Los gehts -------

 

strComputer = "."

 

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

Set objWMIInstance = objWMIService.ExecQuery("Select * from Win32_DiskDrive")

For Each item In objWMIInstance

WScript.Echo "Size Bytes :", item.Size

WScript.Echo "Size Dezimal :", fFormatNum(item.Size, False)

WScript.Echo "Size gerundet :", fFormatNum(item.Size, True)

Next

 

Wscript.quit

' die Funktion dazu

Private Function fFormatNum(num, DropDecimal)

Dim bytes

Dim lngSize

If IsNumeric(num) Then

If Len(num) < 5 Then

lngSize = FormatNumber((num /1024), 2, vbTrue, vbTrue, vbUseDefault)

bytes = " Gb"

Elseif Len(num) < 7 Then

lngSize = FormatNumber((num / 1024), 2, vbTrue, vbTrue, vbUseDefault)

bytes = " Kb"

Elseif Len(num) < 10 Then

lngSize = FormatNumber((num / 1024 ^ 2), 2, vbTrue, vbTrue, vbUseDefault)

bytes = " Mb"

Elseif Len(num) < 13 Then

lngSize = FormatNumber((num / 1024 ^ 3), 2, vbTrue, vbTrue, vbUseDefault)

bytes = " Gb"

Elseif Len(num) < 16 Then

lngSize = FormatNumber((num / 1024 ^ 4), 2, vbTrue, vbTrue, vbUseDefault)

bytes = " Tb"

Elseif Len(num) >= 16 Then

lngSize = FormatNumber((num / 1024 ^ 5), 2, vbTrue, vbTrue, vbUseDefault)

bytes = " Pb"

End If

If DropDecimal Or Right(lngSize, 2) = "00" Then

fFormatNum = CStr(Round(lngSize, 0)) & bytes

Else

fFormatNum = CStr(lngSize) & bytes

End If

Else

fFormatNum = num

End If

End Function

 

------ ende Scripting ----

Nun must du aber völlig zufrieden sein :D

Link zu diesem Kommentar

hmm ich bin eigentlich zufrieden :-) ABER :-)

 

das vbs teil ist echt nicht schlecht ist ja auch ausführbar aber mit vb kann ich leider nix anfangen :-(

 

das kix teil ist wars***einlich genau das selbe aber ich steig nicht ganz duch dir funktion :-) bin kein script guru LOL eher ein noob :-)

 

du hast in dem kix script keinerlei ausgabe drin ... das peil ich nicht ganz .. welchen wert soll ich den

Link zu diesem Kommentar

soweit ich das jetzt verstaden hab liest du damit den freien speicher aus .. ist aber leider uninteresnt ..

 

um den kompletten spreicher der platte zu bekommen lesen ich diesen über wmi ein

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

$strComputer = "."

 

$objWMIService = GetObject("winmgmts:\\"+ $strComputer + "\root\cimv2")

$colhds = $objWMIService.ExecQuery("Select * from Win32_DiskDrive")

 

For Each $objhd In $colhds

 

?"Size: " + $objhd.Size

Next

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

wenn ich jetzt nicht ganz falsch liege müsse ich dein sript also mit dem wert "$objhd.Size" füttern um den gesamten spreicher ausgeben zu wollen

 

ich hoff bis hier ist es richtig

 

und wenn ich es ganz verstanden habe müsse das dann so aussehen ?

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

$strComputer = "."

 

$objWMIService = GetObject("winmgmts:\\"+ $strComputer + "\root\cimv2")

$colhds = $objWMIService.ExecQuery("Select * from Win32_DiskDrive")

 

For Each $objhd In $colhds

 

?"Size: " + $objhd.Size ; wird nur zum den wert überprüfen ausgegeben

Next

 

;$UsrDrive = GetDiskSpace("C:\") ;-> wird ersetzt dur dich nächste line

$UsrDrive = $objhd.Size

$szDrive = "" + $UsrDrive

$flen = Len($szDrive)-1

$dSize = ""

 

Select

Case $flen = 8

; 100Gb

$dSize = SubStr($szDrive,1,3)+"," + SubStr($szDrive,1,2)

$Unit= "GByte"

Case $flen = 7

 

; 10GB

$dSize = SubStr($szDrive,1,2)+"," + SubStr($szDrive,1,2)

$Unit= "GByte"

Case $flen = 6

 

; 1GB

$dSize = SubStr($szDrive,1,1)+"," + SubStr($szDrive,1,2)

$Unit= "GByte"

Case $flen = 5

 

; 100MB

$dSize = SubStr($szDrive,1,3)+"," + SubStr($szDrive,1,2)

$Unit= "MByte"

Case $flen = 4

 

; 10MB

$dSize = SubStr($szDrive,1,2)+"," + SubStr($szDrive,1,2)

$Unit= "MByte"

Case $flen = 3

$dSize = SubStr($szDrive,1,$flen)

$Unit = "KByte"

EndSelect

$X = "Platz auf C:" $Y="$dSize $Unit" ;Gosub DISP

?"$X $Y"

 

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

ders wird aber kein wert ausgegeben .. scheint so als könne er damit auch nicht rechnen ..

Link zu diesem Kommentar

bei $X erhältst du die Textausgabe, bei $Y gibts nicht, richtig?

 

Dann schau dir mal die CASE Schleife an, die must du erweitern auf die von dir zu verarbeitende Stellenzahl, ist nämlich im Beispiel auf 8 gesetzt. :)

 

Dein zweiter Fehler, in deiner For - Next im WMI, da hast du eh nur den letzten Wert drin, oder NULL

wenn du im System CF- oder sonsige Cards hast, auch das sind Datenträger die durch WMI abgefragt werden.

also in die FOR / Next Schleife den KIX-Code reinbasteln.

 

Dein Dritter Fehler, KIX hat einen Debugger, hättest du den angeworfen wäre dir sehr fix aufgefallen dass die CASE Schleife schlicht nix macht - du fütterst nämlich mit mehr als 8 Stellen.

 

Kannst du die Scripte nicht anpassen, dann kann ich dir wohl nicht weiterhelfen, denn ich weiss nicht was du letztlich haben möchtest. Möglich ist es aber - das VBS-Beispiel funktioniert läßt sich fix erweitern und du kannst die Compies im Netz damit abfragen, geht mit KIX IMHO wohl auch.

Link zu diesem Kommentar

das ist richtg die ausgabe ist : "Platz auf C: $Unit"

 

in den systemen gibt es immer nur eine platte .. das ganze script ist um einiges länger aber das wär jetzt zu lang zum anhängen das war nur das testscript ..

 

bei der ausgabe von

 

?"Size: " + $objhd.Size

 

kommt der richtige wert raus (40007761920)

 

nach der übergabe von $objhd.Size zu $UsrDrive ($UsrDrive = $objhd.Size) steht aber nichts mehr in der $UsrDrive das bedeutet das ich nicht mal zur schleife komme

 

kann dir gen meine kix32.exe schicken wenn du se nicht eh schon hast und es mal versuchen ....

 

das ist ja das hauptproblem ich bekomm den wert 40007761920 einfach nicht in ne normale variable rein wenn das gehen würde könne ich einfach mit /1024/1024/1024 mit die GB zahl errechnen ...

 

 

zu dem wie es aussehen soll:

 

ich habe die variable $objhd.Size mit dem ihnalt (40007761920) daraus will ich eine ausgabe von 40 GB (bzw 37,5) je nach art der rechnung

 

dewegen erscheint mir die art mit der division doch die einfachste .. wenn ich es schaffen kann mit dem wert $objhd.Size(40007761920) zu rechnen

 

trozdem schon mal danke

Link zu diesem Kommentar

Hab mit das neue Kix besorgt, Version 2010 :)

Auch hier ist Essig, damit Rechnen geht nicht.

 

Zuweisen zu einer schon definierten Variable geht, Echo auch,

nur direkt rechnen halt nicht - zu groß :D

 

Also nur über Länge parsen wie im KIX-Script schon gezeigt.

Oder du holst dir aus WMI die Geometrie-Werte der Platten, Head, Sektoren, Tracks und fängst an zu basteln; geht auch aber nu mag ich nicht mehr.

 

Da bleibe ich doch lieber bei VBS - damit gehts wenigstens gleich wie im Beispiel.

HtH

Link zu diesem Kommentar

jep hast recht da geht das scheinbar schneller ..

 

ich habs jetzt über substring gemacht ..

 

$temp = SubStr ($objhd.Size,1,2)

 

liest die ersten beiden zahlen aus .. = 40 auso 40 gb

 

ich werd aber noch wenn es möglich ist ne schleife drum bauen das ich auch <100gb auslesen kann

 

also dann

 

$temp = SubStr ($objhd.Size,1,3)

 

naja danke für deine hilfe ich werd mir das mit vbs aber noch genauer anschauen ....

 

gruss snake

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...