IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Activation automatisée de produits Microsoft, soucis validation de formulaire.


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite Avatar de devilsnake88
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2013
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2013
    Messages : 453
    Par défaut Activation automatisée de produits Microsoft, soucis validation de formulaire.
    Bonjour à tous!

    Je reviens vers vous après quelques petits scripts en Powershell afin de trouver une solution à un de mes problèmes.

    Certaines licences Microsoft (Windows/Office) ne sont activables que par "téléphone", cependant, Microsoft met à disposition un lien qui permet de le faire via une page Web.
    Cette page web est un formulaire à remplir avec sont ID d'activation (Windows ou Office).
    Certains champs sont désactivés (ajout automatique de "ui-state-disabled" dans la Classname par exemple) lorsque la page est chargée et ne s'activent que via un Javascript.
    J'arrive à en forcer certains (déblocage des input/boutons) mais mon formulaire (bien rempli) ne s’envoie toujours pas correctement et je ne sais pas trop pourquoi.
    Par contre si je désactive le clique automatique du bouton de soumission du formulaire et que j’appuie sur la flèche de droite pour valider chaque input, là le formulaire s’envoie correctement!
    Je pense que le souci viens des "onkeypress" contenus dans les inputs mais je n'arrive pas à les gérer.

    J'ai également essayé de remplir les champs en utilisant SenKey ou autres "simulateurs de frappes" mais je ne suis pas arrivé à le faire fonctionner du coup je force directement la valeur des inputs.

    En espérant avoir été suffisamment explicite.
    Merci pour votre temps!



    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") 
    [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") 
     
    # On ouvre un Internet Explorer sur l'URL désirée
    $ie = New-Object -ComObject 'internetExplorer.Application'
    $ie.Visible= $true
    $ie.Navigate("https://microsoft.gointeract.io/interact/index?interaction=1461173234028-3884f8602eccbe259104553afa8415434b4581-05d1&accountId=microsoft&appkey=196de13c-e946-4531-98f6-2719ec8405ce&Language=French&CountryCode=fr&CountryLanguage=FR&Click%20To%20Call%20Caller%20Id=+33769090385&startedFromSmsToken=Y8P0feI&token=tQjWI6")
     
    while ($ie.Busy -eq $true){Start-Sleep -seconds 5;}   
     
    # Je clique sur le bouton pour sélectionner une activation à 7 chiffres
    $Open = $ie.Document.getElementByID('1461173234025-3129f8602eccbe259104553afa8415434b4581-02de_1461173234023-2568f8602eccbe259104553afa8415434b458-10ad')
    $Open.click()
     
    # Je récupère et met en forme l'ID d'activation via la commande "slmgr.vbs /dti"
    $ActivationID = cscript c:\windows\System32\slmgr.vbs /dti
    $ActivationID = $ActivationID.Split(':')[4].Trim()
    $ActivationID1 = $ActivationID.Substring(0,7) 
    $ActivationID2 = $ActivationID.Substring(7,7) 
    $ActivationID3 = $ActivationID.Substring(14,7) 
    $ActivationID4 = $ActivationID.Substring(21,7) 
    $ActivationID5 = $ActivationID.Substring(28,7) 
    $ActivationID6 = $ActivationID.Substring(35,7) 
    $ActivationID7 = $ActivationID.Substring(42,7) 
    $ActivationID8 = $ActivationID.Substring(49,7) 
    $ActivationID9 = $ActivationID.Substring(56,7) 
     
    # Pour vérifier que l'ID d'activation est bien formaté, je le print dans la console
    Write-Output "$ActivationID1-$ActivationID2-$ActivationID3-$ActivationID4-$ActivationID5-$ActivationID6-$ActivationID7-$ActivationID8-$ActivationID9"
     
    # On attend quelques secodnes que la page se charge
    # PS: Si vous avez une meilleure méthode je suis preneur
    Start-Sleep -seconds 5;
     
    # Pour chaque champs de type input à remplir, je supprime la désactivation par défaut
    # Puis j'insère l'ID
    $ie.Document.getElementByID('field1').disabled = ''
    $ie.Document.getElementByID('field1').value = $ActivationID1
    $ie.Document.getElementByID('field2').disabled = ''
    $ie.Document.getElementByID('field2').value = $ActivationID2
    $ie.Document.getElementByID('field3').disabled = ''
    $ie.Document.getElementByID('field3').value = $ActivationID3
    $ie.Document.getElementByID('field4').disabled = ''
    $ie.Document.getElementByID('field4').value = $ActivationID4
    $ie.Document.getElementByID('field5').disabled = ''
    $ie.Document.getElementByID('field5').value = $ActivationID5
    $ie.Document.getElementByID('field6').disabled = ''
    $ie.Document.getElementByID('field6').value = $ActivationID6
    $ie.Document.getElementByID('field7').disabled = ''
    $ie.Document.getElementByID('field7').value = $ActivationID7
    $ie.Document.getElementByID('field8').disabled = ''
    $ie.Document.getElementByID('field8').value = $ActivationID8
    $ie.Document.getElementByID('field9').disabled = ''
    $ie.Document.getElementByID('field9').value = $ActivationID9
     
    # Petite pause probablement inutile
    Start-Sleep -Milliseconds 750
     
    # Pour chaque DIV qui contient "ui-state-disabled" dans sa ClassName, je supprime l'état de désactivation
    foreach ($divs in ($ie.Document.getElementsByTagName("div") | Where-Object { $_.className -match "ui-state-disabled" })) {
        $divs.className = "ui-input-text ui-body-inherit ui-corner-all ui-shadow-inset ui-focus"
    }
    # J'active le bouton de soumission du formulaire et je clique dessus pour l'envoyer
    $Submitactivation = $ie.Document.getElementByID('custom-msft-submit')
    $Submitactivation.className = 'jma-click-to-continue-button ui-btn ui-btn-icon-right ui-icon-carat-r'
    $Submitactivation.click()

  2. #2
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Certaines licences Microsoft (Windows/Office) ne sont activables que par "téléphone"
    Vraiment ? Dans mon entreprise nous utilisons un serveur KMS pour Windows et/ou directement la plateforme Office 365 (synchroniser avec notre AD) pour des auto-activation par utilisateur via notre passerelle internet.

  3. #3
    Membre émérite Avatar de devilsnake88
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2013
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2013
    Messages : 453
    Par défaut
    Citation Envoyé par ericlm128 Voir le message
    ...
    Je dois souvent travailler avec des licences qui viennent "d'Internet", ne pouvant s'activées que par téléphone, d'où mon script...

  4. #4
    Membre confirmé
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2016
    Messages : 18
    Par défaut
    Généralement quand on veut automatiser quelque chose sur une page web comme ça, il faut comprendre comment la page fonctionne.
    Dans certains cas, les scripts Javascript sont obfusqués et ça rend par conséquent l'analyse beaucoup plus compliquer et cela nécessite un certain nombre de tests.
    Ensuite, il peut y avoir des captchas qui compliquent encore plus le processus d'automatisation.



    Dans notre cas, rien de tout ça. Déjà, on peut observer les events attachés aux inputs :

    Nom : Capture d’écran 2021-08-30 232936.png
Affichages : 154
Taille : 92,2 Ko

    On peut voir qu'il y a 5 events, celui qui nous intéresse le plus ici c'est l'event keyup.
    C'est cet event qui active le bouton de soumission quand tout les autres inputs ont été saisi.
    On peut même aller voir le code source pour comprendre que c'est cet event qui fait tout le taffe en arrière plan.

    On peut aussi remarquer que cette page web utilise JQuery, ce qui permet de ne pas avoir de problème de compatibilité avec internet explorer.
    Avec Google Chrome dans la console, j'ai fais quelque test et ce script semble très bien fonctionner :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    var s = "0000000-0000000-0000000-0000000-0000000-0000000-0000000-0000000-0000000".split('-');for(var i=0; i<9; i++){$('#field'+(i+1)).val(s[i]);$('#field'+(i+1)).prop('disabled', false);$('#field'+(i+1)).keyup()};$('#custom-msft-submit').click();

    Il suffit donc clairement de trigger l'event keyup pour que tout fonctionne bien.
    Au final (avec quelques légères simplifications), j'obtiens ce script powershell qui fonctionne chez moi :
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") 
    [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") 
     
    # On ouvre un Internet Explorer sur l'URL désirée
    $ie = New-Object -ComObject 'internetExplorer.Application'
    $ie.Visible= $true
    $ie.Navigate("https://microsoft.gointeract.io/interact/index?interaction=1461173234028-3884f8602eccbe259104553afa8415434b4581-05d1&accountId=microsoft&appkey=196de13c-e946-4531-98f6-2719ec8405ce&Language=French&CountryCode=fr&CountryLanguage=FR&Click%20To%20Call%20Caller%20Id=+33769090385&startedFromSmsToken=Y8P0feI&token=tQjWI6")
     
    while ($ie.Busy -eq $true){Start-Sleep -seconds 5;}   
     
    # Je clique sur le bouton pour sélectionner une activation à 7 chiffres
    $Open = $ie.Document.getElementByID('1461173234025-3129f8602eccbe259104553afa8415434b4581-02de_1461173234023-2568f8602eccbe259104553afa8415434b458-10ad')
    $Open.click()
     
    # Je récupère et met en forme l'ID d'activation via la commande "slmgr.vbs /dti"
    $ActivationID = (cscript c:\windows\System32\slmgr.vbs /dti).Split(':')[4].Trim()
    $ActivationIDArray = @()
    For($i=0;$i -lt 9;$i++) {$ActivationIDArray+=$ActivationID.Substring($i*7,7)}
     
     
    # Pour vérifier que l'ID d'activation est bien formaté, je le print dans la console
    For($i=0;$i -lt 9;$i++) {
        Write-Host -NoNewline "$($ActivationIDArray[$i])$(If ($i -lt 8) {"-"})"
    }
    Write-Host ""
     
     
    # On attend quelques secodnes que la page se charge
    # PS: Si vous avez une meilleure méthode je suis preneur
    Start-Sleep -seconds 5;
     
    # Pour chaque champs de type input à remplir, je supprime la désactivation par défaut
    # Puis j'insère l'ID
    For($i=0;$i -lt 9;$i++) {
        $elem = $ie.Document.getElementByID("field$($i+1)")
        $elem.disabled = ''
        $elem.value = $ActivationIDArray[$i]
        $ie.Document.parentWindow.ExecScript("`$('#field$($i+1)').keyup()")
        while($ie.Busy) { Start-Sleep -Milliseconds 100 }
    }
     
    Start-Sleep -Milliseconds 5000
     
    # J'active le bouton de soumission du formulaire et je clique dessus pour l'envoyer
    $ie.Document.getElementByID('custom-msft-submit').click()

    Je ne suis pas un expert en powershell, donc le script peut être optimisé/amélioré.

  5. #5
    Membre émérite Avatar de devilsnake88
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2013
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2013
    Messages : 453
    Par défaut
    Citation Envoyé par Flammrock Voir le message
    ...
    Merci bien pour tout cela, c'est vraiment intéressant et cool ^^
    Cependant lorsque j'exécute ton code il me retourne cette erreur:
    Nom : Capture.JPG
Affichages : 150
Taille : 125,3 Ko

    J'ai testé "field$($i+1)" et ça retourne bien ce que c'est censé retourné du coup je pense que le souci vient du formatage de la requêtre keyup mais pas sûr, moi et le PS/JS ça fait au moins deux...

  6. #6
    Membre confirmé
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2016
    Messages : 18
    Par défaut
    Je n'ai pas réussi à reproduire cette erreur. Pour la résoudre, on peut essayer de construire la chaine différemment comme ça par exemple :
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    $script = '$' + "('#field" + ($i+1) + "').keyup()"

    Ce qui donne :
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") 
    [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") 
     
    # On ouvre un Internet Explorer sur l'URL désirée
    $ie = New-Object -ComObject 'internetExplorer.Application'
    $ie.Visible= $true
    $ie.Navigate("https://microsoft.gointeract.io/interact/index?interaction=1461173234028-3884f8602eccbe259104553afa8415434b4581-05d1&accountId=microsoft&appkey=196de13c-e946-4531-98f6-2719ec8405ce&Language=French&CountryCode=fr&CountryLanguage=FR&Click%20To%20Call%20Caller%20Id=+33769090385&startedFromSmsToken=Y8P0feI&token=tQjWI6")
     
    while ($ie.Busy -eq $true){Start-Sleep -seconds 5;}   
     
    # Je clique sur le bouton pour sélectionner une activation à 7 chiffres
    $Open = $ie.Document.getElementByID('1461173234025-3129f8602eccbe259104553afa8415434b4581-02de_1461173234023-2568f8602eccbe259104553afa8415434b458-10ad')
    $Open.click()
     
    # Je récupère et met en forme l'ID d'activation via la commande "slmgr.vbs /dti"
    $ActivationID = (cscript c:\windows\System32\slmgr.vbs /dti).Split(':')[4].Trim()
    $ActivationIDArray = @()
    For($i=0;$i -lt 9;$i++) {$ActivationIDArray+=$ActivationID.Substring($i*7,7)}
     
     
    # Pour vérifier que l'ID d'activation est bien formaté, je le print dans la console
    For($i=0;$i -lt 9;$i++) {
        Write-Host -NoNewline "$($ActivationIDArray[$i])$(If ($i -lt 8) {"-"})"
    }
    Write-Host ""
     
     
    # On attend quelques secodnes que la page se charge
    # PS: Si vous avez une meilleure méthode je suis preneur
    Start-Sleep -seconds 5;
     
    # Pour chaque champs de type input à remplir, je supprime la désactivation par défaut
    # Puis j'insère l'ID
    For($i=0;$i -lt 9;$i++) {
        $elem = $ie.Document.getElementByID("field$($i+1)")
        $elem.disabled = ''
        $elem.value = $ActivationIDArray[$i]
        $script = '$' + "('#field" + ($i+1) + "').keyup()"
        Write-Host $script
        $ie.Document.parentWindow.execScript($script, 'javascript')
        while($ie.Busy) { Start-Sleep -Milliseconds 100 }
    }
     
    Start-Sleep -Milliseconds 5000
     
    # J'active le bouton de soumission du formulaire et je clique dessus pour l'envoyer
    $ie.Document.getElementByID('custom-msft-submit').click()


    Petite démo en vidéo de ce que ça donne chez moi :

Discussions similaires

  1. Où trouver les contrats de licence des produits Microsoft ?
    Par shawn12 dans le forum FAQs Windows
    Réponses: 0
    Dernier message: 06/04/2011, 09h53
  2. clé produit microsoft office home and studdent 2007
    Par audreykas dans le forum Administration
    Réponses: 1
    Dernier message: 09/09/2009, 18h59
  3. Fonctions des produits Microsoft BI?
    Par t-die dans le forum Microsoft BI
    Réponses: 5
    Dernier message: 12/02/2008, 14h57
  4. Soucis validation W3C
    Par Egaïram dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 21/10/2007, 22h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo