zeusplanet
Goto Top

Partitionen entfernt auslesen

Guten Morgen zusammen,

ich benötige alle lokalen Partitionen von allen Servern, welche dann am Besten pro Server in eine Variable geschrieben werden soll.
Hier stecke ich leider fest:

for /F "delims=" %%i in ("!serverlist!") do for %%A in (%%i) do "%tools%\psexec.exe" /accepteula \\%%A -u %domain%\%user% -p %password% -h cmd /c for /F "tokens=2 delims==" %%d in ('wmic logicaldisk where "drivetype=3" get name /format:value') do echo %%d  

Das echo ist übrigens erst einmal nur ein Test.

Problem bis dato: Bei den 2008er Server funktioniert obige Anforderung. Beim 2003er Server hängt psexec einfach. Cursor blinkt fröhlich. Es geht nicht weiter. Gibt es eine bessere Möglichkeit?
Und wie bekomme ich die Partitionen dann in eine Variable rein, dass da nachher "C:,D:,E:" drin steht?

Dank und schöne Grüße

Content-ID: 248400

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

Ausgedruckt am: 22.11.2024 um 11:11 Uhr

colinardo
colinardo 05.09.2014 um 11:06:42 Uhr
Goto Top
Moin,
machs doch mit einem VBS-Script:
Dim strPathComputers, strPathLog, fso, objLog, arrComputers, objWMI, colDrives,drive, strAllDrives
strPathComputers = "C:\temp\computers.txt"  
strPathLog = "C:\temp\ergebnis.txt"  

Set fso = CreateObject("Scripting.Filesystemobject")  
Set objLog = fso.OpenTextFile(strPathLog,2,True)
arrComputers = Split(fso.OpenTextFile(strPathComputers,1).ReadAll(),vbNewLine)
For i = 0 To UBound(arrComputers)
	If arrComputers(i) <> "" Then	  
		Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & arrComputers(i) & "\root\cimv2")   
		Set colDrives = objWMI.ExecQuery("Select * from Win32_LogicalDisk Where Drivetype=3")   
		If colDrives.Count > 0 Then
			strAllDrives = ""  
		   	For Each drive In colDrives
		   		strAllDrives = strAllDrives & drive.Name & ","  
		   	Next
		   	strAllDrives = Left(strAllDrives, Len(strAllDrives)-1)
		   	objLog.WriteLine arrComputers(i) & "=" & strAllDrives  
		End If
	End If
Next
objLog.Close
Set objLog = Nothing
Set fso = Nothing
Grüße Uwe
zeusplanet
zeusplanet 05.09.2014 um 11:34:17 Uhr
Goto Top
Hi Uwe,

Danke dafür erst einmal, aber das wollte ich eben umgehen.
Ich will, dass das Ganze in einem Batch-Skript abgearbeitet wird.

Vielleicht hat jemand noch eine andere/weitere Lösung?

Grüße
colinardo
colinardo 05.09.2014 aktualisiert um 11:52:52 Uhr
Goto Top
Zitat von @zeusplanet:
Danke dafür erst einmal, aber das wollte ich eben umgehen.
gib es einen bestimmten Grund ?
Ich will, dass das Ganze in einem Batch-Skript abgearbeitet wird.
Vielleicht hat jemand noch eine andere/weitere Lösung?
dann machs doch ohne PSEXEC mit dem Node-Parameter von WMIC:
for /F "delims=" %%a in ("!serverlist!") do @(  
	set drives=
	for /F "tokens=2 delims==" %%b in ('wmic /node:%%a logicaldisk where drivetype^=3 get name /format:List ^|findstr /ir "^Name"') do @(  
			if not defined drives (set drives=%%b) else (set drives=!drives!,%%b)
	)
	echo Auf Server '%%a' sind folgende Laufwerke vorhanden: !drives!  
)
zeusplanet
zeusplanet 05.09.2014 um 12:13:14 Uhr
Goto Top
Hi Uwe,

den Grund hatte ich schon genannt. Dass der Grund für den Einen oder Anderen unter Umständen nicht aussreicht, ist mir bewusst. Geschmäcker sind eben verschieden. Ich würde es "schön" finden, wenn sich das eben einfach mit einen paar batch Zeilen lösen lässt.

Danke für deinen Vorschlag, dann müsste ich das Skript aber lokal auf jedem Server ausführen, oder sehe ich das jetzt falsch? Das passt nicht zum vorhandenen Skript-Stil.

MfG
colinardo
colinardo 05.09.2014 aktualisiert um 12:59:19 Uhr
Goto Top
den Grund hatte ich schon genannt.
wo ?
Geschmäcker sind eben verschieden.
kein Problem face-smile
Zitat von @zeusplanet:
Danke für deinen Vorschlag, dann müsste ich das Skript aber lokal auf jedem Server ausführen, oder sehe ich das
jetzt falsch?
nein musst du nicht, denn hier wird ja der NODE Parameter von WMIC verwendet der die Server Remote übers Netz abfragt ! Der Useraccount der das Script ausführt muss natürlich entsprechende Rechte auf den Servern besitzen, aber das sollte klar sein.
zeusplanet
zeusplanet 10.09.2014 um 10:20:47 Uhr
Goto Top
Guten Morgen Uwe,

sagte ich doch. Gründe (Ich will, dass das Ganze in einem Batch-Skript abgearbeitet wird.) sind für manche ausreichend, für andere wiederrum nicht. face-wink

Ich habe dein Skript mal eins zu eins in eine neue Batch abgelegt. Als Ausgabe bekomme ich wohl aber nur das Laufwerk vom ersten Server:

for /F "delims=" %a in ("!serverlist!") do @(  
set drives=
 for /F "tokens=2 delims==" %b in ('wmic /node:%a logicaldisk where drivetype=3  
get name /format:List |findstr /ir "^Name"') do @(if not defined drives (set dri  
ves=%b )  else (set drives=!drives!,%b ) )
 echo Auf Server '%a' sind folgende Laufwerke vorhanden: !drives!  
)
,E: Server 'TS01,FS01,SERVER02' sind folgende Laufwerke vorhanden: C:  

pause
Drücken Sie eine beliebige Taste . . .

Was stimmt da noch nicht?
colinardo
colinardo 10.09.2014 aktualisiert um 10:35:11 Uhr
Goto Top
Moin,
Zitat von @zeusplanet:
Ich habe dein Skript mal eins zu eins in eine neue Batch abgelegt. Als Ausgabe bekomme ich wohl aber nur das Laufwerk vom ersten
das war ja nicht als vollständiges Script zu sehen, denn deine Variable !serverlist! ist dort ja gar nicht deklariert !
Und von wegen 1zu1 kopiert face-big-smile !!! Da stimmt so einiges bei dir nicht was aber in meinem geposteten Script vorhanden ist ! Schau mal bitte ganz genau hin... (z.B. die Laufvariablen nicht mit doppelten Prozentzeichen versehen dann ein fehlendes ^ etc...)

Hast du überhaupt setlocal ENABLEDELAYEDEXPANSION in deinem Script ?

Mein Script läuft hier einwandfrei.

Ansonsten sind die Firewalls der Server nicht für den Remotezugriff konfiguriert.
zeusplanet
zeusplanet 10.09.2014 um 10:50:02 Uhr
Goto Top
Hätte ich dazu schreiben sollen. Natürlich steht das drin. Hoppla, war etwas unausführlich. Bin im Stress. face-big-smile
Und ja, ich kann die Server per WMI abfragen. Nutze ja auch andere Abfragen.

Hier der 100%ige Inhalt der Batch-Datei:

setlocal enabledelayedexpansion
set serverlist=TS01,FS01,SERVER02

for /F "delims=" %%a in ("!serverlist!") do @(  
	set drives=
	for /F "tokens=2 delims==" %%b in ('wmic /node:%%a logicaldisk where drivetype^=3 get name /format:List ^|findstr /ir "^Name"') do @(  
			if not defined drives (set drives=%%b) else (set drives=!drives!,%%b)
	)
	echo Auf Server '%%a' sind folgende Laufwerke vorhanden: !drives!  
)
pause
colinardo
colinardo 10.09.2014 aktualisiert um 10:55:58 Uhr
Goto Top
Bei !serverlist! ging ich vom Pfad einer Textdatei aus in dem die Server untereinander stehen ...