• 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Agent FusionInventory Windows - Serial Number
#1
Bonjour,

Je me suis tourné vers l'agent FusionInventory après avoir testé l'agent OCS suite au conseil d'une personne avisée.

En effet, l'agent OCS ne retourne que Serial number des disques dur dont le champ SerialNumber (Win32_PhysicalMedia) de la WMI Windows est bien renseigné.

Malheureusement, l'agent FusionInventory ne m'aide pas plus car il me semble qu'il utilise lui aussi la WMI...

Avez vous une solution en prévision pour ce problème ?

Cordialement,

Azman
  Reply
#2
L'agent fusion regarde dans Win32_LogicalDisk la valeur : VolumeSerialNumber

Regardez ce que vous avez dedans

Vous utilisez quel Windows? c'est 32 ou 64 bits?
Après si ce n'est pas dedans c'est que le serial n'est pas enregistré dans le "firmware" du disque dur.
Co-leader, official developper
DCS official PARTNER: dcs.glpi@dcsit-group.com
  Reply
#3
ddurieux Wrote:L'agent fusion regarde dans Win32_LogicalDisk la valeur : VolumeSerialNumber

Regardez ce que vous avez dedans

Vous utilisez quel Windows? c'est 32 ou 64 bits?
Après si ce n'est pas dedans c'est que le serial n'est pas enregistré dans le "firmware" du disque dur.

Bonjour,

Pour ma part, c'est le serialNumber renvoyé par le micrologiciel du HDD dont j'ai besoin, celui qui est normalement renvoyé par la WMI "Win32_PhysicalMedia".

Je pense avoir compris la logique de récupération de cette information:

Dans lib/FusionInventory/Agent/ Task/Inventory/OS/Win32/Storages.pm
Code:
sub getInfo {

13    

    my ($type, $nbr) = @_;

14    

15    

    my $info = {};

16    

17    

    my $device = "/dev/";

18    

    $device .= $type eq 'hd'?'hd':'scd';

19    

    $device .= chr(ord('a')+$nbr);

20    

21    

    foreach (`hdparm -I $device 2>&1`) {

22    

        $info->{model} = $1 if /Model Number:\s+(.*?)\s*$/;

23    

        $info->{firmware} = $1 if /Firmware Revision:\s+(\S*)/;

24    

        $info->{serial} = $1 if /Serial Number:\s+(\S*)/;

25    

        $info->{size} = $1 if /1000:\s+(\d*)\sMBytes\s\(/;

26    

    }

27    

28    

    return $info;

29    

}

30    

31    

32    

sub doInventory {

33    

34    

    my $params = shift;

35    

    my $logger = $params->{logger};

36    

    my $inventory = $params->{inventory};

37    

38    

39    

    my @storages;

40    

    foreach my $Properties (getWmiProperties('Win32_DiskDrive', qw/

41    

        Name Manufacturer Model MediaType InterfaceType FirmwareRevision

42    

        SerialNumber Size SCSILogicialUnit SCSIPort SCSILogicalUnit SCSITargetId

43    

    /)) {

44    

45    

            my $info = {};

46    

47    

            if ($Properties->{Name} =~ /(\d+)$/) {

48    

                $info = getInfo("hd", $1);

49    

            }

50    

51    

            $inventory->addStorage({

52    

                MANUFACTURER => $Properties->{Manufacturer},

53    

                MODEL => $info->{model} || $Properties->{Model},

54    

                DESCRIPTION => $Properties->{Description},

55    

                NAME => $Properties->{Name},

56    

                TYPE => $Properties->{MediaType},

57    

                INTERFACE => $Properties->{InterfaceType},

58    

                FIRMWARE => $info->{firmware} || $Properties->{FirmwareRevision},

59    

                SERIAL => $info->{serial} || $Properties->{SerialNumber},

60    

                DISKSIZE => $info->{size} || int($Properties->{Size}/(1024*1024)),

61    

                SCSI_CHID => $Properties->{SCSILogicialUnit},

62    

                SCSI_COID => $Properties->{SCSIPort},

63    

                SCSI_LUN => $Properties->{SCSILogicalUnit},

64    

                SCSI_UNID => $Properties->{SCSITargetId},

65    

            });

66    

        }


Je ne comprends pas très bien ce test
Code:
if($Properties->{Name} =~ /(\d+)$/)

s'il est concluant, la fonction GetInfo est appelée, celle-ci fait appelle au programme hdparm.exe que j'ai testé sur ma machine et qui fonctionne bien.

ensuite l'info est récupérée soit de la WMI soit de Hdparm

SERIAL => $info->{serial} || $Properties->{SerialNumber}

pourtant, dans mon cas, le champ "Numéro de Série" ne se renseigne pas dans OCS.

De plus, les écrans ne sont pas du tout inventorié avec FusionInventory, problème que je n'avais pas avec l'agent OSC.

PS: j'utilise un OS 32bits

Cordialement,
  Reply
#4
azman Wrote:pourtant, dans mon cas, le champ "Numéro de Série" ne se renseigne pas dans OCS.

Est-ce qu'il se trouve dans le XML que l'agent génère ? (avec le parametre --local=c:\ par exemple) ?
Co-leader, official developper
DCS official PARTNER: dcs.glpi@dcsit-group.com
  Reply
#5
ddurieux Wrote:
azman Wrote:pourtant, dans mon cas, le champ "Numéro de Série" ne se renseigne pas dans OCS.

Est-ce qu'il se trouve dans le XML que l'agent génère ? (avec le parametre --local=c:\ par exemple) ?

Bien vu,

Le XML généré contient bien l'information !

dans le champ <STORAGES><SERIAL>...

Le problème serait il du coté serveur ?

Cordialement,
  Reply
#6
Possible, en tout cas ca remonte, après il faudrait voir pouquoi ce n'est pas gérer par le serveur ocs.
Co-leader, official developper
DCS official PARTNER: dcs.glpi@dcsit-group.com
  Reply
#7
Bonjour,

Une idée des fichiers concernés coté serveur, histoire que je regarde ce matin?

Merci pour votre aide.

Cordialement,

Azman
  Reply
#8
Ca doit être dans les fichiers perl du serveur ocs : dans répertoire_perl/site_perl/Apache/Ocsinventory/Server mais après je ne sais pas du tout quel ficheir exactement Sad
Co-leader, official developper
DCS official PARTNER: dcs.glpi@dcsit-group.com
  Reply
#9
Dans le XML génèré par l'agent le serial number d'un storage utilise le champ SERIAL, alors que coté serveur, les fichiers Map.pm, machine.php et la base de donnée utilise SERIALNUMBER.

Pour ma part, j'ai modifié le fichier storages.pm coté agent...
  Reply
#10
Salut Azman Smile

WMI donne des informations fausses. C'est pourquoi, lorsque hdparm est installé, il est utilisé pour identifer le serial du disque dur. hdparm.exe est installé lors de l'installation via l'installeur. J'ai fait la correction sur l'agent pour l'histoire du SERIALNUMBER ( http://github.com/fusinv/fusioninventory...dfba30e915 )
Please contact Fusioninventory Partners companies if you look for a FusionInventory on site expert.
http://www.fusioninventory.org/partners/
  Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)