| 

.NET C# Java Javascript Exception

3
Hi,

ich habe die Anforderung die Partitionen eines PCs in Windows neu zu vergeben. Beispiel:

IST Zustand:

Volume ## Ltr Label         Fs    Type       Size    Status  Info
--------------------------------------------------------------------------
Volume 0 MEDIA UDF CD-ROM 11 GB Healthy
Volume 1 C System NTFS Partition 50 GB Healthy System
Volume 2 D Data NTFS Partition 50 GB Healthy
Volume 3 E Encryption NTFS Partition 300 MB Healthy


So soll es aussehen:

Volume ## Ltr Label         Fs    Type       Size    Status  Info
--------------------------------------------------------------------------
Volume 0 MEDIA UDF CD-ROM 11 GB Healthy
Volume 1 C System NTFS Partition 50 GB Healthy System
Volume 2 F Data NTFS Partition 50 GB Healthy
Volume 3 Encryption NTFS Partition 300 MB Healthy



Im ersten Schritt werden alle lokalen Laufwerksbuchstaben (bis auf C:) entfernt. Damit ergibt sich folgendes Bild:

Volume ## Ltr Label         Fs    Type       Size    Status  Info
--------------------------------------------------------------------------
Volume 0 MEDIA UDF CD-ROM 11 GB Healthy
Volume 1 C System NTFS Partition 50 GB Healthy System
Volume 2 Data NTFS Partition 50 GB Healthy
Volume 3 Encryption NTFS Partition 300 MB Healthy


Nun muss ich irgendwie die Volume Nummer anhand des Labels herausfinden. Wie kann ich dass am besten bewerkstelligen? Die diskpart Ausgabe via Batch ist mir zu wackelig, vor allem weil die Ausgabe sich bei unterschiedlichen OS Sprachen ändert. Aber in den WMI Klassen (z.B. Win32_DiskPartition) sind andere Nummern hinterlegt, als in diskpart. Programmiersprache ist mir eigentlich egal, am Ende muss ich es in einer total proprietären Sprache umsetzen, es geht mir nur darum, wie ich ohne Bastelei sauber an die Volume Nummer komme um diskpart dann scriptgesteuert aufrufen zu können.

Gruss Dave
04.09.2013
david.koenig09 173 6
3 Antworten
0
Müsste grob so gehen (kann's nicht testen im Moment):

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\" & strComputer & "\root\cimv2")

Set colDrives = objWMIService.ExecQuery ("Select * from Win32_LogicalDisk")

For Each objDrive in colDrives
If (objDrive.VolumeName = "Data") Then
objVolume.DriveLetter = "F:"
objVolume.Put_
End If
Next


Nützliche Scripts rund um Disk: Scripts to manage Disk Drives and Volumes
05.09.2013
Jaksa 4,0k 2 8
Jaksa 4,0k 2 8
0
Hi,

vielen Dank für die Antwort, leider geht das nicht. Die Laufwerke verschwinden nämlich aus dem Win32_LogicalDisk Namespace wenn sie keinen Buchstaben mehr zugeordnet haben.

Gruss Dave
05.09.2013
david.koenig09 173 6
Dann dreh den Spiess um: entferne die überflüssigen Buchstaben erst zum schluss. Wenn das Ausgangspartitionierung immer gleich ist, dann hast Du es noch einfacher, dann musst Du nur aus D: ein F: machen
Jaksa 05.09.2013
0
Ja das ist mein aktueller Ansatz, der ist aber auch problembehaftet:

Beispiel:

C - System
D - Data
E - Encryption
F - CD-ROM
G - Kartenleser 1
H - Kartenleser 2
...


Jetzt soll aber Laufwerk D den Buchstaben F bekommen. Da liegt aber das CD-ROM. Also muss ich erst CD-ROM verschieben das gewünschte Ziel. Aber auch da könnte wieder irgendein Device im Weg liegen.
Genau dass ist der Grund, warum ich erst alle Buchstaben löschen will.
05.09.2013
david.koenig09 173 6

Stelle deine Batch-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH