Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Auslesen Seriennummer der Festplatte # Abweichung zwischen VBA & PowerShell

Begonnen von Lehrling Frank, August 06, 2023, 09:03:59

⏪ vorheriges - nächstes ⏩

Lehrling Frank

Guten Morgen Ihr Fachleute,
über einen VBA Code lese ich mir die Seriennummer der Festplatte "C" aus. Wenn ich diese, mit der Seriennummer die ich mir über PowerShell habe anzeigen lassen vergleiche, kommen unterschiedliche Seriennummern heraus. Die Seriennummer über Powershell ist eine Buchstaben-Zahlenkombination, über VBA eine reine Zahlenkombination und deutlich kürzer. Was ist die Erklärung dafür und ist es möglich die per VBA ermittelte Seriennummer zu "wandeln"?
Hier mein Code:

Dim System As New FileSystemObject, Fetsplattenseriennummer As Drive
Set Fetsplattenseriennummer = System.GetDrive("C")
MsgBox "Die Festplattenseriennummer lautet: " & Fetsplattenseriennummer.SerialNumber
Set Fetsplattenseriennummer = Nothing
Set System = Nothing

Wünsche euch einen schönen Sonntag und bedanke mich schon jetzt für eure Antworten.

Beste Grüße
Lehrling Frank

markusxy

Liefert die Klasse welche PowerShell nutzt eventuell eine andere Darstellung?

Mein erster Gedanke wäre einmal Dezimal- und einmal Hexdarstellung der selben Information.
Einfach mal kurz nachsehen oder prüfen.

z.B:
Debug.Print "Die Festplattenseriennummer lautet: " & Hex$(Fetsplattenseriennummer.SerialNumber)

PhilS

Zitat von: Lehrling Frank am August 06, 2023, 09:03:59über einen VBA Code lese ich mir die Seriennummer der Festplatte "C" aus. Wenn ich diese, mit der Seriennummer die ich mir über PowerShell habe anzeigen lassen vergleiche, kommen unterschiedliche Seriennummern heraus. Die Seriennummer über Powershell ist eine Buchstaben-Zahlenkombination, über VBA eine reine Zahlenkombination und deutlich kürzer. Was ist die Erklärung dafür und ist es möglich die per VBA ermittelte Seriennummer zu "wandeln"?
Erstmal wirfst du hier zwei komplett verschiedene Dinge in einen Topf.
"C:" ist der Buchstabe der einem Laufwerk (Volume) zugewiesen ist. Eine Festplatte kann in mehrere Laufwerke partitioniert sein, es können aber auch mehrere Festplatten zu einem Laufwerk zusammengefasst sein; entweder durch Hardware (z.B. RAID Controller) oder Software (Windows Dynamic Disk).
Im Englischen: Drive=Laufwerk, Disk=Festplatte

Drive.SerialNumber liefert dir die Seriennummer des Volumes (also des Laufwerks). Diese wird von Windows (beim Formatieren?) vergeben und ist nicht identisch mit der Seriennummer, die auf dem Etikett deiner Festplatte steht.

Was du mit Powershell ermittelt hast, kann ich nicht nachvollziehen, da du den Code verschwiegen hast. Nur unter manchen Umständen ist es überhaupt möglich die Seriennummer der Festplatte auszulesen. Das wäre dann etwas völlig anderes als die Seriennummer des Laufwerks ( Drive.SerialNumber ).

Mit dem vol Befehl auf der Befehlszeile bekommst du die ebenfalls die Seriennummer des Laufwerks, allerdings in Hexadezimal-Notation.
Beispiel: 18F4-433E
Das kannst du mit der Val-Funktion in Dezimalschreibweise umwandeln:
? val("&H18F4433E")
=> 418661182

Oder andersherum mit der Hex-Funktion:
? Hex(418661182)
=> 18F4433E


Der dezimale Wert entspricht dem, was du von Drive.SerialNumber bekommst.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

Lehrling Frank

Hallo Markusxy, hallo PhilS,
super lieben Dank für die Erklärungen. Wieder viel dazu gelernt (eben Lehrling  ;) )
Ganz toll die umfassende und verständliche Erklärung von PhilS.
Ich gehe davon aus, dass die von Windows erzeugte Seriennummer nicht unique ist.

Nette Grüße und ich wünsche allen Lesern einen guten Wochenstart...
Lehrling Frank


 

PhilS

Zitat von: Lehrling Frank am August 06, 2023, 19:41:09Ich gehe davon aus, dass die von Windows erzeugte Seriennummer nicht unique ist.
Korrekt. Eine Windows-Installation wird zwar keine für das lokale System doppelte Volume-Seriennummer erzeugen, aber wenn eine Volume geclont wird oder die Seriennummer manuell geändert wird, kann es zu doppelten Seriennummern kommen.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor