Télécharger des fichiers à l’aide de BITS (Windows 7 et Windows 10)

Intérêt ?

Vous souhaitez télécharger un gros fichier (plusieurs GB) mais sans surcharger le lien ? Le transfert BITS est fait pour vous (et ce script aussi).

Avantage :

  • Gestion par queue
  • Taux de transfert modifiable
  • Soumis à la QOS
  • Capacité de reprise (si le serveur en face l’accepte)
  • Téléchargement de fichiers / dossiers sous dossier etc
  • Possible téléchargement multiple.

Inconvénient :

  • Pas « user-friendly »

Téléchargement standard :

saturation de la bande passante

Téléchargement BITS :

téléchargement par « pic », ne saturant plus le lien.

Le script :

Dans cette exemple, nous allons télécharger une ISO Ubuntu de quelques giga (voir la variable $source)
Une fois le téléchargement complété, cette ISO sera ensuite stockée dans un répertoire (voir la variable $destination)

Concernant la source, elle peut être :
– Un fichier (dans un répertoire réseau ou sur internet)
– Un répertoire avec des fichiers (dans un répertoire réseau)

Concernant la destination, elle DOIT être :
– Si on récupère un fichier, la destination DOIT être un fichier. Par exemple, si on télécharge un ISO, la destination doit être C:\XXX\XXX\monfichier.iso
– Si on récupère un répertoire/sous répertoire, la destination DOIT être un répertoire.


Les clefs de registre du début sont là pour configurer BITS (débits et mode) Pour le moment, je n’ai pas trouvé d’autres moyens (si quelqu’un à une idée… :p )

Version avec Proxy :

#Configuration de BITS.
REG add "HKLM\SOFTWARE\Policies\Microsoft\Windows\BITS" /v EnableBITSMaxBandwidth /t REG_DWORD /d 1 /f
REG add "HKLM\SOFTWARE\Policies\Microsoft\Windows\BITS" /v MaxBandwidthValidFrom /t REG_DWORD /d 8 /f
REG add "HKLM\SOFTWARE\Policies\Microsoft\Windows\BITS" /v MaxBandwidthValidTo /t REG_DWORD /d 17 /f
REG add "HKLM\SOFTWARE\Policies\Microsoft\Windows\BITS" /v MaxTransferRateOffSchedule /t REG_DWORD /d 90000 /f #valeur à modifier pour brider (en Kbit/s)
REG add "HKLM\SOFTWARE\Policies\Microsoft\Windows\BITS" /v MaxTransferRateOnSchedule /t REG_DWORD /d 90000 /f #valeur à modifier pour brider (en Kbit/s)
REG add "HKLM\SOFTWARE\Policies\Microsoft\Windows\BITS" /v UseSystemMaximum /t REG_DWORD /d 0 /f

#Authentification Proxy
$ProxyCred = Get-Credential -Message "Proxy Auth"
$source = "http://mirrors.phx.ms/ubuntu-cd/18.04.2/ubuntu-18.04.2-desktop-amd64.iso" #exemple : "T:\XXXXX\XXXXX\macon.doc" ou "T:\XXXXX\XXXXX\*.*" pour copier l'ensemble des répertoires/fichiers
$destination = "C:\Tempo\ubuntu.iso" #exemple : "C:\temp\" ou "C:\temp\macon.doc"

Start-BitsTransfer -Source $source -Destination $destination -Priority low -ProxyUsage SystemDefault -ProxyAuthentication basic -ProxyCredential $ProxyCred -TransferType Download

Version sans proxy :

#Configuration de BITS.
REG add "HKLM\SOFTWARE\Policies\Microsoft\Windows\BITS" /v EnableBITSMaxBandwidth /t REG_DWORD /d 1 /f
REG add "HKLM\SOFTWARE\Policies\Microsoft\Windows\BITS" /v MaxBandwidthValidFrom /t REG_DWORD /d 8 /f
REG add "HKLM\SOFTWARE\Policies\Microsoft\Windows\BITS" /v MaxBandwidthValidTo /t REG_DWORD /d 17 /f
REG add "HKLM\SOFTWARE\Policies\Microsoft\Windows\BITS" /v MaxTransferRateOffSchedule /t REG_DWORD /d 90000 /f #valeur à modifier pour brider (en Kbit/s)
REG add "HKLM\SOFTWARE\Policies\Microsoft\Windows\BITS" /v MaxTransferRateOnSchedule /t REG_DWORD /d 90000 /f #valeur à modifier pour brider (en Kbit/s)
REG add "HKLM\SOFTWARE\Policies\Microsoft\Windows\BITS" /v UseSystemMaximum /t REG_DWORD /d 0 /f

$source = "http://mirrors.phx.ms/ubuntu-cd/18.04.2/ubuntu-18.04.2-desktop-amd64.iso" #exemple : "T:\XXXXX\XXXXX\macon.doc" ou "T:\XXXXX\XXXXX\*.*" pour copier l'ensemble des répertoires/fichiers
$destination = "C:\Tempo\ubuntu.iso" #exemple : "C:\temp\" ou "C:\temp\macon.doc"

Start-BitsTransfer -Source $source -Destination $destination -Priority low -TransferType Download

Lancement du script :

Vous devez être administrateur du PC pour pouvoir lancer le script.
Pensez aussi à faire un :

Set-ExecutionPolicy Unrestricted

… pour autoriser l’exécution des scripts.

Lors que vous lancerez le script, le téléchargement se lancera automatiquement, une « barre » de progression s’affichera aussi :

Activer Windows 10 lors d’un déploiement MDT à travers un Proxy.

Principe / cas pratique :

Vous souhaitez activer Windows 10 lors d’un déploiement MDT mais vous êtes derrière un proxy et le compte Local du PC utilisé pendant le déploiement n’a pas accès à internet. Que faire ?

Mettre un script lors du déploiement pour simuler une connexion au proxy via un compte de service qui a accès à internet.

Lets Go :

Afin de faire les choses proprement et ne pas mettre de mot de passe en claire dans le script, nous allons générer une clef contenant le mot de passe du compte. Vous allez donc avoir besoin de ceci en premier :

$masecurestring = ConvertTo-SecureString -AsPlainText 'MOT DE PASSE DU COMPTE QUI DEVRA SE CONNECTER AU PROXY' -force
$maclef = $masecurestring | ConvertFrom-SecureString
$CheminRepertoireClef = "chemin daccess pour stocker la clef"
out-file -filepath "$CheminRepertoireClef\MaClef.txt" -InputObject $maclef 
#Ecriture du résultat dans le fichier MaClef.txt

! Pensez à supprimer le mot de passe rentré dans le script une fois le fichier généré !

Une fois le fichier généré, stockez le quelque part en attendant la suite.

Le script d’activation :

Le script va faire appel au .NET suivant :
System.Net.WebProxy, System.Net.WebClient, System.Net.NetworkCredential permettant la communication vers internet via un proxy + authentification.
Il y a aussi une requête WMI pour trouver la clef d’activation Windows 10 lié au matériel et l’installer.

Il faut changer les variables suivantes pour que cela « match » avec votre environnement :

$Username= "Nom d'utilisateur, exemple : CORPO\utilisateur ou utilisateur etc.."
$MaClef= "chemin vers le fichier"
$WebProxy= New-Object System.Net.WebProxy("IP:PORT DU PROXY",$true)

Le script entier :


$Username= "Nom d'utilisateur, exemple : CORPO\utilisateur ou utilisateur etc.."
$MaClef= "chemin vers le fichier"
$Password= Get-Content $MaClef | ConvertTo-SecureString
$WebProxy= New-Object System.Net.WebProxy("IP:PORT DU PROXY",$true)
$url="http://google.fr"

#Configuration proxy
Write-Host "Configuration du Proxy pour l'activation Windows"
$WebClient = New-Object System.Net.WebClient
$WebClient.Proxy=$WebProxy
$WebClient.Proxy.Credentials = New-Object System.Net.NetworkCredential($Username, $Password)

#Init dun telechargement pour confirmer lauth proxy
$WebClient.DownloadData($url)

#Interrogation pour recup la clef et l'installer
Write-Host "Get de la Clef Windows depuis le bios"
$keyrecup = powershell "(Get-WmiObject -query ‘select * from SoftwareLicensingService’).OA3xOriginalProductKey"
$computer = gc env:computername
$service = get-wmiObject -query "select * from SoftwareLicensingService" -computername $computer
$service.InstallProductKey($keyrecup)
$service.RefreshLicenseStatus()

#activation de windows
Write-Host "Activation de Windows, veuillez patienter"
#Creation dun job pour lactivation
Start-Job -ScriptBlock {start-process cmd.exe -ArgumentList "/C slmgr.vbs /ato"}

Je pense que le script est suffisamment commenté pour que vous puissiez comprendre ce qu’il fait. Je vous conseille de le tester avant de le mettre en production sur le MDT. Les erreurs sont assez explicites :

Ici , c’est un problème avec le mot de passe ou le compte utilisé pour s’authentifier sur le proxy.

Créer une tâche sur le MDT :

  1. Copier le script Powershell et le fichier MaClef.txt dans le répertoire de votre DeploiementShare. Dans mon cas, le répertoire se trouve içi :
     » C:\MDT\Scripts « 
  2. Modifier le script afin d’avoir cette variable là (pour faire simple , on signale au script que la clef se trouve dans le même répertoire) :
$MaClef= "C:\MDT\Scripts\MaClef.txt"
devient :
$MaClef= ".\MaClef.txt"

3. Éditez votre « Task Sequence » préféré :

4. Allez dans le deuxième onglet puis dans la catégorie « State Restore »

5. Cliquez sur « Add » puis « General » et enfin « Run Command Line »

Et non pas « Run PowerShell Script »

6. Éditez votre nouvelle tâche « Command Line » comme ci dessous :

La « Command Line » si vous souhaitez faire un « copier coller » :

Powershell.exe -ExecutionPolicy ByPass -File "%SCRIPTROOT%\MDT_activation_windows.ps1"

7. Dans les « Options » de la tâche, vous pouvez cocher « Continue on Error » pour éviter que le script ne fasse stopper votre déploiement. Vous pourrez toujours lancer le script à la main à la fin du déploiement.