[Astuces] Winget, vous connaissez ?

Vous créez ou partagez un tutorial, postez-le ici !
Répondre
Avatar du membre
Auteur du sujet
sharky
Habitué
Habitué
Messages : 160
Enregistré le : il y a 6 ans

[Astuces] Winget, vous connaissez ?

Message par sharky »

Les habitués de Linux connaissent la commande apt-get.
Winget, une commande intégrée à Windows depuis sa version 10, lui ressemble.
Doc Microsoft : https://learn.microsoft.com/fr-fr/windo ... er/winget/

Winget permet, aussi, d'installer et de mettre à jour des applications non Microsoft.
Il est possible de concevoir des scripts téléchargeant et installant les dernières sources.
Des mises à jour automatiques, en tâches planifiées pour des machines hors domaine/réseau entreprises, sont possibles.

Pour connaître ces possibilités, ouvrez le terminal (CMD ou Powershell) en administrateur.
Lancer

Code : Tout sélectionner

winget --help
Pour connaitre les applications de votre machine qui doivent être mises à jour :

Code : Tout sélectionner

winget upgrade
Pour réaliser une mise à jour :

Code : Tout sélectionner

winget upgrade [IDapp]
En mode silencieux :

Code : Tout sélectionner

winget upgrade -h [IDapp]
Mise à jour de toutes les applications en mode silencieux :

Code : Tout sélectionner

winget upgrade -h --all
Vous pouvez rechercher avec un nom d'applications et l'installer :

Code : Tout sélectionner

winget search graphi
Si vous devez préparer des PC et installer toujours les mêmes applications, avec un script :

Code : Tout sélectionner

winget install -h KDE.Krita
winget install -h KDE.KritaShellExtension
winget install -h XnSoft.XnViewMP
...
la dernière version, disponible sur internet, sera installée.

Plus d'info sur https://github.com/Kugane/winget et/ou https://github.com/Romanitho/Winget-AutoUpdate
Pour ceux que les lignes de commande rebutent, il existe une interface GUI : https://github.com/Romanitho/Winget-Install-GUI

Imaginez un PS1 qui contient les mises à jour de toutes vos applications

Code : Tout sélectionner

$name = '7-Zip'
$lines = winget list --name $name
if ($lines -match '\bVersion\s+Available\b') {
  $verinstalled, $verAvailable = (-split $lines[-1])[-3,-2]
  [pscustomobject] @{
    Name = $name
    InstalledVersion = [version] $verInstalled
    AvailableVersion = [version] $verAvailable
  }
  exit 1
} else {
  Write-Verbose -Verbose "No upgrade for $name available."
  exit 0
}
J'espère que cette information vous ouvrira de nouveaux horizons ... :))
Dernière modification par LaDidi21 il y a 2 ans, modifié au total 1 fois.
Raison : Mise en français...
Avatar du membre
Auteur du sujet
sharky
Habitué
Habitué
Messages : 160
Enregistré le : il y a 6 ans

Message par sharky »

Re,

J'ai pris le temps d'adapter un script PS d'installation de mes applications.
Copiez-le et coller le code dans un fichier texte en le renommant l'extension en .ps1
Adaptez-le à vos besoins

Code : Tout sélectionner

#Install my apps
$apps = @(
	@{name = "JGraph.Draw" }, #draw.io
	@{name = "7zip.7zip" }, 
	@{name = "KDE.Krita" }, 
	@{name = "Notepad++.Notepad++" }, 
	@{name = "Microsoft.WindowsTerminal"; source = "msstore" }, 
	@{name = "OpenWhisperSystems.Signal" },				#Signal Destop
    @{name = "9NKSQGP7F2NH"; source = "msstore" },		# Whatsapp Desktop
	@{name = "CodecGuide.K-LiteCodecPack.Full" },		#K-Lite Codec Pack Full
	@{name = "Microsoft.PowerToys" },
	@{name = "Plex.Plex" }, 
    @{name = "9WZDNCRFJ3TJ"; source = "msstore" },      # Netflix
	@{name = "clsid2.mpc-hc" },							#MPC-HC 2.0.0 (64-bit)
    @{name = "9PMMSR1CGPWG"; source = "msstore" },      # HEIF-PictureExtension
    @{name = "9MVZQVXJBQ9V"; source = "msstore" },      # AV1 VideoExtension
    @{name = "9NCTDW2W1BH8"; source = "msstore" },      # Raw-PictureExtension
    @{name = "9N95Q1ZZPMH4"; source = "msstore" },      # MPEG-2-VideoExtension
    @{name = "9N4WGH0Z6VHQ"; source = "msstore" },      # HEVC-VideoExtensions
	@{name = "Microsoft.VCRedist.2015+.x86" },
	@{name = "Microsoft.DotNet.DesktopRuntime.6" },
	@{name = "Microsoft.VisualStudioCode" },
	@{name = "Microsoft.DotNet.DesktopRuntime.7" },
	@{name = "Microsoft.VCRedist.2015+.x64" },
	@{name = "Brave.Brave" },
	@{name = "Google.Chrome" },
	@{name = "Greenshot.Greenshot" },
);
Foreach ($app in $apps) {
	#check if the app is already installed
	$listApp = winget list --exact -q $app.name
	if (![String]::Join("", $listApp).Contains($app.name)) {
		Write-host "Installing:" $app.name
		if ($app.source -ne $null) {
			winget install --exact --silent $app.name --source $app.source
		}
		else {
			winget install --exact --silent $app.name 
		}
	}
	else {
		Write-host "Skipping Install of " $app.name
	}
}
Avatar du membre
Orimatema
Nouveau
Nouveau
Messages : 92
Enregistré le : il y a 3 ans

Message par Orimatema »

Merci pour ce sujet bien expliqué; mais que penses-tu de chocolatey qui fait la même chose?
Avatar du membre
LaDidi21
Modérateur
Modérateur
Messages : 13563
Enregistré le : il y a 15 ans

Message par LaDidi21 »

@Orimatema :
winget est natif !
Et ton produit n'a rien à voir...

-> Décryptage des liens du forum : extension "ThiWeb Crypt / Decrypt"™ ou Thiweb Live <-

Avatar du membre
Auteur du sujet
sharky
Habitué
Habitué
Messages : 160
Enregistré le : il y a 6 ans

Message par sharky »

Hello,

Comme le dit LaDidi21, winget est déjà dans Windows à la différence chocolatery que tu dois ajouter à ton système.

Tu peux toujours te baser sur winget et le combiner avec chocolatery en ajoutant wingetui
https://github.com/marticliment/WingetUI

Code : Tout sélectionner

winget install -h wingetui
Caractéristiques
  • WingetUI a la capacité d'installer, de mettre à jour et de désinstaller des packages de Winget, Scoop et Chocolatey. WingetUI détectera également si vos applications installées manuellement peuvent être mises à jour !
  • Il peut également mettre à niveau et désinstaller les packages précédemment installés, ainsi que désinstaller les applications Windows intégrées !
  • WingetUI a la capacité d'importer et d'exporter les packages de votre choix, afin que vous puissiez facilement les installer à l'avenir.
  • WingetUI prend en charge la gestion des buckets Scoop avec une interface.
  • Installez une ancienne version d'une application.
  • WigetUI affiche une notification lorsqu'il y a des mises à jour disponibles
  • Gérez vos mises à jour et packages installés à partir de son menu contextuel
  • L'utilisateur sera informé si l'installation/la mise à jour/la désinstallation d'une application s'est terminée avec succès ou non.
  • La possibilité de mettre en file d'attente les installations afin d'éviter les conflits.
  • Un thème sombre est disponible pour vous éviter de vous brûler les yeux. 😎
  • WingetUI a la capacité d'afficher des informations relatives au package (comme sa licence, le hachage SHA256, la page d'accueil, etc.) avant l'installation.
  • Il y a plus de 14000 packages disponibles (si winget, scoop et chocolatey sont activés) !
Avatar du membre
Orimatema
Nouveau
Nouveau
Messages : 92
Enregistré le : il y a 3 ans

Message par Orimatema »

Ok, pas de problème, je l'ai essayé en ligne de commande, ce n'est pas si compliqué
Effectivement mieux vaut un outil intégré qu'un nouveau logiciel
Merci pour la découverte :)
Avatar du membre
ghisda
Habitué
Habitué
Messages : 156
Enregistré le : il y a 3 ans

Message par ghisda »

@sharky
Merci pour la découverte !

Avatar du membre
Joselito
Modérateur
Modérateur
Messages : 4694
Enregistré le : il y a 11 ans

Message par Joselito »

Pour des raisons qui vous appartiennent, vous souhaitez utiliser Windows (IoT) Enterprise LTSC.
Certes, le PC obtenu sera dépouillé de logiciels potentiellement superflus mais par la même occasion, il sera privé de WinGET.
Que vous ne pourrez pas installer facilement avec le "Store" puisqu'il n'y a pas de "Store" non plus.


Pour que vous n'ayez pas à chercher, voici comment installer WinGet sur Windows 10/11 (IoT) Enterprise LTSC 2021/2024 en faisant appel au PowerShell :
La même chose, automatisée en script (Que les informaticiens me pardonnent !)

Code : Tout sélectionner

#---------------------------------------------------------------------------
# Récupère sur GitHub puis installe les dernnières versions de winget,
# de la licence et des dépendances
#---------------------------------------------------------------------------

$pass = ""
# Mode administrateur ?
if ([bool](([System.Security.Principal.WindowsIdentity]::GetCurrent()).groups -notcontains 'S-1-5-32-544')) {$pass = "`nMode administrateur requis"}
# PowerShell 64 bits ?
if (!([System.Environment]::Is64BitProcess)){$pass += "`nPowerShell x64 requis"}
# Winget déjà installé ?
if (get-command winget -erroraction silentlycontinue){$pass += "`nWinget est déjà installé"}

if ($pass-eq ""){

    $tempdir = New-Item -Path $env:temp -Name "WinGet-Temp" -ItemType Directory -Force

    # GitHub repository de WinGet
    $repos = Invoke-RestMethod -Uri "https://api.github.com/repos/microsoft/winget-cli/releases/latest" -Method Get
    # Récupération des liens
    $bundle = ($repos.assets | Where-Object name -Match "msixbundle").browser_download_url
    $license = ($repos.assets | Where-Object name -Match "License1.xml").browser_download_url
    $depends = ($repos.assets | Where-Object name -Match "DesktopAppInstaller_Dependencies.zip").browser_download_url
    # Téléchargement
    Start-BitsTransfer -Source $bundle -Destination "$tempdir\"
    Start-BitsTransfer -Source $license -Destination "$tempdir\"
    Start-BitsTransfer -Source $depends -Destination "$tempdir\"
    # Extraction-installation des dépendances 
    Expand-Archive "$tempdir\DesktopAppInstaller_Dependencies.zip" -DestinationPath "$tempdir" -Force
    $appxs = Get-ChildItem -Path "$tempdir\x64"
    ForEach ($appx in $appxs){Add-AppxPackage -Path "$tempdir\x64\$appx"}
    # Installation du package Winget avec la licence
    Add-AppxProvisionedPackage -Online -PackagePath "$tempdir\$(Split-Path -Path $bundle -Leaf)" -LicensePath "$tempdir\$(Split-Path -Path $license -Leaf)"
    
    # Temporisation sinon crash de l'instruction suivante
    Start-Sleep -seconds 3
    Write-host "Winget" (winget -v) "installé" -ForegroundColor Green
    Remove-Item $tempdir -Recurse
}
Else {
    Write-Warning $pass
}
Read-Host "`n[Entrée] pour quitter "

Vous pourrez ensuite installer à la chaine vos utilitaires préférés. Voir le message de sharky en haut du fil ici
Exemple avec WinRAR :

Code : Tout sélectionner

Winget install --exact --id RARLab.WinRAR --source winget --accept-source-agreements
Et pourquoi ne pas automatiser [Installation + Mise en place d'une licence] avec un script ?

Code : Tout sélectionner

# -----------------------------------------------
# Installation de WinRar x64 + licence via Winget
# -----------------------------------------------

$pass = ""
# Mode administrateur ?
if ([bool](([System.Security.Principal.WindowsIdentity]::GetCurrent()).groups -notcontains 'S-1-5-32-544')) {$pass = "`nMode administrateur requis"}
# PowerShell 64 bits ?
if (!([System.Environment]::Is64BitProcess)){$pass += "`nPowerShell x64 requis"}
# WinRAR déjà installé ?
if ([bool](Get-ChildItem -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" | Where-Object {$_.Name -like "*WinRAR*"})){$pass += "`nWinRAR est déjà installé"}
# Winget installé ?
if(!(Get-Command WinGet -ErrorAction SilentlyContinue)){$pass += "`nWinGet requis"}

if ($pass -eq ""){
    # Installation avec acceptation des contrats
    # Langage système ; si version Fr précisée => risque de louper la dernère version
    Winget install --exact --id RARLab.WinRAR --source winget --accept-source-agreements

    # Temporisation pour éviter le crash de l'instruction suivante
    Start-Sleep -Seconds 3

    # Récupération de la clé "Uninstall" de WinRAR
    $Key = Get-ChildItem -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" | Where-Object {$_.Name -like "*WinRAR*"}
    # Récupération du répertoire d'installation de WinRAR
    $Path = $Key.getvalue("InstallLocation")

    # Licence
    $licence = "RAR registration data
    Forum ThiWeb
    Local Site License
    UID=03c7819a23bc9e759c4c
    64122122509c4c2dcd6a177777815ae3ee04790df60efac4ae6497
    b56fe519b5670dcc123960694c88f20734f7fa6ad968865654a57b
    0f0edf295d607ce6fa6d6b3667401b413bdcbccca3152c8ab6abc5
    931818a35674a26f065261f8bce32dfbce60ab6bb47f6025022921
    7e06568d36904b1a9142b5db54fb3f50f2fe60b3560fa2d13ccb43
    e41adc3e87a620e02121bdf4d60e31cabbcd4c948c5f1af760c6c5
    de0d7344feafa0eca1144cd6246a1233b95a27e9516b1520024008"

    # Mise en place de la licence "rarreg.key" dans le répertoire de WinRAR après suppression de l'indentation (espace x 4)
    New-Item -Itemtype file -Path (Join-Path $Path "rarreg.key") -Force | Add-Content -Value $licence.Replace("    ","")
    Write-Host "Licence WinRAR en place"
}
Else {
    write-warning $pass
}
Read-Host "`n[Entrée] pour quitter "

Répondre

Qui est en ligne

Utilisateurs parcourant ce forum : Joselito et 2 invités