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

Partitionen entfernt auslesen

Frage Entwicklung Batch & Shell

Mitglied: zeusplanet

zeusplanet (Level 1) - Jetzt verbinden

05.09.2014 um 10:22 Uhr, 668 Aufrufe, 9 Kommentare

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:

01.
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
Mitglied: colinardo
05.09.2014 um 11:06 Uhr
Moin,
machs doch mit einem VBS-Script:
01.
Dim strPathComputers, strPathLog, fso, objLog, arrComputers, objWMI, colDrives,drive, strAllDrives 
02.
strPathComputers = "C:\temp\computers.txt" 
03.
strPathLog = "C:\temp\ergebnis.txt" 
04.
 
05.
Set fso = CreateObject("Scripting.Filesystemobject") 
06.
Set objLog = fso.OpenTextFile(strPathLog,2,True) 
07.
arrComputers = Split(fso.OpenTextFile(strPathComputers,1).ReadAll(),vbNewLine) 
08.
For i = 0 To UBound(arrComputers) 
09.
	If arrComputers(i) <> "" Then	 
10.
		Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & arrComputers(i) & "\root\cimv2")  
11.
		Set colDrives = objWMI.ExecQuery("Select * from Win32_LogicalDisk Where Drivetype=3")  
12.
		If colDrives.Count > 0 Then 
13.
			strAllDrives = "" 
14.
		   	For Each drive In colDrives 
15.
		   		strAllDrives = strAllDrives & drive.Name & "," 
16.
		   	Next 
17.
		   	strAllDrives = Left(strAllDrives, Len(strAllDrives)-1) 
18.
		   	objLog.WriteLine arrComputers(i) & "=" & strAllDrives 
19.
		End If 
20.
	End If 
21.
Next 
22.
objLog.Close 
23.
Set objLog = Nothing 
24.
Set fso = Nothing
Grüße Uwe
Bitte warten ..
Mitglied: zeusplanet
05.09.2014 um 11:34 Uhr
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
Bitte warten ..
Mitglied: colinardo
05.09.2014, aktualisiert um 11:52 Uhr
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:
01.
for /F "delims=" %%a in ("!serverlist!") do @( 
02.
	set drives= 
03.
	for /F "tokens=2 delims==" %%b in ('wmic /node:%%a logicaldisk where drivetype^=3 get name /format:List ^|findstr /ir "^Name"') do @( 
04.
			if not defined drives (set drives=%%b) else (set drives=!drives!,%%b) 
05.
06.
	echo Auf Server '%%a' sind folgende Laufwerke vorhanden: !drives! 
07.
)
Bitte warten ..
Mitglied: zeusplanet
05.09.2014 um 12:13 Uhr
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.

Mit freundlichen Grüßen
Bitte warten ..
Mitglied: colinardo
05.09.2014, aktualisiert um 12:59 Uhr
den Grund hatte ich schon genannt.
wo ?
Geschmäcker sind eben verschieden.
kein Problem
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.
Bitte warten ..
Mitglied: zeusplanet
10.09.2014 um 10:20 Uhr
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.

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:

01.
for /F "delims=" %a in ("!serverlist!") do @( 
02.
set drives= 
03.
 for /F "tokens=2 delims==" %b in ('wmic /node:%a logicaldisk where drivetype=3 
04.
get name /format:List |findstr /ir "^Name"') do @(if not defined drives (set dri 
05.
ves=%b )  else (set drives=!drives!,%b ) ) 
06.
 echo Auf Server '%a' sind folgende Laufwerke vorhanden: !drives! 
07.
08.
,E: Server 'TS01,FS01,SERVER02' sind folgende Laufwerke vorhanden: C: 
09.
 
10.
pause 
11.
Drücken Sie eine beliebige Taste . . .
Was stimmt da noch nicht?
Bitte warten ..
Mitglied: colinardo
10.09.2014, aktualisiert um 10:35 Uhr
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 !!! 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.
Bitte warten ..
Mitglied: zeusplanet
10.09.2014 um 10:50 Uhr
Hätte ich dazu schreiben sollen. Natürlich steht das drin. Hoppla, war etwas unausführlich. Bin im Stress.
Und ja, ich kann die Server per WMI abfragen. Nutze ja auch andere Abfragen.

Hier der 100%ige Inhalt der Batch-Datei:

01.
setlocal enabledelayedexpansion 
02.
set serverlist=TS01,FS01,SERVER02 
03.
 
04.
for /F "delims=" %%a in ("!serverlist!") do @( 
05.
	set drives= 
06.
	for /F "tokens=2 delims==" %%b in ('wmic /node:%%a logicaldisk where drivetype^=3 get name /format:List ^|findstr /ir "^Name"') do @( 
07.
			if not defined drives (set drives=%%b) else (set drives=!drives!,%%b) 
08.
09.
	echo Auf Server '%%a' sind folgende Laufwerke vorhanden: !drives! 
10.
11.
pause
Bitte warten ..
Mitglied: colinardo
10.09.2014, aktualisiert um 10:55 Uhr
Bei !serverlist! ging ich vom Pfad einer Textdatei aus in dem die Server untereinander stehen ...
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Batch & Shell
Eventlog Druckjobs mit VBS auslesen (2)

Frage von joni2000de zum Thema Batch & Shell ...

Batch & Shell
gelöst Appx aus Image auslesen und entfernen (9)

Frage von Markus2016 zum Thema Batch & Shell ...

JavaScript
gelöst Dropdownfeld auslesen und mit AJAX und JS an PHP senden (7)

Frage von ITFlori zum Thema JavaScript ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (15)

Frage von JayyyH zum Thema Switche und Hubs ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...