melanie1980
Goto Top

Festplattenkapazität von Netzwerkrechnern auslesen

Ich möchte die Festplattenkapazität von den Client-Rechnern in meinem Netzwerk auslesen!

Anforderungen:
- Das Programm soll in VB realisiert werden!
- Über FSO oder Netzlaufwerk verbinden oder auf sonst eine Art und Weise soll auf bestimmte Clientrechner (Computername + Laufwerk) zugegriffen werden und den Füllzustand (Festplattenkapazität) ermittelt werden.
- Auf den Clientrechnern soll nichts installiert werden. Das Script soll als Job vom Server aus laufen, d.h. man müsste direkt auf den ClintPC verbinden.

Ich habe mir schon lange Gedanken gemacht, komm aber einfach auf keine Idee. hab hier im Forum schon lange rumgestöbert, aber nichts für meinen speziellen Fall gefunden...

Bitte um jede Art von Hilfe!!!

Mit freundlichen Grüßen aus Nürnberg
eure hilflose MELE

Content-Key: 25043

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

Printed on: April 19, 2024 at 09:04 o'clock

Mitglied: 23866
23866 Feb 02, 2006 at 10:57:43 (UTC)
Goto Top
...nun, VB6 ist nur ein Hobby von mir, aber diese spezielle Frage, solltest Du hier stellen:

www.vb-archiv.de

dort bekommst Du was VB angeht die beste Hilfe die es gibt.
Member: Weiricth
Weiricth Feb 02, 2006 at 11:02:03 (UTC)
Goto Top
hi,

also ich würds in clickexe (http://www.clickexe.de) da gibts die befehle vorgefertigt und man "Klickt" baut ich des schnell zusammen. des is a VB interpretter.

Grüße

TomTom

and never forget:

don't change a runing system
Mitglied: 23866
23866 Feb 02, 2006 at 11:49:09 (UTC)
Goto Top
cool... kannte ich gar nicht
Member: melanie1980
melanie1980 Feb 02, 2006 at 12:33:46 (UTC)
Goto Top
leider hat mich die click.exe sowie vb@archiv nicht weitergebracht...

ich hätte gern lösungsvorschläge! auf foren surfe ich schon in den letzten 30 stunden genug rum... dreh noch durch!

bitte bitte bitte
brauch hilfe
Mitglied: 23866
23866 Feb 02, 2006 at 19:34:55 (UTC)
Goto Top
Hallo,
nun ich nehme an Du ahst eine VB Version zum programmieren bei der Hand.

Hier ein Lösungsansatz mit FSO:
Du brauchst Form1, Text1, Command1
Text1 und Command1 plazierst Du auf die Form.

Jetzt der Code:

Private Sub Command1_Click()
Dim lw As String
Dim fs, d

lw = Text1.Text

Set fs = CreateObject("Scripting.FileSystemObject")
Set d = fs.GetDrive(fs.GetDriveName(lw))
MsgBox "Freier Speicherplatz auf " & lw & FormatNumber(d.FreeSpace / 1024 / 1024, 0) & " MB"
End Sub

Wenn Du nun in die Textbox z.B.: C:\ schreibst und auf Command1 (Button) klickst, dann zeigt Dir das kleine Progamm, wieviel Speicher noch auf C:\ frei ist.

Voraussetzung für die Anzeige der Clientrechner Festplatten Kapazität ist, das Du jeden Rechner bzw. die Festplatte als Netzlaufwerk auf dem Server verbindest.

Grüsse Mike
Member: melanie1980
melanie1980 Feb 03, 2006 at 08:30:54 (UTC)
Goto Top
hallo,

erstmal vielen dank für den super tipp. hatte auch schon so etwas in der art, jedoch blüht ir noch eine lösung vor ohne de Netzlaufwerke verbinden zu müssen.

Gibt es überhaupt eine Möglichkeit auf die Festlpattenkapazität zugreifen zu können ohne sich ein Laufwerk zu verbinden???

bin auf jede meinung gespannt...

mele
Mitglied: 23866
23866 Feb 03, 2006 at 08:38:22 (UTC)
Goto Top
...hmm, ich denke das zu mindest das Laufwerk freigegeben sin muss im Netzwerk, denn wie soll ich es sonst finden.

Zum Thema die Kapazität abzufragen ohne die Netzlaufwerke zu verbinden muss ich mich mal schlau machen, aber ich glaube das es evtl. machbar ist.

Mal guggn....

Grüsse Mike
Member: Tundra
Tundra Feb 03, 2006 at 08:39:58 (UTC)
Goto Top
Kleine Programme kann man auch gut mit http://www.autoitscript.com/autoit3/ erstellen (Freeware).

Grüße
Guido
Mitglied: 23866
23866 Feb 03, 2006 at 08:45:35 (UTC)
Goto Top
hmmm.... jetzt würde mich interessieren, wie sich das mit AutoIt realisieren lässt.
Member: melanie1980
melanie1980 Feb 03, 2006 at 10:13:12 (UTC)
Goto Top
mit autoId bin ich mir sicher, werd ich keine lösung finden. das soll jetzt nicht böse klingen, aber solche programme sind bei einer so komplexen aufgabenstellung nicht geeignet!

ich schätze mal, dass ich bei meinem problem nicht drumherum kommen werde, mir die entsprechenden laufwerke der reihe nach zu verbinden... oder wüsste jdm. ne andre möglichkeit???

achja, und dann bin ich auf der suche nach einem funktionierenden vb-code, mit dem ich mir laufwerke über den pc-namen verbinden und wider trenne kann (mit benutzername und passowort!)

wie gesagt, bin für jede hilfe sehr dankbar
grüßle
melanie
Mitglied: 23866
23866 Feb 03, 2006 at 10:28:09 (UTC)
Goto Top
Mitglied: 23866
23866 Feb 03, 2006 at 11:56:35 (UTC)
Goto Top
hab da noch ein bisschen gestöbert und bin noch aus das hier gestossen:

http://www.vbarchiv.net/archiv/tipp_details.php?pid=791

oder

http://www.vbarchiv.net/archiv/tipp_details.php?pid=330

das solltest eigentlich problemlos einbauen können, falls nicht meld Dich einfach nochmal, werde versuchen dir dabei zu helfen.

grüsse mike
Member: Tundra
Tundra Feb 03, 2006 at 12:25:39 (UTC)
Goto Top
Einfache Beispiel in au3
<pre>
; Autor: Guido Eink
; Remote HDD ermitteln

;Konstanten und Variablen für die GUI
#include <GUIConstants.au3>
Opt("GUIOnEventMode", 1) ; Wechsle in den OnEvent Modus

;Fenster erstellen
GUICreate("System-Informationen",300,180)
GUISetBkColor("0xFFFFCA")
GUISetFont(9,400,0,"Arial")
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")
;$CloseButton = GUICtrlCreateButton("Schließen",150,140,120,20)

GUICtrlCreateLabel("Rechner:",10,10) ;Position: left:30, top:10
$rechner = GUICtrlCreateInput("",80,10,140,20)

GUICtrlCreateLabel("Laufwerk:",10,50) ;Position: left:30, top:10
$lw = GUICtrlCreateInput("",80,50,40,20)

$okbutton = GUICtrlCreateButton("Anfrage",10,140,120,20)
GUICtrlSetOnEvent($okbutton, "OKButton")


;Fenster aufrufen
GUISetState(@SW_SHOW )
While 1
Sleep(1000) ; Häng rum
WEnd

func okbutton()
$anfrage = "\\" & GUICtrlRead($rechner) & "\" & GUICtrlRead($lw) & "$"
$var = DriveSpaceFree($anfrage)
GUICtrlCreateLabel("Ergebnis:",10,90) ;Position: left:30, top:10
GUICtrlCreateLabel($var & " MB",80,90,200,20) ;Position: left:30, top:10
EndFunc

func CLOSEClicked()
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")
exit
EndFunc
</pre>
Member: melanie1980
melanie1980 Feb 09, 2006 at 15:01:29 (UTC)
Goto Top
also erstma danke für die vielen vorschläge und zahlreichen tipps,

da mir die lösung mit den verbinden von den laufwerken zu unsicher und unstabil erscheint, hab ich mich jetzt dafür entschieden, ein vb-script zu schreiben, welches ich auf den netzwerkerchnern über den scheduler bei jedem computerstart ablaufen lasse:

das programm vebindet sich per dns auf einen server mit oracle daten bank, auf der sich eine tabelle befindet mti folgenden daten:

rechnername
laufwerk (bsp. c: ODER c:/windows)
info (bsp. laufwerk oder verzeichnis)
freierspeicher (immer der gesamte speicher des rechners)
fuellzustand (bsp: 60 % ODER 14.000 MB je nachdem ob info = laufwerk (%) oder
verzeichnis (mb))
datum (der letzten speicherung)

das script holt sich alle datensätze, bei denen sich rechnername mit dem eigenen rechnernamen gleicht und deren datum älter als das heutige datum ist, so dass am tag nur eine speicherung vollzogen wird!

die laufwerksinfos für c: abzufragen ist einfach:

Private objFS
Private objDrive

Set objFS = CreateObject("Scripting.FileSystemObject")
Set objDrive = objFS.GetDrive(Laufwerk)

FreierSpeicher = objDrive.FreeSpace
Speicherkapazitaet = objDrive.TotalSize

Speicherkapazitaet = FormatNumber(Speicherkapazitaet / 1024 ^ 2, 2)
FreierSpeicher = FormatNumber(FreierSpeicher / 1024 ^ 2, 2)
Fuellzustand = (FreierSpeicher / Speicherkapazitaet)

Set objFS = Nothing
Set objDrive = Nothing


nur für den fall das in einem datensatz bei INFO verzeichnis steht und dann sich in feld LAUFWERK ein C:/windows befindet, weiss ich keine lösung, denn dann soll anstand füllzustand in prozent --> die größe des verzeichnisses in mb eingetragen werden!

PROBLEM: doch wie kann ich die größe eines verzeichnisses herausbekommen????


wie immer mit freundlichen grüßen aus nürnberg
mele***
Member: melanie1980
melanie1980 Feb 23, 2006 at 14:45:58 (UTC)
Goto Top
hallo, ich bins wiedermal!

habe ein neues problem. es geht immernoch um meinen diskchecker!

ich bekomm ja mit dem code...


Private objFS 
Private objDrive 

Set objFS = CreateObject("Scripting.FileSystemObject")   
Set objDrive = objFS.GetDrive(c:) 

FreierSpeicher = objDrive.FreeSpace 
Speicherkapazitaet = objDrive.TotalSize 


...heraus, wie groß meine festplatte c: ist, aber gibts auch ne möglichkeit mir alle festplatten anzusehen. des geht irgendwie über fso.drives oder so? ich bekomm es aber nicht hin. hat da einer ne idee, also so nach dem motto

for each fso.drive in fso.drives
getVolumeName
get VolumeTyp etc.
getVolumeSize
getVolumeTotalSize
next


bitte um jede hilfe! bin hier schon wieder seit dienstag am rumsuchen. ich weiss, dass hier einige sind, die mir sicherlich weiterhelfen können, gell!

wunderbarste grüße aus nürnberg
eure melanie
Member: Tundra
Tundra Feb 23, 2006 at 15:26:52 (UTC)
Goto Top
Hi Melanie,

<pre>
option explicit

DIM O_FSO
DIM O_Laufwerk
DIM O_Laufwerke
DIM L_Wert

Set O_FSO = CreateObject("Scripting.FileSystemObject")
Set O_Laufwerke = O_FSO.Drives
for each O_Laufwerk in O_Laufwerke
if O_Laufwerk.IsReady then
L_Wert = "Laufwerk: " & O_Laufwerk.Driveletter & vbcrlf
L_Wert = L_Wert & " Type: " & O_Laufwerk.DriveType & vbcrlf
L_Wert = L_Wert & " Volume: " & O_Laufwerk.Volumename & vbcrlf
L_Wert = L_Wert & " Dateisystem: " & O_Laufwerk.FileSystem & vbcrlf
L_Wert = L_Wert & " Gesamtgröße: " & formatnumber(O_Laufwerk.Totalsize/1048576,1) & " MB" & vbcrlf
L_Wert = L_Wert & " Frei: " & FormatNumber(O_Laufwerk.FreeSpace/1048576,1) & " MB" & vbcrlf
L_Wert = L_Wert & " Seriennummer: " & O_Laufwerk.SerialNumber
wscript.echo L_Wert
end if
next
</pre>

Grüße
Guido
Member: Xaero1982
Xaero1982 Mar 30, 2006 at 12:05:59 (UTC)
Goto Top
Alternative via WMI und Vbscript. Alternativ zur Messagebox kann man das auch in eine txt schreiben etc.
On Error Resume Next
Const CONVERSION_FACTOR = 1048576

Const WbemAuthenticationLevelPktPrivacy = 6

strUser = InputBox("Please enter the user name: ")  
strPassword = InputBox ("Please enter the Passwort: ")  
strNamespace = "root\cimv2"  

'Wiederholt so lange Host erreichbar ist bzw nicht unbekannter host als Meldung erscheint!  
do
    strComputer = InputBox ("Please enter the name of the computer you want to connect to: ")  

    If strComputer = "" Then  
    do
        strComputer = InputBox("Please enter correct Computername: ")  

    loop until strComputer <> "" OR strComputer = False  
    End If

    'Erreichbarkeit des PC's testen - Ping==================  

    Set objShell = CreateObject("WScript.Shell")  
    strCommand = "%comspec% /c ping -n 3 -w 1000 " & strComputer & "" 'Ping ausführen  
    Set objExecObject = objShell.Exec(strCommand)
	'=======================================================  
    Do While Not objExecObject.StdOut.AtEndOfStream
        strText = objExecObject.StdOut.ReadAll()
            If Instr(strText, "Anforderung") > 0 Then  
               objshell.popup "Host " & strComputer & " nicht erreichbar!",3  
            elseif Instr(strText, "Unbekannter Host " & strComputer & ".") <> 0  then  
               objshell.popup "Host " & strComputer & " nicht erreichbar!",3  
            end if
    loop
loop while  Instr(strText, "Unbekannter Host " & strComputer & ".")<>0 OR Instr(strText, "Anforderung") > 0  
'=======================================================  

'Verbindung zum WMI Namespace herstellen================  
    Set objWbemLocator = CreateObject("WbemScripting.SWbemLocator")  
    Set objWMIService = objwbemLocator.ConnectServer (strComputer, strNamespace, strUser, strPassword)
    objWMIService.Security_.authenticationLevel = WbemAuthenticationLevelPktPrivacy
'=======================================================  

   Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_LogicalDisk")  

   For Each objItem In colItems
      Message = Message & ("Name: " & objItem.Name) &vbcrlf  
      Message = Message & ("FreeSpace: " & objItem.FreeSpace / CONVERSION_FACTOR & " MB") &vbcrlf  
      Message = Message & ("Size: " & objItem.Size / CONVERSION_FACTOR & " MB") &vbcrlf  
   Next
   
   wscript.echo Message

Die ersten Inputboxen brauchst du um die verbindung zum Remotenamespace herzustellen.
Dementsprechend brauchst du Adminrechte auf allen Maschinen.

*EDIT Fehler behoben*