Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

freien Festplattenspeicher über die Kommandozeile abfragen

Frage Sonstige Systeme

Mitglied: The-Warlord

The-Warlord (Level 1) - Jetzt verbinden

04.04.2006, aktualisiert 06.04.2006, 24035 Aufrufe, 39 Kommentare

Möchte freien Speicherplatz mehrer Server im Netzwerk abfragen und in einer Datei ablegen

Ich hab folgendes Problem, ich möchte den freien Speicherplatz (Festplatte) via Kommandozeile ermitteln. Die Informationen sollen von mehreren Servern abgefragt und in eine Textdatei zusammengefasst werden.

Als Mittel würde ich am liebsten die standartmäßige Kommandozeile nutzen evtl. auch noch den WSH (Windows Scripting Host).

Nach dem ich mich aus den Lösungsvorschlägen für den Shell weg entschieden hatte und mir Biber sehr viel geholfen hat, kamm ich nun endlich zu einem brauchbaren Zwischenergebnis. Meine beiden variablen werden ausgegeben.

@echo off
@for %%a in (c: ) do @for /f "tokens=3" %%i in ('dir /-c %%a^|find /i "Bytes fre"') do (set fs_drive=%%a) & (set fs_space=%%i)
echo Laufwerk %fs_drive%\ %fs_space% Bytes Frei

Jetzt müsste nur noch die umrechnung in Megabyte erfolgen. Ich ab probiert den befehl "SET" mit der Option "/a" zu nutzen um den Wert hinter dem Gleichheitszeichen mit arithmetischen Operatoren zu verrechnen (durch 1024).

bei mir kamm immer folgender Fehler:

H:\Skripte>(set fs_drive=c: ) & (set /A fs_space="78326009856 / 1024" )
Ungültige Zahl. Zahlen sind begrenzt auf eine Genauigkeit von 32 Bits.

H:\Skripte>echo Laufwerk c:\ 78326009856 / 1024 Bytes Frei
Laufwerk c:\ 78326009856 / 1024 Bytes Frei

Liegt es an der Definition der Variable? oder hab ich einfach einen Syntax Fehler oder ähnliches Gemacht?

Für Hilfe wäre ich weiterhin sehr dankbar
39 Antworten
Mitglied: 27119
04.04.2006 um 08:24 Uhr
diskpart

http://support.microsoft.com/default.aspx?scid=http%3A%2F%2Fwww.microso ...

Der Befehl detail disk liefert ausführliche Informationen zu dem Datenträger, der momentan den Fokus hat.

Beispiel: Diskpart> select disk 3

Datenträger 3 ist der derzeit gewählte Datenträger.

Diskpart> detail disk

Maxtor 90432D2
Datenträgerkennung: F549D151
Typ : IDE
Bus : 0
Ziel : 0
LUN ID : 0

Volume ### Bst Bezeichnung Ds Typ Größe Status Info
---------- --- ----------- ----- ---------------- ------- --------- --------
Volume 0 F My RAID Set NTFS RAID-5 4096 MB OK
Volume 1 G FATSTRIPE FAT32 Stripe 6144 MB OK
Volume 2 H My Mirror NTFS Spiegel 2048 MB OK
Volume 3 I My Span NTFS Übergreifend 9 GB OK
Bitte warten ..
Mitglied: poortramp
04.04.2006 um 08:48 Uhr
Hi,

wenn du entfernte Rechner abfragen willst, empfehl ich dir das über SNMP zu machen.
Hier
http://www.snmp-informant.com/
findest du ein Tool dafür das auch einen Client für die Kommandozeile enthält soweit ich weiss.

Vielleicht schaust du auch mal hier
http://people.ee.ethz.ch/~oetiker/webtools/mrtg/ .
Damit kannst du die Festplattennutzung grafisch darstellen

poortramp
Bitte warten ..
Mitglied: The-Warlord
04.04.2006 um 10:01 Uhr
Zu SNMP-Informant, das Tool lässt sich leider nicht über die Kommandozeiel nutzen und ist somit recht uninteressant, aber trotzdem Danke für den Hinweis.
Bitte warten ..
Mitglied: Biber
04.04.2006 um 10:08 Uhr
Moin, The-Warlord,
such mal in "Batch & Shell" nach "Festplattenplatz" ... da sollten schon ein paar Varianten da sein.

Sinngemäß so vom CMD-Prompt aus, wenn V:, W:, X:, Z: die anzuzeigenden Netzlaufwerke sind:

@for %a in ( V W X Z) do @for /f "tokens=3" %i in ('dir %a^:^|find /i "Bytes fre"') do @echo Lw %a: %i Bytes Frei

Als Batch jeweils statt %a und %i dann %%a und %%i

Hope That Helps
Biber
Bitte warten ..
Mitglied: problemsolver
04.04.2006 um 10:17 Uhr
Hallo!

Nimm "psTools" von Sysinternals... http://www.sysinternals.com
Da ist ein Tool namens psinfo dabei... reicht vollkommen aus und ist darüberhinaus auch noch in der Lage über das Netzwerk andere Rechner zu überprüfen... und das beste ist.. .es ist einfach schön klein.

Gruß

Markus
Bitte warten ..
Mitglied: 27119
04.04.2006 um 10:19 Uhr
Muhaha - wird ja immer skuriller, der Tipps-und Tricks-Hagelschauer.

Was stimmt mit diskpart nicht? Ist doch genau das worum es hier geht...
Bitte warten ..
Mitglied: The-Warlord
04.04.2006 um 10:22 Uhr
Diskpart... cooles Tool kannte ich garnicht. leider kann es einem nur den Freien Speicherplatz ausgeben der noch auf der Festplatte ist (Um z.B.: eine weitere Partition anzulegen).
Eigentlich suche ich aber nach einer Möglichkeit mir die Gesamtgrösse einer Partition anzeigen zu lassen sowie den verbrauchten Speicherplatz. Ähnlich wie "df -k" unter Linux.
Der Befehl "DIR" würde mir diese inforamtionen zurückliefern, aber es gibt (Zumindestens nach meinem Wissensstand) keiner möglichkeiten die ausgabe von "DIR" zu bearbeiten. Unter Linux würde ich mit die Ausgabe von "DIR" nach "TAIL" pipen, und mir somit nur die letzte Zeile anzeigen lassen. Den rest könnte ich mir mit dem "CUT" Befehl schon zurechschnibbeln.
Ich suche nun nach einer Möglichkeit das selbe unter Windows zu realisieren.
Wäre es möglich die oben genannte Methode über den Windows Scripting Host (WSH) umzusetzen???
Bitte warten ..
Mitglied: Biber
04.04.2006 um 10:31 Uhr
Unter Linux würde ich mit die Ausgabe von "DIR" nach "TAIL" pipen...

Jepp, siehe oben.
Bitte warten ..
Mitglied: The-Warlord
04.04.2006 um 11:01 Uhr
Hey Biber das is ja Super (verschachtelte for Schleife)
habs ein wenig geändert, gab vorher Ausgabe weil der Laufwerksbuchstabe nicht übernommen wurde (Irgendein Problem mit dem Doppelpunkt)

@for %a in (c: h do @for /f "tokens=3" %i in ('dir %a^|find /i "Bytes free"') do @echo %a %i
c: 78.327.717.888
h: 120.596.680.704

ich beschäftige mich jetzt mal mit dem konvertieren des Ergebnisses in Megabyte

Vielen Dank
Bitte warten ..
Mitglied: Biber
04.04.2006 um 11:17 Uhr
Noch ein Tipp:

Wenn Du mit Bytes rechnen willst, füge noch den Parameter "/-c" an den DIR-Befehl an.

Dann ist die Ausgabe statt

ALT:
h: 120.596.680.704

NEU:
h: 120596680704

Lässt sich besser mit Rechnen.

Das mit dem ":" war ein Tippfehler...

Gruß Biber
Bitte warten ..
Mitglied: Xaero1982
04.04.2006 um 12:39 Uhr
hier das ganze mal mit WMI und WSH :o)
speichern als *.vbs
01.
On Error Resume Next 
02.
Pfad = "c:\hdd.txt" 
03.
set fso = CreateObject("Scripting.FileSystemObject") 
04.
 
05.
Const CONVERSION_FACTOR = 1048576 
06.
 
07.
Const WbemAuthenticationLevelPktPrivacy = 6 
08.
 
09.
strUser = InputBox("Please enter the user name: ") 
10.
strPassword = InputBox ("Please enter the Passwort: ") 
11.
strNamespace = "root\cimv2" 
12.
 
13.
'Wiederholt so lange Host erreichbar ist bzw nicht unbekannter host als Meldung erscheint! 
14.
do 
15.
    strComputer = InputBox ("Please enter the name of the computer you want to connect to: ") 
16.
 
17.
    If strComputer = "" Then 
18.
    do 
19.
        strComputer = InputBox("Please enter correct Computername: ") 
20.
 
21.
    loop until strComputer <> "" OR strComputer = False 
22.
    End If 
23.
 
24.
    'Erreichbarkeit des PC's testen - Ping================== 
25.
 
26.
    Set objShell = CreateObject("WScript.Shell") 
27.
    strCommand = "%comspec% /c ping -n 3 -w 1000 " & strComputer & "" 'Ping ausführen 
28.
    Set objExecObject = objShell.Exec(strCommand) 
29.
	'======================================================= 
30.
    Do While Not objExecObject.StdOut.AtEndOfStream 
31.
        strText = objExecObject.StdOut.ReadAll() 
32.
            If Instr(strText, "Anforderung") > 0 Then 
33.
               objshell.popup "Host " & strComputer & " nicht erreichbar!",3 
34.
            elseif Instr(strText, "Unbekannter Host " & strComputer & ".") <> 0  then 
35.
               objshell.popup "Host " & strComputer & " nicht erreichbar!",3 
36.
            end if 
37.
    loop 
38.
loop while  Instr(strText, "Unbekannter Host " & strComputer & ".")<>0 OR Instr(strText, "Anforderung") > 0 
39.
'======================================================= 
40.
 
41.
'Verbindung zum WMI Namespace herstellen================ 
42.
    Set objWbemLocator = CreateObject("WbemScripting.SWbemLocator") 
43.
    Set objWMIService = objwbemLocator.ConnectServer (strComputer, strNamespace, strUser, strPassword) 
44.
    objWMIService.Security_.authenticationLevel = WbemAuthenticationLevelPktPrivacy 
45.
'======================================================= 
46.
 
47.
   Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_LogicalDisk") 
48.
 
49.
   For Each objItem In colItems 
50.
      Message = Message & ("Name: " & objItem.Name) &vbcrlf 
51.
      Message = Message & ("FreeSpace: " & objItem.FreeSpace / CONVERSION_FACTOR & " MB") &vbcrlf 
52.
      Message = Message & ("Size: " & objItem.Size / CONVERSION_FACTOR & " MB") &vbcrlf 
53.
   Next 
54.
 
55.
    set fsoFile = fso.CreateTextFile(Pfad, true) 
56.
 
57.
    'Schreibt den Inhalt der Variablen in () in die Textdatei 
58.
    fsoFile.WriteLine(Message) 
59.
    'TextDatei schliessen und Objekte terminieren=========== 
60.
    fsoFile.close 
61.
    set fsoFile = nothing 
62.
    set fso = nothing
Du gibst am start den adminlogin ein und den rechner von dem du es auslesen willst.

hier:
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

sind die Dinge die ausgegeben werden
Du willst nur z.b. von C: haben?
Dann änder diese Zeile:
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_LogicalDisk")
in
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_LogicalDisk WHERE name='C:'")

Bei weiteren Problemen einfach fragen!

*editiert und einen Fehler behoben*
Bitte warten ..
Mitglied: The-Warlord
04.04.2006 um 12:54 Uhr
bei der Variante (die ich kaum zu Überblicken vermag) habe ich einen Fehler in Zeile 48

ich denke ich habe mich auch für die Shell Variante von Biber entschieden, mit dieser kann ich aufgrund meine leichten BASH kenntnisse am besten ausseinandersetzten.

Trotzdem vielen vielen Dank
Bitte warten ..
Mitglied: The-Warlord
04.04.2006 um 13:09 Uhr
Der folgende String soll jetzt als Basis für mein Skript dienen:

@for %a in (c: ) do @for /f "tokens=3" %i in ('dir /-c %a^|find /i "Bytes fre"') do

gerne hinter dem "do" das Ergebnis des Strings in eine Variable umleiten.
etwa so:

@for %a in (c: ) do @for /f "tokens=3" %i in ('dir /-c %a^|find /i "Bytes fre"') do set fs_drive=%a

um mit den variablen dann rechnen zu können

mein erstes Problem is ich möchte gerne im "do" mehrere Variablen definieren, in meinem Fall "fs_drive" für den Laufwerksbuchstaben "%a" und "fs_space" für den freien Speicherplatz. ich habe im "do" versucht die Befehle mit ",", ";", "AND" zu trennen aber hatte keinen Erfolg. alles was hinter dem "set=" Befehl Stand wurde in die Variable integriert;-(
Bitte warten ..
Mitglied: Biber
04.04.2006 um 13:16 Uhr
....do (set fs_drive%a=%a) & set fs_free=%i
Bitte warten ..
Mitglied: The-Warlord
04.04.2006 um 13:48 Uhr
Ich hab den String in eine Batch-Datei gepackt

REM @echo off
@for %%a in (c: ) do @for /f "tokens=3" %%i in ('dir /-c %%a^|find /i "Bytes fre"') do (set fs_drive=%%a) & (set /A fs_space=" %%i / 1024")
echo Laufwerk %fs_drive%\ %fs_space% Bytes Frei

Mit dem Ergebnis...

H:\Skripte>REM @echo off

H:\Skripte>(set fs_drive=c: ) & (set /A fs_space="78326009856 / 1024" )
Ungültige Zahl. Zahlen sind begrenzt auf eine Genauigkeit von 32 Bits.

H:\Skripte>echo Laufwerk c:\ 78326009856 / 1024 Bytes Frei
Laufwerk c:\ 78326009856 / 1024 Bytes Frei
Bitte warten ..
Mitglied: Xaero1982
04.04.2006 um 14:24 Uhr
Welches OS hast du denn im Betrieb?

Was für ein Fehler kommt?

ah ok, der hat ein "_" verschluckt

Am ende von zeile mach ein " _" ohne anführungsstriche.
Damit bewirkst du, dass der diese Zeile in der nächsten forgesetzt wird:
01.
Function GetWMIServices() 
02.
Set GetWMIServices = GetObject("winmgmts:" UNTERSTRICH 
03.
& "{impersonationLevel=impersonate}!\\" & strComputer & strNamespace) 
04.
End Function
Alternativ

01.
Function GetWMIServices() 
02.
Set GetWMIServices = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & strNamespace) 
03.
End Function
Edit: Ok, dass Forum verschluckt die "_" .... ersetz UNTERSTRICH durch nen "_"

*Dieser ganze Beitrag hat sich im folge der oberen Änderung erledigt ->IRRELEVANT und Fehlerhaft*
Bitte warten ..
Mitglied: The-Warlord
04.04.2006 um 15:25 Uhr
Ich habs soweit geändert... Jetzt kommt Abfrage für Benutzername, Passwort und Rechner dann kommt die Kommandozeile. man sieht nicht was passiert, danach fällt die Kommandozeile wieder zusammen und... ich kann nicht sagen ob was passiert ist.

Es wäre Super wenn du mal nach meinem Syntax problem im hauptthread schauen würdest... sollte ja bei den Kenntnissen kein Ding sein
Bitte warten ..
Mitglied: Xaero1982
04.04.2006 um 16:49 Uhr
Da ist kein Problem

schau mal auf c:\hdd.txt

Alternativ:

'Schreibt den Inhalt der Variablen in () in die Textdatei

Wscript.echo Message '<-Das noch davor schreiben
fsoFile.WriteLine(Message) '<-schreibt Message in die hdd.txt
Bitte warten ..
Mitglied: Biber
04.04.2006 um 18:11 Uhr
Na,
ich geb ja zu, dass ich es nicht mit einem Oneliner hinbekomme, wenn es in Giga- oder TeraByte dargestellt werden soll, aber eine halbe Seite VB-Skript scheint mir doch übertrieben für die banale Frage.

Hier noch mal ein Quickie als Batch:
01.
::------snipp getfreespace.bat 
02.
@echo off & setlocal enabledelayedexpansion 
03.
@for %%a in (%*) do @for /f "tokens=3" %%i in ('dir /-c %%a:^|find /i "Bytes fre"') do call :calc %%a %%i 
04.
goto disp 
05.
:calc  
06.
(Set "Dim=GigaByte") & (set fs_drive%1=%1) & set fs_space=%2 
07.
set /a fs_space=%fs_space:~0,-9%+0 
08.
if %fs_space% == 0 (set /a fs_space=%2/1024) && set "Dim=KByte" 
09.
if [%Dim%]==[KByte] if %fs_space% GTR 1024 (set /a fs_space/=1024) && set "Dim=MByte" 
10.
if [%Dim%]==[GigaByte] if %fs_space% GTR 1024 (set /a fs_space/=1024) && set "Dim=TeraByte"  
11.
if [%Dim%]==[GigaByte] if %fs_space% GTR 1024 (set /a fs_space/=1024) && set "Dim=PetaByte"  
12.
set "fs_space%1=%fs_space% %dim% frei" 
13.
goto :eof 
14.
 
15.
:disp 
16.
For %%i in (%*) do echo Laufwerk !fs_drive%%i!:\ !fs_space%%i! 
17.
::------snapp getfreespace.bat
Aufruf mit ein paar Laufwerken:
$cmd$>f:\getfreespace.bat c e d f y
Laufwerk c:\ 9 GigaByte frei
Laufwerk e:\ 736 KByte frei
Laufwerk d:\ 59 GigaByte frei
Laufwerk f:\ 302 MByte frei
Laufwerk y:\ 23 GigaByte frei

Der CMD-Interpreter kann nur "rechnen" mit Zahlen knapp über 2 GigaByte (2^^32).
(siehe "Bugs im CMD-Interpreter", Biber 2006, Seite 489ff)
Aber deswegen braucht man/frau doch nicht gleich aufs Bätchen zu verzichten..

Grüße
Biber
Bitte warten ..
Mitglied: Xaero1982
04.04.2006 um 18:31 Uhr
Nun gut, vorteil bei mir ist:

ich kann das von jedem beliebigen rechner aus tun und von jedem abfragen auf den ich admin rechte habe :o)

Für mich ein sehr wichtiger Punkt, da ich im moment an einem sehr umfangreichen Netzwerktool arbeite auf Basis von WMI, Vbscript und MySQL.

Desweiteren habe ich deswegen auch eine überprüfung drin ob der PC vorhanden ist und an ist ... wenn ich kürze hab ich auch nicht viel mehr *g
Bitte warten ..
Mitglied: Biber
04.04.2006 um 18:54 Uhr

@Xaero1982
Ich wollte auch nicht für die native Batchprogrammierung werben... habe auch keine Berührungsängste mit VBSkript mehr.

Es erschien mir nur für den Krams zu aufwändig... natürlich funktioniert es auch mit Deinem Schnipsel.

Und -um noch einen einen letzten Gag loszuwerden, meine Prüfung, ob Laufwerk vorhanden oder nicht, die reiche ich noch nach:
01.
::------snipp getfreespaceMitLaufwerksprüfung.bat 
02.
@echo off & setlocal enabledelayedexpansion 
03.
@for %%a in (%*) do @for /f "tokens=3" %%i in ('dir /-c %%a: ^2^>nul^|find /i "Bytes fre"') do call :calc %%a %%i 
04.
goto disp 
05.
:calc  
06.
(Set "Dim=GigaByte") & (set fs_drive%1=%1) & set fs_space=%2 
07.
set /a fs_space=%fs_space:~0,-9%+0 
08.
if %fs_space% == 0 (set /a fs_space=%2/1024) && set "Dim=KByte" 
09.
if [%Dim%]==[KByte] if %fs_space% GTR 1024 (set /a fs_space/=1024) && set "Dim=MByte" 
10.
if [%Dim%]==[GigaByte] if %fs_space% GTR 1024 (set /a fs_space/=1024) && set "Dim=TeraByte"  
11.
if [%Dim%]==[GigaByte] if %fs_space% GTR 1024 (set /a fs_space/=1024) && set "Dim=PetaByte"  
12.
set "fs_space%1=%fs_space% %dim% frei" 
13.
goto :eof 
14.
 
15.
:disp 
16.
For %%i in (%*) do if exist %%i: echo Laufwerk !fs_drive%%i!:\ !fs_space%%i! 
17.
::------snapp getfreespaceMitLaufwerksprüfung.bat
Just kidding... *gg

Biber

P.S.
@27119
Kann die Diskpart.exe denn auch andere Laufwerke als die des eigenen Rechners?
Ich dachte, das M$-Beispiel bezieht sich auf einen Server mit 6 Logischen Laufwerks-Buchstaben??
Bitte warten ..
Mitglied: Xaero1982
04.04.2006 um 20:29 Uhr
Natürlich gehts auch viel kürzer

01.
On Error Resume Next 
02.
Pfad = "c:\hdd.txt" 
03.
set fso = CreateObject("Scripting.FileSystemObject") 
04.
 
05.
Const CONVERSION_FACTOR = 1048576 
06.
Const WbemAuthenticationLevelPktPrivacy = 6 
07.
 
08.
strUser = InputBox("Please enter the user name: ") 
09.
strPassword = InputBox ("Please enter the Passwort: ") 
10.
strComputer = InputBox ("Please enter the Computername: ") 
11.
strNamespace = "root\cimv2" 
12.
 
13.
'Verbindung zum WMI Namespace herstellen================ 
14.
    Set objWbemLocator = CreateObject("WbemScripting.SWbemLocator") 
15.
    Set objWMIService = objwbemLocator.ConnectServer (strComputer, strNamespace, strUser, strPassword) 
16.
    objWMIService.Security_.authenticationLevel = WbemAuthenticationLevelPktPrivacy 
17.
'======================================================= 
18.
   Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_LogicalDisk") 
19.
 
20.
   For Each objItem In colItems 
21.
      Message = Message & ("Name: " & objItem.Name) &vbcrlf 
22.
      Message = Message & ("FreeSpace: " & objItem.FreeSpace / CONVERSION_FACTOR & " MB") &vbcrlf 
23.
      Message = Message & ("Size: " & objItem.Size / CONVERSION_FACTOR & " MB") &vbcrlf 
24.
   Next 
25.
    set fsoFile = fso.CreateTextFile(Pfad, true) 
26.
    fsoFile.WriteLine(Message) 
27.
    fsoFile.close 
28.
    set fsoFile = nothing 
29.
    set fso = nothing
Wobei der Großteil hier wieder nur für den Connect auf anderen Maschinen drauf geht. Solls nur für den localen sein geht wieder jede Menge weg

*Editiert und Fehler behoben*
Bitte warten ..
Mitglied: Biber
04.04.2006 um 20:37 Uhr
*gggg @Xaero1982
...ich sehe schon, wir kommen ins Geschäft...

Ich könnte aus meinem Batch auch noch ein paar Zeilen eindampfen.

Aber ich denke, wir habe nun beide gezeigt, dass man auch mit Bordmitteln und MacGywer-Methoden unter Windows zu Ergebnissen kommen kann.

Weiterhin vergnüglichen Abend
Biber
Bitte warten ..
Mitglied: Xaero1982
04.04.2006 um 20:42 Uhr
))
hehe joa batch vs wsh

mal was anderes *g

wünsch ich dir auch
Bitte warten ..
Mitglied: The-Warlord
05.04.2006 um 11:58 Uhr
Super das mit der Überprüfung ob das Laufwerk vorhanden ist oder nicht)

Also ich versuch das dann mal einzubinden (Letztendlich muss er mir ja den Netzlaufwerkpfad anzeigen, und nicht den Lokalen Laufwerksbuchstaben, sonst weiss man nicht genau wo sich der freie Speicherplatz befindet)

Weiterhin sollen die abzufragenden Netzlaufwerke in einer Datei stehen die zeilenweise ausgelesen wird.

Nur soviel zu meinen Plänen.

Ich bedanke mich recht herzlich für die Hilfestellungen und Problemlösungen die mir maßgeblich von Biber & Xaero1982 zu Verfügung gestellt worden sind.

DANKE!

MfG Simeon Steffen
Bitte warten ..
Mitglied: Xaero1982
05.04.2006 um 12:39 Uhr
Und nun ? wie weiter?
Wo brauchste Hilfe ?

Kannst ja dann die Textdatei auslesen in der alles steht.

Netzlaufwerke werden bei mir zumindest auch mit angezeigt
Bitte warten ..
Mitglied: Biber
05.04.2006 um 12:55 Uhr
Jo, halt ich auch für lösbar...

Wenn die Textdatei einen Laufwerksbuchstaben je Zeile hätte, dann halt auslesen mit
FOR /F.. IN..(textdatei.txt) DO ....
anstelle der jetzigen FOR ..IN..( F G H I J) DO..-Schleife.

Wenn die nur aus aus einer Zeile besteht ( U V W X X Z), dann diese Zeile in eine Variable einlesen mit:
Set /P Alldisks=<textdatei.txt

Soweit zum Thema Batch.

Grüße Biber
Bitte warten ..
Mitglied: The-Warlord
05.04.2006 um 12:58 Uhr
Xaero1982 ich hab dein Skript mal geprüft (das kürzere)

Skript:
On Error Resume Next
Pfad = "H:\hdd.txt"
set fso = CreateObject("Scripting.FileSystemObject")

Const CONVERSION_FACTOR = 1048576
Const WbemAuthenticationLevelPktPrivacy = 6

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

'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
set fsoFile = fso.CreateTextFile(Pfad, true)
fsoFile.WriteLine(Message)
fsoFile.close
set fsoFile = nothing
set fso = nothing
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_LogicalDisk")
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_LogicalDisk WHERE name='C:'")

Die Textdatei h:\hdd.txt ist leer

Hab ich schon wieder was falsch gemacht???
Bitte warten ..
Mitglied: Xaero1982
05.04.2006 um 13:48 Uhr
Naja also die letzten beiden Zeilen kannst du löschen....

Was gibst du denn bei den Eingaben ein?

Setz mal vor das
01.
fsoFile.WriteLine(Message)
noch ein
01.
MSGBOX Message
Damit bekommst du noch eine Messagebox mit der Ausgabe .. wenn die Leer ist stimmt was nicht.
Welches OS benutzt du?
Bitte warten ..
Mitglied: The-Warlord
05.04.2006 um 13:52 Uhr
Gibt es eine möglichkeit die Schleife über mehre reihen zu erweitern (strukturieren)

set lwchar=x

@FOR /F %%a IN (netzlaufwerke.dat) DO (net use %lwchar%^: %%a)

sonst müsste ich den gesamten inhalt meiner Schleife in eine Zeile schreiben

Beispielsweise wie unter linux (strukturierbar)

if a <> b then
commando
commando
commando
fi

Ich hoffe euch stören so noob fragen nicht, ich hab hier auch bücher da steht sowas aber net drinnen;-(
Bitte warten ..
Mitglied: Xaero1982
05.04.2006 um 14:04 Uhr
Sorry, keine ahnung mit batchnoob ...

wie siehts mit meinem Script aus? Und meine Fragen ?
Bitte warten ..
Mitglied: The-Warlord
05.04.2006 um 14:10 Uhr
Skript:
set zcount=0
@FOR /F %%a IN (netzlaufwerke.dat) DO (set /a zcount=%zcount% + 1)

echo %zcount%

Ergebnis:
H:\Skripte>set zcount=0
H:\Skripte>set /a zcount=0 + 1
H:\Skripte>set /a zcount=0 + 1
H:\Skripte>set /a zcount=0 + 1
H:\Skripte>echo 1

Warum verändert er in der Schleife die variable nicht sondern übernimmt sie unverändert;-(

Ich scheine völlig untalentiert;-(( *grml*
Bitte warten ..
Mitglied: Biber
05.04.2006 um 14:11 Uhr
Moin The-Warlord,

so unähnlich ist es unterm CMD der Linux-Shell nicht.
Statt

if a <> b then
commando
commando
commando
fi
....

dann im CMD-Batch:
if a NEQ b (
commando
commando
commando
)

....nur mit dem Unterschied, dass neue Zeilen vor allen Dingen anfangen dürfen nach einer KlammerAuf nach IF [%var%] == [wert] .. (oder LSS, GTR, NEQ, GEQ... etc als Vergleichsoperator)
-oder-
KlammerAuf nach einer FOR..IN..(..) DO - Anweisung.

Also:

If [%date%]==[01.01.2007] (
echo Frohes neues Jahr!
echo Und Guten Rutsch!
)

-oder-
FOR ..... in (bla bla blubb) DO (
Call WhateverUWant#
echo Fertig!
)

If [%date%]==[01.01.2007] (
...
) ELSE (
....
)

..........ist auch erlaubt.
Details siehe unter
IF /?
FOR /?
SET /?

am CMD-Prompt.

Gruß Biber

/Edit: die zweite Frage: Suche mal über Forumssuche hier nach "DelayedExpansion".
Da hab ich das schon mal erklärt.
Bitte warten ..
Mitglied: Xaero1982
05.04.2006 um 14:12 Uhr
Ok, nun mal ne blöde Frage:

Was genau ist dein Ziel?

Bitte mal präzise schreiben was du GENAU machen und haben willst?!?
Bitte warten ..
Mitglied: The-Warlord
05.04.2006 um 15:17 Uhr
Xaero1982 mach ich

Ich will ein Skript schreiben, dass mir aus meiner Datei (Netzlaufwerk.dat) eine anzahl von Zeilen ausliest (mit Netzlaufwerkpfaden).

1. Mit diesen Pfaden soll ein Netzlaufwerk erstellt werden (net use x: %pfad%)
2. jetzt wollte mir über den DIR Befehl die grösse des verfügbaren Speicherplatzes angezeigen lassen (Zeile raussuchen, token auswählen, in Mbyte konvertieren) diese Information muss dann in eine Textdatei geschreiben werden.
3. Das Netzlaufwerk wieder trennen
4. Punkte 1-3 abarbeiten bis EOF von Netzlaufwerkdatei erreicht ist
5. per telnet diese Informationen an eine E-mail Adresse schicken

Die batch-Datei soll weiterhin keine Eingaben benötigen, sie soll als geplanter Task morgens die Inforamtionen an eine EMail-Adresse befördern.

Es gibt Tools die das vermögen (klickibunti... etc.), das ist mir schon bewusst
Mein ziel ist es durch diese kleine Aufgabe mir Grundkenntnisse im Bereich Batch-Shell, Syntax, programmiertechnisches Verständnis etc.
ein wenig zu steigern.

Da ich früher (1-2 Jahre her) mich mal mit der BASH ein wenig auseinander gesetzt habe (Automatisches Sicherungsskript für Oracle Datenbank auf Sun Solaris 8) kam ich zu den Grundgedanken die Shell von Windows zu nehmen, da siese für mich am ähnlichsten wirkt.
Das ich da gänzlich untalentiert bin sieht man ja an meinen postings.

Ich hoffe ich konnte Ziel und zweck einigermaßen vermitteln

Mir is natürlich auch wichtig eure Ansätze und techniken mitzunutzen, das eigentliche Skript wollte ich aber Selber schreiben (Lerneffekt).

Mir hat das ganze bis Jetzt auch schon geholfen, ich hatte leider bis Jetzt leider nur geringe Erfolgserlebnisse;-( (Bis auf die Tatsache das mir viele Leute helfen wollen, bzw. es getan haben) aber ich denke es wird schon.

Im Moment bin ich dabei die Verdammte Variablen deklaration bzw. das rechnen mit Variablen zu ergründen (Biber hat mir nen Link geposted so mit %%%i:~0,1%% Aktionen, da muss ich erstmal dahintersteigen)

Ach zu WSH... wenn ich noch nichma die Shell raffe denke ich sollte ich vom WSH erstmal die Finger lassen... Oder?
Bitte warten ..
Mitglied: Xaero1982
05.04.2006 um 15:28 Uhr
Ach, das sehe ich nicht so ...
Ich hab auch keinen Schimmer von shell :o)

Und ein wenig von WSH

Und verflucht es hat auf diesem Planeten keiner AHnung von WMI außer den MS ScriptingGuys und die antworten nicht

Edit:
Das mit den Netzlaufwerkverbindungen ist z.b. in meinem Fall absolut überflüssig..

Per Telnet schicken? Na ich weiß nicht ...
Bitte warten ..
Mitglied: The-Warlord
05.04.2006 um 15:48 Uhr
Deine Skripte sehen aber ein wenig brutaler aus wei meine
Bitte warten ..
Mitglied: Xaero1982
05.04.2006 um 18:23 Uhr
Ac h was denn ist doch alles easy
Bitte warten ..
Mitglied: The-Warlord
06.04.2006 um 10:14 Uhr
So ich hab eine vorläufige Variante meines Werkes *freu*

Nochmals Danke... Ohne VIEL Hilfe wärs nicht möglich gewesen

Skript:

@echo off & setlocal enabledelayedexpansion

set lwchar=x:

for /f %%a in (Netzlaufwerke.dat) do (
@354 use %lwchar% %%a
@echo net use %lwchar% %%a

@for /f "tokens=3" %%i in ('dir /-c %lwchar%^|find /i "Bytes fre"') do (
@echo Laufwerk %%a hat noch %%i freier Speicherplatz >> fs_info.txt
)
@354 use %lwchar% /delete
)

Ergebnis:
Ich bin Glücklich

Okay dann zupflückt mal mein slow & dirty Skript)

Edit:
Die umrechnung in MByte fehlt noch, ausserdem wollte ich noch die Plausiblitäts Prüfung einbauen (Wenn ein Netzlaufwerk nicht verfügbar ist)
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Windows 7
Computer OU auslesen bzw. abfragen (2)

Frage von mexx991 zum Thema Windows 7 ...

Netzwerkgrundlagen
gelöst Beliebigen Zeitserver auf Zeit abfragen (4)

Frage von blade999 zum Thema Netzwerkgrundlagen ...

Windows Netzwerk
gelöst Alle Drucker in verschiedenen Netzen Abfragen (4)

Frage von ChrisIO zum Thema Windows Netzwerk ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
M.2 SSD wird nicht erkannt (14)

Frage von uridium69 zum Thema Festplatten, SSD, Raid ...