Récupérer le serialnumber d'un PC portable [Résolu]

Signaler
Messages postés
1241
Date d'inscription
mardi 10 octobre 2006
Statut
Membre
Dernière intervention
27 août 2013
-
Messages postés
1241
Date d'inscription
mardi 10 octobre 2006
Statut
Membre
Dernière intervention
27 août 2013
-
Bonjour à tous,

Tout d'abord je tenais à féliciter les admins et les membres réguliers car ce forum est vraiment très bien et j'ai appris beaucoup de choses depuis que j'ai du me mettre il y a 1 an au VB pour mon travail.
Jusqu'à présent j'ai toujours réussi à trouver une source ou un code me permettant d'arriver à faire ce que je veux mais là je sèche un peu.
En effet, je réalise des scripts pour automatiser l'installation de pc portables en grand nombre pour les personnaliser pour chaque utilisateur.
Je dois ici réaliser un script pour changer le computername de l'UC en adoptant la nomenclature suivante :
PAR + le numéro de série de l'UC.
Hors, j'ai un script pour récupérer le numéro de série de la amchine dans le BIOS qui fonctionne très bien sous Windows :

strCurrentComputer="."
 
 Set objWMIService = GetObject("winmgmts:\" & strCurrentComputer & "\root\cimv2")
 Set colbios = objWMIService.ExecQuery("Select * from Win32_BIOS")
 For Each objbios In colbios
      SerieUC = objbios.SerialNumber
      MsgBox objbios.SerialNumber
      MsgBox SerieUC
 Next



 strNewComputerName = "PAR" & SerieUC
 MsgBox strNewComputerName

Seul petit problème, il s'agit ici de lancer ce script juste après la masterisation, avec une sorte sysprep qui créé le nouveau compte utilisateur, le mot de passe et le computername.Il s'agit d'un script client qui utilise des inputbox. Mais pour les déploiements de plusieurs centaines de machines, je ne vois pas le technicien taper PAR suivi du numéro de série sur les bancs d'installation, cela engendrerait forcément des erreurs..J'ai donc modifié ce script afin que cette opération soit automatique.
Le MSgBox à la fin ne m'affiche rien du tout, même pas le "PAR".
Je pense que cela vient du fait que nous ne sommes pas sous Windows.
Mais le Messagebox devrait au moins m'afficher "PAR" ??
Donc voilà je m'en remets à vous pour savoir si vous avez des idées ou des suggestions. Faut-il que je créé un vbs à part à lancer après la fin du sysprep? Ou bien y'a t'il un autre moyen de récupérer le numéro de série?

Merci d'avance pour vos réponses.

L'expérience, c'est une connerie par jour, mais jamais la même..

6 réponses

Messages postés
1241
Date d'inscription
mardi 10 octobre 2006
Statut
Membre
Dernière intervention
27 août 2013
5
Bon et bien effectivement en déclarant les variables cela fonctionne correctement.
Et si quelqu'un a une idée pourquoi ça ne fonctionne pas sans les déclarer merci de m'en faire part.
Alala les bonnes habitudes du langage C avec l'obligation de déclaration des variables se perdent.. :p

Merci Kristof pour ta participation et à bientôt.

L'expérience, c'est une connerie par jour, mais jamais la même..
Messages postés
918
Date d'inscription
vendredi 3 août 2007
Statut
Membre
Dernière intervention
27 octobre 2008
10
"Le MSgBox à la fin ne m'affiche rien du tout, même pas le "PAR"" < Est-ce que la messagebox s'affiche mais sans prompt, ou bien est-ce qu'elle ne s'affiche pas du tout.
"Je pense que cela vient du fait que nous ne sommes pas sous Windows" < Pas sous Windows !! Ben t'es sous quoi alors ?
Est-ce que tes deux messageboxes qui sont dans ta boucle For Each ... Next s'affichent, elles ?
Tu n'as aucun message d'erreur ?
Messages postés
1241
Date d'inscription
mardi 10 octobre 2006
Statut
Membre
Dernière intervention
27 août 2013
5
"Le MSgBox à la fin ne m'affiche rien du tout, même pas le "PAR"" < Est-ce que la messagebox s'affiche mais sans prompt, ou bien est-ce qu'elle ne s'affiche pas du tout.
La messagebox s'affiche bien sans prompt j'ai juste le bouton ok.

"Je pense que cela vient du fait que nous ne sommes pas sous Windows" < Pas sous Windows !! Ben t'es sous quoi alors ?
Windows n'est pas vraiment lancé, il n'y a pas de session ouverte, donc certains services ne doivent pas être lancés..Enfin c'est ce que je suppose..

Est-ce que tes deux messageboxes qui sont dans ta boucle For Each ... Next s'affichent, elles ?
Non, les 2 messagebox ne s'affichent pas du tout, il n'y en a qu'une seule qui s'affiche, celle de fin.

Tu n'as aucun message d'erreur
Non, aucun message d'erreur

L'expérience, c'est une connerie par jour, mais jamais la même..
Messages postés
918
Date d'inscription
vendredi 3 août 2007
Statut
Membre
Dernière intervention
27 octobre 2008
10
Ce la semble indiqué que ton objet colBios est vide. S'il n'y a pas de messages d'erreur, c'ets donc que le service WMI est bien démarré mais pas encore en mesure de te répondre sur ce point.

As-tu essayé de faire d'autre requète WMI ?

Et si tu colles une pause de quelques secondes juste avant ta requête ?

Perso, je ne connais aucun autre moyen que WMI pour obtenir cette info.

"Windows n'est pas vraiment lancé, il n'y a pas de session ouverte" < Ben même s'il n'y a pas de session ouverte, Windows est bien la !! Sinon ton script ne s'éxecuterais pas du tout !!! je pense que c'ets juste la couche WMI qui est partiellement montée !
Messages postés
1241
Date d'inscription
mardi 10 octobre 2006
Statut
Membre
Dernière intervention
27 août 2013
5
Bonjour Kristof,

Merci pour tes réponses.
Je viens de modifier le script pour lancer une autre requête WMI.
J'ai même tenté de démarrer le service à la main ou dans le script ça ne change rien.
Et si tu colles une pause de quelques secondes juste avant ta requête ?  A la fin du script, après la création du nouvel utilisateur, de l'initialisation du mot de passe et du computername, il y a un messagebox récapitulatif. Si les infos ne sont pas correctes on peut faire annuler afin de recommencer le script depuis le début.

J'ai modifié un peu la partie du script de renommage:
strCurrentComputer="."
 
 Set objWMIService = GetObject("winmgmts:\" & strCurrentComputer & "\root\cimv2")
 Set colbios = objWMIService.ExecQuery("Select * from Win32_BIOS")
 For Each objbios In colbios
       MsgBox "passage"
       SerieUC = objbios.SerialNumber
 Next strNewComputerName = "PAR"
MsgBox strNewComputerName
strNewComputerName = strNewComputerName & SerieUC
 MsgBox strNewComputerName

J'obtiens 2 messagebox qui affichent 2 fois "PAR" tout seul.
Vu qu'il n'y a pas de message d'erreur je pense effectivement que vmi n'est pas en mesure de répondre pour avoir les infos du BIOS.

En tout cas je teste avec une autre requete et une pause et je te tiens au courant.

L'expérience, c'est une connerie par jour, mais jamais la même..
Messages postés
1241
Date d'inscription
mardi 10 octobre 2006
Statut
Membre
Dernière intervention
27 août 2013
5
Bon, j'ai refait un test comme ceci:

Set colItems = objWMIService.ExecQuery("Select * from Win32_OperatingSystem",,48)
 For Each objItem in colItems
    MsgBox "passage1"
    MsgBox   objItem.SystemDirectory
Next





 Set colBIOS = objWMIService.ExecQuery("SELECT * FROM Win32_BIOS",,48)
 wscript.sleep(5000)
 For Each objbios In colbios
  MsgBox "passage2"
      SerieUC = objbios.SerialNumber
 MsgBox objbios.Manufactured
 Next
strNewComputerName = "PAR"
MsgBox strNewComputerName
strNewComputerName=strNewComputerName & SerieUC
MsgBox strNewComputerName

Les messagesbox "passage1" et "passage2" s'affichent bien.Mais pas le reste et à la fin cela m'affiche toujours les 2 messagebox avec "PAR".

Mais j'ai peut-être une nouvelle piste..En effet ceci est le code que j'ai rajouté au code du client, et je n'ai pas déclaré les variables colbios,objbios et serieUC.




Je reteste encore une fois..Je vais bien finir par y arriver...




L'expérience, c'est une connerie par jour, mais jamais la même..