Moin leute,
ich wäre sehr dankbar wen mir jemand erklären kann wie man mit AutoIt die Hardware ID von der HDD zB auslesen könnte.
Danke im vorraus !!
Moin leute,
ich wäre sehr dankbar wen mir jemand erklären kann wie man mit AutoIt die Hardware ID von der HDD zB auslesen könnte.
Danke im vorraus !!
Wenn Du mit Hardware-ID die Seriennummer meinst, dann kannst Du
[autoit]
DriveGetSerial()
benutzen.
welche id genau?
was meinst du damit, oder noch besser für was brauchst dus?
bisschen mehr beschreiben bitte
Also ich würde es dafür bruachen das gewisse Tools nur auf bestimmten PCs gestartet werden in dem eine Abfrage auf die Hardware ID gemacht wird, jedoch sollte das auch mit "DriveGetSerial()" klappen wie xp_fan sagt.
muss es noch probieren, aber Danke !!!
Diese ID nicht nicht eindeutig.
ich würde eine kobination aus mehren werten machen, also z.b. noch @cpuarch und die betriebssystem version und noch irgenwas halt nehmen, das gesant is dann schon ziemlich eindeutig, da es unwahrscheinlich ist das mehrere die komplett gleiche Konfiguration und auch noch gleiche Seriennummer hat.
Mfg
DriveGetSerial ist in der Tat nicht so geeignet, da sie beim formatieren der Partition vergeben wird und sich somit beim nächsten formatieren ändern wird.
Man kann aber auch die Hersteller-Seriennummer der Festplatte auslesen, die IMHO einmalig ist (oder zumindest sein sollte).
Dazu hatte ich mal eine Funktion geschrieben:
; Anfang Beispiel
#include <Array.au3> ; wird nur für _ArrayDisplay benötigt
$sDrive = 'c:'
$Ret = _GetDriveInfo($sDrive)
If IsArray($Ret) Then
_ArrayDisplay($Ret, 'Informationen über Laufwerk "' & $sDrive & '"')
Else
MsgBox(0, 'Fehler', $Ret)
EndIf
; Ende Beispiel
;===============================================================================
; Function Name: _GetDriveInfo($sDrive)
; Description:: Erweiterte Informationen zu einer Festplatte/USB-Stick
; Parameter(s): $sDrive = Laufwerksbuchstabe
; Requirement(s): ---
; Return Value(s): 2D-Array mit Bezeichnung und Wert (siehe Beispiel)
; Author(s): Oscar (http://www.autoit.de)
;===============================================================================
Func _GetDriveInfo($sDrive)
$sDrive = StringRegExpReplace($sDrive, '(?i)(.*)([a-z]{1}:)(.*)', '$2')
Local $sDriveType = DriveGetType($sDrive)
If $sDriveType <> 'Fixed' And $sDriveType <> 'Removable' Then SetError(1, 0, 1)
If Not FileExists($sDrive) Then Return SetError(1, 0, 1)
Local $wbemFlagReturnImmediately = 0x10
Local $wbemFlagForwardOnly = 0x20
Local $colItems = ''
Local $aPartition, $aPhysicalDrive, $aOut[14][2]
$objWMIService = ObjGet('winmgmts:\\localhost\root\CIMV2')
If Not IsObj($objWMIService) Then Return SetError(2, 0, 2)
$colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_LogicalDiskToPartition', 'WQL', $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
If IsObj($colItems) then
For $objItem In $colItems
If StringInStr($objItem.Dependent, '"' & $sDrive & '"') Then
$aPartition = StringRegExp($objItem.Antecedent, 'DeviceID="(.*)"', 3)
EndIf
Next
Endif
If Not IsArray($aPartition) Then Return SetError(3, 0, 3)
$colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_DiskDriveToDiskPartition', 'WQL', $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
If IsObj($colItems) then
For $objItem In $colItems
If StringInStr($objItem.Dependent, '"' & $aPartition[0] & '"') Then
$aPhysicalDrive = StringRegExp($objItem.Antecedent, 'DeviceID="(.*)"', 3)
EndIf
Next
Endif
If Not IsArray($aPhysicalDrive) Then Return SetError(4, 0, 4)
$aPhysicalDrive[0] = StringReplace($aPhysicalDrive[0], '\\', '\')
$colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_DiskDrive', 'WQL', $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
If IsObj($colItems) then
For $objItem In $colItems
If StringInStr($objItem.DeviceID, $aPhysicalDrive[0]) Then
$aOut[0][0] = 'Volume-Label'
$aOut[0][1] = DriveGetLabel($sDrive)
$aOut[1][0] = 'Serial-Nr. (Volume)'
$aOut[1][1] = DriveGetSerial($sDrive)
$aOut[2][0] = 'Model'
$aOut[2][1] = $objItem.Model
$aOut[3][0] = 'Serial-Nr. (Drive)'
$aOut[3][1] = StringMid($objItem.PNPDeviceID, StringInStr($objItem.PNPDeviceID, '\', 0, -1) + 1)
$aOut[3][1] = StringReplace($aOut[3][1], '&0', '')
$aOut[4][0] = 'Interface'
$aOut[4][1] = $objItem.InterfaceType
$aOut[5][0] = 'Size (Bytes)'
$aOut[5][1] = $objItem.Size
$aOut[6][0] = 'Media Type'
$aOut[6][1] = StringRegExpReplace($objItem.MediaType, '[^[:print:]]', ' ')
$aOut[7][0] = 'Total Cylinders'
$aOut[7][1] = $objItem.TotalCylinders
$aOut[8][0] = 'Total Heads'
$aOut[8][1] = $objItem.TotalHeads
$aOut[9][0] = 'Total Tracks'
$aOut[9][1] = $objItem.TotalTracks
$aOut[10][0] = 'Total Sectors'
$aOut[10][1] = $objItem.TotalSectors
$aOut[11][0] = 'Tracks Per Cylinder'
$aOut[11][1] = $objItem.TracksPerCylinder
$aOut[12][0] = 'Sectors Per Track'
$aOut[12][1] = $objItem.SectorsPerTrack
$aOut[13][0] = 'Bytes Per Sector'
$aOut[13][1] = $objItem.BytesPerSector
EndIf
Next
Endif
$objWMIService = ''
Return $aOut
EndFunc
WOOW !!! Riesen Dank ! sau geiler Script
Vielen Dank für eure Hilfe leute.. habt mir sehr geholfen
Ich möchte den Thread noch mal hoch holen, weil ich gerade ein Script benötige das mir die Hersteller-Seriennummer von der Systemplatte anzeigt.
Das Script oben zeigte mir nicht die richtige SN an. Der richtige Wert steckt in der Eigenschaft : $objItem.Serialnumber
Das Script hat mir ansonsten sehr geholfen. Vielen Dank!
$a = _GetDriveInfo(StringLeft(@SystemDir,3))
MsgBox(0,"",$a)
Exit
Func _GetDriveInfo($sDrive)
$sDrive = StringRegExpReplace($sDrive, '(?i)(.*)([a-z]{1}:)(.*)', '$2')
Local $sDriveType = DriveGetType($sDrive)
If $sDriveType <> 'Fixed' And $sDriveType <> 'Removable' Then SetError(1, 0, 1)
If Not FileExists($sDrive) Then Return SetError(1, 0, 1)
Local $wbemFlagReturnImmediately = 0x10
Local $wbemFlagForwardOnly = 0x20
Local $colItems = ''
Local $aPartition, $aPhysicalDrive, $aOut[14][2]
$objWMIService = ObjGet('winmgmts:\\localhost\root\CIMV2')
If Not IsObj($objWMIService) Then Return SetError(2, 0, 2)
$colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_LogicalDiskToPartition', 'WQL', $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
If IsObj($colItems) then
For $objItem In $colItems
If StringInStr($objItem.Dependent, '"' & $sDrive & '"') Then
$aPartition = StringRegExp($objItem.Antecedent, 'DeviceID="(.*)"', 3)
EndIf
Next
Endif
If Not IsArray($aPartition) Then Return SetError(3, 0, 3)
$colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_DiskDriveToDiskPartition', 'WQL', $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
If IsObj($colItems) then
For $objItem In $colItems
If StringInStr($objItem.Dependent, '"' & $aPartition[0] & '"') Then
$aPhysicalDrive = StringRegExp($objItem.Antecedent, 'DeviceID="(.*)"', 3)
EndIf
Next
Endif
If Not IsArray($aPhysicalDrive) Then Return SetError(4, 0, 4)
$aPhysicalDrive[0] = StringReplace($aPhysicalDrive[0], '\\', '\')
$colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_DiskDrive', 'WQL', $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
If IsObj($colItems) then
For $objItem In $colItems
If StringInStr($objItem.DeviceID, $aPhysicalDrive[0]) Then
$aOut = StringStripWS($objItem.Serialnumber,8)
EndIf
Next
Endif
$objWMIService = ''
Return $aOut
EndFunc
Anmerkung:
Ich habe alle Leerzeichen aus der SN entfernt (StringStripWS).
Leider musste ich im nachhinein festellen dass der Code nicht auf Windows XP läuft.
Auch bei manchen Festplattenherstellern wird nicht die korrekte SN ausgelesen.
Aber irgendwie muss es doch möglich sein . Tools wie z.b. der SIV (System Informations Viewer) zeigen mir auf allen Betriebsystemen und allen Festplattenherstellern die SN zuverlässig an.
Kennt jemand noch eine andere Möglichkeit?
http://msdn.microsoft.com/en-us/library/aa363411.aspx
Könnte das funktionieren?
Ich suche auch schon lange nach so einer funktion...
EDIT: gerade gesehen, da steht nur von USB-Laufwerken -.-