Comment installer les mises à jour Windows à partir de la ligne de commande

17

Est-il possible d'installer des mises à jour Windows à partir de la ligne de commande? L'outil de mise à jour graphique ne semble pas fonctionner si bien dans Windows 7. Parfois, il le fait, parfois non ... Mon problème est que je ne vois aucune mise à jour lorsque je clique pour voir la liste des détails. Donc, quand il y a des mises à jour qui ne sont pas cochées par défaut, je ne peux pas les installer ...

Alors, existe-t-il une autre façon de les installer?

Svish
la source

Réponses:

12

Vous n'êtes pas sûr de Windows 7, mais avec XP / Vista, vous pouvez exécuter la commande suivante pour détecter et télécharger les mises à jour:

wuauclt /detectnow /reportnow

Si vous rencontrez des problèmes pour le faire fonctionner, consultez le Wiki WSUS .

Sinon, si vous avez une mise à jour spécifique que vous souhaitez, téléchargez simplement à partir du site Web de Microsoft. S'il y a un problème qui vous empêche d'installer, c'est le meilleur moyen de le savoir, car les journaux de Windows Update sont illicites à gérer.

duffbeer703
la source
1
Je ne pense plus que ce lien soit valide.
Natalie Adams
Ne fonctionne pas pour moi sur Windows 8.1 ou Windows Server 2012.
nu everest
La commande que vous avez donnée vérifie les mises à jour et signale l'état des mises à jour au serveur WSUS. Il n'approuve, ne télécharge ni n'installe aucune mise à jour. Vous devez ajouter le paramètre / updatenow pour forcer une installation des mises à jour disponibles.
duct_tape_coder
A noter également, dans Win10 / 2016, la commande wuauclt est déconseillée au profit de usoclient, voir omgdebugging.com/2017/10/09/…
duct_tape_coder
4

Vous pouvez utiliser un script pour rechercher, télécharger et installer les mises à jour de manière synchrone. J'utilise souvent une version modifiée de ce vbscript pour les correctifs manuels des serveurs Windows Core.

Set updateSession = CreateObject("Microsoft.Update.Session")
updateSession.ClientApplicationID = "MSDN Sample Script"

Set updateSearcher = updateSession.CreateUpdateSearcher()

WScript.Echo "Searching for updates..." & vbCRLF

Set searchResult = _
updateSearcher.Search("IsInstalled=0 and Type='Software' and IsHidden=0")

WScript.Echo "List of applicable items on the machine:"

For I = 0 To searchResult.Updates.Count-1
    Set update = searchResult.Updates.Item(I)
    WScript.Echo I + 1 & "> " & update.Title
Next

If searchResult.Updates.Count = 0 Then
    WScript.Echo "There are no applicable updates."
    WScript.Quit
End If

WScript.Echo vbCRLF & "Creating collection of updates to download:"

Set updatesToDownload = CreateObject("Microsoft.Update.UpdateColl")

For I = 0 to searchResult.Updates.Count-1
    Set update = searchResult.Updates.Item(I)
    addThisUpdate = false
    If update.InstallationBehavior.CanRequestUserInput = true Then
        WScript.Echo I + 1 & "> skipping: " & update.Title & _
        " because it requires user input"
    Else
        If update.EulaAccepted = false Then
            WScript.Echo I + 1 & "> note: " & update.Title & _
            " has a license agreement that must be accepted:"
            WScript.Echo update.EulaText
            WScript.Echo "Do you accept this license agreement? (Y/N)"
            strInput = WScript.StdIn.Readline
            WScript.Echo 
            If (strInput = "Y" or strInput = "y") Then
                update.AcceptEula()
                addThisUpdate = true
            Else
                WScript.Echo I + 1 & "> skipping: " & update.Title & _
                " because the license agreement was declined"
            End If
        Else
            addThisUpdate = true
        End If
    End If
    If addThisUpdate = true Then
        WScript.Echo I + 1 & "> adding: " & update.Title 
        updatesToDownload.Add(update)
    End If
Next

If updatesToDownload.Count = 0 Then
    WScript.Echo "All applicable updates were skipped."
    WScript.Quit
End If

WScript.Echo vbCRLF & "Downloading updates..."

Set downloader = updateSession.CreateUpdateDownloader() 
downloader.Updates = updatesToDownload
downloader.Download()

Set updatesToInstall = CreateObject("Microsoft.Update.UpdateColl")

rebootMayBeRequired = false

WScript.Echo vbCRLF & "Successfully downloaded updates:"

For I = 0 To searchResult.Updates.Count-1
    set update = searchResult.Updates.Item(I)
    If update.IsDownloaded = true Then
        WScript.Echo I + 1 & "> " & update.Title 
        updatesToInstall.Add(update) 
        If update.InstallationBehavior.RebootBehavior > 0 Then
            rebootMayBeRequired = true
        End If
    End If
Next

If updatesToInstall.Count = 0 Then
    WScript.Echo "No updates were successfully downloaded."
    WScript.Quit
End If

If rebootMayBeRequired = true Then
    WScript.Echo vbCRLF & "These updates may require a reboot."
End If

WScript.Echo  vbCRLF & "Would you like to install updates now? (Y/N)"
strInput = WScript.StdIn.Readline
WScript.Echo 

If (strInput = "Y" or strInput = "y") Then
    WScript.Echo "Installing updates..."
    Set installer = updateSession.CreateUpdateInstaller()
    installer.Updates = updatesToInstall
    Set installationResult = installer.Install()

    'Output results of install
    WScript.Echo "Installation Result: " & _
    installationResult.ResultCode 
    WScript.Echo "Reboot Required: " & _ 
    installationResult.RebootRequired & vbCRLF 
    WScript.Echo "Listing of updates installed " & _
    "and individual installation results:" 

    For I = 0 to updatesToInstall.Count - 1
        WScript.Echo I + 1 & "> " & _
        updatesToInstall.Item(i).Title & _
        ": " & installationResult.GetUpdateResult(i).ResultCode   
    Next
End If

Cela semble fonctionner comme un charme pour cela, mais je ne l'ai pas testé sous Windows 7 bien sûr. Il existe également un lien vers un autre article pour cibler une mise à jour spécifique si nécessaire.

Il existe également un module Powershell qui expose une expérience similaire.

Après un rapide coup d'œil, j'ai également trouvé cette application tierce qui utilise également l'API de mise à jour, mais avec quelques options supplémentaires (mais vous obligeant à faire confiance au code tiers).

Oskar Duveborn
la source
2

Windows Update à partir de la ligne de commande:

www.sysadminsoftware.com/udc.html

L'outil (Updates Deployment Commander) peut faire exactement ce que vous demandez. Vous pouvez également transmettre des paramètres pour éviter certains correctifs, cibler des mises à jour spécifiques, redémarrer N minutes après la fin, créer des rapports en CSV, etc. Il est également livré avec quelques utilitaires GUI.

administrateur système
la source
2

Si vous devez patcher les systèmes d'exploitation Windows, en particulier après de nouvelles installations, jetez un œil sérieux à Offline Updater .

Il utilise des scripts pour télécharger tous les correctifs que vous proposez (donc Win2000, Win XP, Win 2003, Vista, Win2008, Win2012 32 et 64 bits le cas échéant), multilingue, service packs, frameworks .NET et correctifs Office (XP, 2000 , 2003, 2007).

Une fois que vous les avez tous téléchargés, il vous suffit de mettre à jour chaque correctif mardi et d'obtenir uniquement les modifications. Bien qu'il obtienne les catalogues et qu'ils s'allongent de jour en jour (plusieurs mégas maintenant par OS / Office rev).

Une fois que vous avez téléchargé les fichiers sur votre machine locale, il existe un script pour en faire des images CD / DVD (il le fera automatiquement pour les images DVD par OS maintenant si vous le souhaitez).

Ce que je fais, c'est utiliser une carte mémoire SD de 4 Go, dans un lecteur de carte SD qui respecte l'onglet de protection en écriture. J'avais l'habitude d'utiliser des cartes de 2 Go, mais je peux à peine s'adapter à Win XP et la plupart des versions d'Office dessus, alors je suis passé à des cartes de 4 Go.

Ainsi, lors du dépannage d'une machine, je fais confiance à l'insertion de cet appareil auparavant accessible en écriture dans une machine non fiable, potentiellement infectée par un virus (car je n'en sais rien, je suppose qu'il est infecté) sachant que mon appareil est protégé en écriture.

Ainsi, je peux le mettre à jour dans un premier temps.

Si vous utilisez l'exécution automatique ou lancez l'exécutable sur l'appareil (clé, disque dur externe, CD, DVD, où que vous l'ayez écrit), il démarre un script qui utilise le service Windows Update sur la machine locale pour appliquer toutes les mises à jour, mais à la place de traverser le fil pour les télécharger, il utilise simplement la copie locale.

Ainsi, la mise à jour d'une machine WinXP vers les derniers SP et correctifs peut prendre encore plus d'une heure, mais il n'y a aucun trafic réseau en cours de route, et vous pouvez le faire avec le câble Ethernet entièrement débranché.

Outil incroyablement utile!

Ne devrait pas aller à l'encontre de Microsoft, comme les gars d'AutoUpdate, qui étaient en train de construire un CD de patch, qui distribuait l'image du CD. Cet outil met à jour les scripts et vous devez aller chercher tous les correctifs sur votre poste de travail Windows sous licence.

geoffc
la source
1

Je ne peux pas actuellement ajouter de commentaire à la réponse de duffbeer703 , alors voici une réponse distincte:

La dernière version « bonne » du lien vers la WSUSwiki archivée sur l'Internet Archive est ce . Les options données dans la réponse d'origine sont décrites dans cette entrée FAQ .

Olaf Mandel
la source
Savez-vous ce qu'il faut pour gagner "un peu" de points de réputation pour obtenir le privilège de commenter? Suggérez simplement quelques modifications (pertinentes). S'ils sont approuvés, vous obtiendrez +2 représentants pour chacun d'eux ... essayez-le!
Pierre.Vriens
-2

Je ne le pense pas, Windows Update nécessite une intégration ActiveX et autre avec Internet Explorer pour fonctionner correctement.

Étant donné que Windows 7 est à peine une version candidate, vous devez vous attendre à ce genre de bogues.

Il pourrait être judicieux de soumettre le bogue spécifique que vous rencontrez à l'équipe de développement si vous êtes membre de MSDN.

WerkkreW
la source
Ouais je sais. Vous avez déjà déposé un bogue sur MSDN. Je cherche juste une méthode alternative jusqu'à ce qu'elle soit corrigée =)
Svish