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 :

Améliorer ce script


Sujet :

Scripts/Batch

  1. #1
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2017
    Messages : 8
    Points : 2
    Points
    2
    Par défaut Améliorer ce script
    Bonjour à tous,

    Je viens pour la première fois sur ce forum afin d'obtenir une petite aide qui me serait bien précieuse.

    Avant tout, je ne suis pas du tout calé niveau script/batch etc. et pourtant j'ai besoin de développer un peu un script que j'ai trouvé >>> ICI <<</.

    Ce script permet donc d'automatiser l'installation des fichiers .msu (correctifs ou hotfix Windows), et pour cela il fonctionne très bien.

    Sauf que j'aimerais qu'il fasse un peu plus :
    1 - marquer une pause à la fin de son exécution en gardant la fenêtre powershell ouverte
    2 - qu'il m'annonce la réussite ou l'échec de l'installation de chaque correctif.
    Car il arrive qu'un correctif ne puisse pas être installé (pour diverses raisons), et pour moi il serait très pratique de le savoir sans utiliser un autre script (comme celui-ci que j'utilise actuellement >>> ICI <<</).

    Je ne sais pas si j'ai été très clair, et comme je l'ai dit je suis débutant donc il m'est difficile d'être plus technique.

    En tout cas, merci d'avance à ceux ou celles qui pourront m'aider.

  2. #2
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    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 201
    Points : 5 795
    Points
    5 795
    Par défaut
    Un début de piste

    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $dir = (Get-Item -Path ".\" -Verbose).FullName
     Foreach($item in (ls $dir *.msu -Name))
     {
        Write-Host -NoNewline $item
        $item = $dir + "\" + $item
        wusa $item /quiet /norestart | Out-Null
        if (@(0,3010) -contains $LASTEXITCODE) {Write-Host "`tRéussite"} Else {Write-Host "`tEchec"}
     }
    $x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")

  3. #3
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2017
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Merci beaucoup !

    Je vais tester dès aujourd'hui, et je reviens dés que possible pour rendre compte.

  4. #4
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2017
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Le script fonctionne en l'état ce qui est déjà une bonne chose.

    Serait-ce possible qu'il soit capable de faire la différence entre un échec d'installation (exemple : KB non pris en charge par le système d'exploitation) et une installation non nécessaire (exemple : KB déjà installé) ?

  5. #5
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    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 201
    Points : 5 795
    Points
    5 795
    Par défaut
    Oui certainement il faut se renseigner et analyser les codes retours.

  6. #6
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2017
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Tu peux me guider ?

    J'ai la description des codes retournés par Windows Installer mais est-ce ceux dont j'ai besoin ?
    https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx

  7. #7
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    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 201
    Points : 5 795
    Points
    5 795
    Par défaut
    Non les codes retours wusa sont différents des ceux des msi (windows installer).
    J'avais mis des codes au pif juste pour l'exemple.

    Voici ou les trouver :
    https://support.microsoft.com/en-us/...rror-code-list

    A toi de compléter ceux que tu veux traiter différemment.

    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
    # https://support.microsoft.com/en-us/help/938205/windows-update-error-code-list
     
    $dir = (Get-Item -Path ".\" -Verbose).FullName
    Foreach($item in (ls $dir *.msu -Name))
    {
        Write-Host -NoNewline $item
        $item = $dir + "\" + $item
        wusa $item /quiet /norestart | Out-Null
     
        # Si cette suite contient le code retour
        if (@(0, 0x00240005, 0x00240006) -contains $LASTEXITCODE)
        {
            Write-Host "`tRéussite"
        }
        # Sinon si 0x80240017 est égal au code retour
        ElseIf (0x80240017 -eq $LASTEXITCODE)
        {
            Write-Host "`tLa mise à jour ne s'applique pas à votre ordinateur"
        }
        # Sinon
        Else
        {
            # Converti en Hexa pour une meilleur lisibilité
            $Hex = "0x" + "{0:x}" -f $LASTEXITCODE
            Write-Host "`tEchec ($Hex)"
        }
    }
    $x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")

  8. #8
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2017
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    D'accord, c'est à peu prés ce que j'avais commencé à écrire mais en mieux (largement mieux).

    J'ai ajouté quelques codes d'erreur pour que ça soit adapté et du coup ça roule parfaitement, c'est lisible et plus utile, merci.

    Maintenant, pour que le script soit vraiment "au top" j'essaie de lui ajouter une cmdlet "write-progress" afin de voir la progression de la procédure pour chaque correctif, sauf que je dois apparemment mal m'en servir puisque le script ne se lance même plus.

    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $dir = (Get-Item -Path ".\" -Verbose).FullName
    Foreach($item in (ls $dir *.msu -Name))
    {
        Write-Host -NoNewline $item
        $item = $dir + "\" + $item
        wusa $item /quiet /norestart | Out-Null
     
    for($I = 1; $I -lt 101; $I++ )
    {Write-Progress -Activity Updating -Status 'Progress->' -PercentComplete $I -CurrentOperation OuterLoop; `
    PS C:\> for($j = 1; $j -lt 101; $j++ )
    {Write-Progress -Id 1 -Activity Updating -Status 'Progress' - PercentComplete $j -CurrentOperation InnerLoop} }

  9. #9
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    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 201
    Points : 5 795
    Points
    5 795
    Par défaut
    Utilise les balises [CODE=powershell] pour plus de lisibilité de ton code.

    Tu ne pourra pas surveiller la progression d'un correctif, mais la progression de tous tes correctifs.

    Nous ne savons pas quand 1 correctif se termine.
    Par contre si tu a 100 correctifs à installer et que tu en ai au 60eme nous savons dire que nous sommes à 60% du total.

    Pour commencer, il faut récupérer le nombre total de correctif à installer.
    Et pour chacun nous incrémentons le compteur.

    Je te propose quelques choses comme ça, à tester.

    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
    # https://support.microsoft.com/en-us/help/938205/windows-update-error-code-list
     
    # récupére tous les fichier dans $lst
    $lst = Get-ChildItem -Path ".\*.msu" -File | Select-Object -ExpandProperty FullName
     
    $total = $lst.Count
    for($a=0 ; $a -lt $total ; $a++)
    {
        # Calcul le pourcentage en cours
        $percent = $a * 100 / $total
        # Récupère le chemin complet du fichier
        $file = $lst[$a]
        # Affiche la progression
        Write-Progress -Activity "En cours : $file" -PercentComplete $percent -CurrentOperation "$percent% complete" -Status "Please wait."
     
        Write-Host -NoNewline $file
        wusa $file /quiet /norestart | Out-Null
     
        # Si cette suite contient le code retour
        if (@(0, 0x00240005, 0x00240006) -contains $LASTEXITCODE)
        {
            Write-Host "`tRéussite"
        }
        # Sinon si 0x80240017 est égal au code retour
        ElseIf (0x80240017 -eq $LASTEXITCODE)
        {
            Write-Host "`tLa mise à jour ne s'applique pas à votre ordinateur"
        }
        # Sinon
        Else
        {
            # Converti en Hexa pour une meilleur lisibilité
            $Hex = "0x" + "{0:x}" -f $LASTEXITCODE
            Write-Host "`tEchec ($Hex)"
        }
        Start-Sleep 1
     
    }
    $x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")

  10. #10
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2017
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Ah oui, c'est justement le détail qui me chagrinait dans les possibilités que j'avais déjà pu trouver sur le net, mais aucune ne parlait de correctifs Windows.
    C'est quand même une "amélioration" du script, mais définir un pourcentage par unité (chaque .msu) à installer serait trompeur d'un point de vue "temps", car un correctif1.msu peut faire 500ko quand correctif2.msu peut faire 850mo.
    C'était bien la progression de chaque correctif qui aurait pu m'être très utile. Dommage donc.

    En tout cas merci beaucoup pour ton aide.

  11. #11
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    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 201
    Points : 5 795
    Points
    5 795
    Par défaut
    Obtenir l'avancement d'un correctif nécessiterai surement l'utilisation des API Windows Update.

    Nous pourrions définir des ratios/total en fonction de leurs tailles plutôt que leur nombre c'est envisageable.
    Ça serait peut être plus réaliste, mais il faut avoir conscience que la taille d'un correctif n'est pas forcement en rapport avec le temps qu'il mettra à s'installer.

  12. #12
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2017
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Effectivement, je vois ce que tu veux dire.
    Je pense que ça serait quand même plus précis, car si j'essaye d'obtenir un script aussi "complet" c'est parce que je dois déployer très régulièrement des correctifs sur un bon nombre de machines et je suis censé annoncé un timing pour planifier le reboot.
    Tu m'as déjà bien avancé, je vais essayer de creuser vers ce que tu viens de me dire.

    Sinon, dans la dernière version du script que tu m'as proposé, j'ai remarqué que tu avais remplacé "item" par "file" et aussi que dans le déroulement du correctif il y a l'emplacement complet qui apparait au lieu de voir juste le nom.
    Est-ce que je peux remettre "item" à la place de "file" ? Juste par soucis de lisibilité je préférais quand on ne voyait apparaitre que le nom du correctif.

  13. #13
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    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 201
    Points : 5 795
    Points
    5 795
    Par défaut
    Comme ça :

    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
    # https://support.microsoft.com/en-us/help/938205/windows-update-error-code-list
     
    # récupére tous les fichier dans $files
    $files = Get-ChildItem -Path ".\*.msu" -File
     
    # Calcul la taille total de tous les fichier
    [long]$total = ($files | Measure-Object -Sum Length).Sum
     
    # Initialise le compteur
    [long]$count = 0
     
    # Pour chaque fichier dans $files
    foreach($file in $files)
    {
        # Calcul le pourcentage en cours (arrondi à 2 chiffres après la virgule)
        $percent = [math]::Round($count * 100 / $total, 2)
     
        # Incrémente le compteur
        $count += $file.Length
     
        # Affiche la progression
        Write-Progress -Activity "En cours : $($file.Name)" -PercentComplete $percent -CurrentOperation "$percent% complete" -Status "Please wait."
     
        # Affiche le nom du fichier en cours
        Write-Host -NoNewline $file.Name
     
        # Lance l'installation
        wusa $file.FullName /quiet /norestart | Out-Null
     
        # Si cette suite contient le code retour
        if (@(0, 0x00240005, 0x00240006) -contains $LASTEXITCODE)
        {
            Write-Host "`tRéussite" -ForegroundColor Green
        }
        # Sinon si 0x80240017 est égal au code retour
        ElseIf (0x80240017 -eq $LASTEXITCODE)
        {
            Write-Host "`tLa mise à jour ne s'applique pas à votre ordinateur" -ForegroundColor Magenta
        }
        # Sinon
        Else
        {
            # Converti en Hexa pour une meilleur lisibilité
            $Hex = "0x" + "{0:x}" -f $LASTEXITCODE
            Write-Host "`tEchec ($Hex)" -ForegroundColor Red
        }
    }
     
    # Ferme la barre de progression
    Write-Progress -Completed -Activity "Fin"
     
    # Pause
    $x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")

  14. #14
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2017
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Super !
    En plus avec les annotations ça m'aide à apprendre.
    Merci beaucoup.

Discussions similaires

  1. Amélioration de script
    Par djaibi dans le forum Langage
    Réponses: 1
    Dernier message: 07/11/2011, 20h03
  2. problème d'amélioration de script dans une galerie
    Par lirisnocif dans le forum ActionScript 1 & ActionScript 2
    Réponses: 0
    Dernier message: 24/03/2009, 15h34
  3. [Galerie] Un peu d'aide pour améliorer un script
    Par ambigua dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 21/02/2008, 22h32
  4. Appel d'offre pour une amélioration de script
    Par Hamzaxxx dans le forum Autres
    Réponses: 0
    Dernier message: 05/12/2007, 14h14
  5. Réponses: 6
    Dernier message: 23/01/2007, 17h20

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