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
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)
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")=> 418661182Oder andersherum mit der
Hex-Funktion:
? Hex(418661182)
=> 18F4433EDer dezimale Wert entspricht dem, was du von
Drive.SerialNumber bekommst.
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
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.