Le téléchargement de packages PSGallery devient facile avec la fonction Get-PSGalleryPackages. En effet, ce script permet de télécharger des packages et leurs dépendances directement depuis la PowerShell Gallery. Voici le code et son explication.
Le code PowerShell
Obtention des liens de téléchargement PSGallery
Avant de vous livrer le script définitif, faisons une pause sur la fonction Get-ActualUrl
.
La fonction Get-ActualUrl prend une URL abrégée en entrée et renvoie l’URL réelle (lien complet). Elle effectue une requête Web à l’aide de la classe WebRequest pour obtenir l’URL de redirection finale.
Function Get-ActualUrl {
param(
[Parameter(Mandatory=$true, Position=0)]
[ValidateNotNullOrEmpty()]
[uri] $Uri
)
$WebClientObject = [System.Net.WebClient]::new()
$WebRequest = [System.Net.WebRequest]::create($Uri)
$WebResponse = $WebRequest.GetResponse()
$ActualDownloadURL = $WebResponse.ResponseUri.AbsoluteUri
$ResultsObject = [PsCustomObject] @{
'Shortened URL' = $Uri;
'Actual URL' = $ActualDownloadURL
}
$WebResponse.Close()
$ResultsObject.'Actual URL'
}
Détails :
- Paramètre $Uri : L’URL raccourcie que la fonction va traiter.
- La fonction crée un objet WebRequest pour l’URL fournie et récupère la réponse HTTP.
- $ActualDownloadURL : Stocke l’URL complète après que toutes les redirections ont été suivies.
- La fonction retourne l’URL réelle sous forme d’un objet personnalisé.
Exemple d’usage avec une URL abrégée sur aka.ms
Imaginons que tu souhaites obtenir l’URL complète derrière une URL abrégée de Microsoft, comme une de type aka.ms.
$ShortenedUrl = 'https://aka.ms/fslogix_download'
$ActualUrl = Get-ActualUrl -Uri $ShortenedUrl
Write-Host "L'URL réelle est : $ActualUrl"
L'URL réelle est : https://download.microsoft.com/download/e/c/4/ec4b55b3-d2f3-4610-aebd-56478eb0d582/FSLogix_Apps_2.9.8884.27471.zip
Cet exemple montre comment gérer les liens abrégés avec des outils PowerShell.
Le téléchargement de packages PSGallery
Bien, maintenant que nous avons un outils pour le moins très utile, nous pouvons en faire quelque chose d’encore plus utile.
Function Get-PSGalleryPackages {
[CmdletBinding()]
param(
[Parameter(Mandatory=$true, ValueFromPipeline=$true,Position=0)]
[ValidateNotNullOrEmpty()]
[String] $PackageName,
[ValidateNotNullOrEmpty()]
[String] $Destination
)
Function Get-ActualUrl {
param(
[Parameter(Mandatory=$true, Position=0)]
[ValidateNotNullOrEmpty()]
[uri] $Uri
)
$WebClientObject = [System.Net.WebClient]::new()
$WebRequest = [System.Net.WebRequest]::create($Uri)
$WebResponse = $WebRequest.GetResponse()
$ActualDownloadURL = $WebResponse.ResponseUri.AbsoluteUri
$ResultsObject = [PsCustomObject] @{
'Shortened URL' = $Uri;
'Actual URL' = $ActualDownloadURL
}
$WebResponse.Close()
$ResultsObject.'Actual URL'
}
$BaseMopdule = Find-Module $packageName
$Uri = Get-ActualUrl "https://www.powershellgallery.com/api/v2/package/$packageName"
Start-BitsTransfer $Uri -HttpMethod Get -Destination $Destination
$BaseMopdule.Dependencies | ForEach-Object {
$Uri = Get-ActualUrl "https://www.powershellgallery.com/api/v2/package/$($_.Name)"
Start-BitsTransfer $Uri -HttpMethod Get -Destination $Destination
}
}
Fonctionnement
La fonction Get-PSGalleryPackages prend en entrée deux paramètres :
- PackageName : le nom du package à télécharger.
- Destination : l’emplacement où le package et ses dépendances seront sauvegardés.
Grâce à cette fonction, tu peux télécharger un package spécifique et toutes ses dépendances directement depuis la PowerShell Gallery, en utilisant l’API de PowerShell et BitsTransfer.
Cette cmdlet est particulièrement utile si tu utilises un référentiel local PowerShellGet. Elle simplifie le processus de téléchargement de packages PSGallery et de leurs dépendances, surtout lorsque tu es hors ligne ou que tu souhaites conserver une copie locale.
Exemple: Téléchargez le packages « Pester »
Pour illustrer le fonctionnement de la cmdlet Get-PSGalleryPackages, voici un exemple concret. Imaginons que tu souhaites télécharger le package Pester depuis PowerShell Gallery et le stocker dans le répertoire C:\Packages
.
# Exemple : Téléchargement du package 'Pester' et ses dépendances
Get-PSGalleryPackages -packageName 'Pester' -Destination 'C:\Packages'
Explication
- packageName ‘Pester’ : Le nom du package que tu souhaites télécharger depuis PowerShell Gallery.
- Destination ‘C:\Packages’ : Le chemin vers le répertoire où tu souhaites sauvegarder le package et ses dépendances.
Une fois la commande exécutée, le package Pester et toutes ses dépendances seront téléchargés dans le répertoire spécifié.
Cet exemple montre à quel point il est simple et rapide de gérer les packages et leurs dépendances avec cette fonction.
Pourquoi l’utiliser ?
Gain de temps : en automatisant le téléchargement de toutes les dépendances.
Sécurité : pour s’assurer que tous les packages requis sont disponibles en local.