wackou

ENI TORRENT DEPLOY (V1)

Jun 20th, 2014
2,192
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. # Permet de deployer des fichiers sur des postes en utilisant le protocole bittorrent
  2. # Pour cela, on liste chaque salles présentes dans une OU, l'utilisateur sélectionne la salle
  3. # On récupère la liste des PC de la salle choisie
  4. # On recupère la liste des .torrent disponibles (cours), l'utilisateur choisie le cours
  5. # On test enfin la connection au PC, si OK on kill le processus utorrent.exe, on créé les repertoires necessaire
  6. # puis copie du .torrrent et enfin on lance utorrent
  7. # Si test NOK, un message d'erreur s'affiche et on passe au PC suivant
  8. # Le script permet de générer des logs pour garder un historique
  9. #
  10. # Wackou
  11. # contact@wackou.com
  12. # www.wackou.com
  13.  
  14. #VARIABLES
  15. $window = (Get-Host).UI.RawUI
  16. $window.WindowTitle = "ENI TORRENT DEPLOY"
  17. import-module ServerManager #Pour rendre compatible Windows Server 2008 avec la commande Get-WindowsFeature
  18. $DATA="C:\DATA" # Dossier de destination, les fichiers seront téléchargés ici
  19. $TORRENT_C="C:\torrent" # Dossier contenant les .torrent en destination (client)
  20. $TORRENT_S="TORRENT" #Dossier contenant les .torrents (serveur)
  21. $TEMP="TEMP" #Dossier temporaire pour recevoir les fichiers et logs
  22. $BIN="BIN" #Dossier contenant les binaires
  23. $counter_cours=-1 #Compteur pour le nom du .torrent
  24. $counter_salles=-1 #Compteur pour le nom de la salle
  25. $LogTime = Get-Date -Format "dd-MM-yyyy_HH-mm-ss" # obtenir la date dès le lancement pour LOG
  26. $log = 1 # 1 ou 0 pour gestion des logs ou non
  27. $OU="OU=Salles,DC=domaine,DC=local"#OU où se trouvent les salles/PC
  28. $RSAT = Get-WindowsFeature RSAT-ADDS-Tools #variable pour récupèrer le statut de RSAT-ADDS-Tools
  29.  
  30. #FONCTIONS
  31. function check {#Check de l'environnement, des dossiers et RSAT-ADDS-Tools
  32. If (Test-Path $TEMP){ #check si dossier $TEMP présent
  33.     #OK
  34.     }Else{
  35.         write-host "Le dossier $TEMP n'existe pas !" -foregroundcolor white -backgroundcolor red
  36.         Read-Host "Press Enter to continue..." #Hack pause si version powershell < 3
  37.         exit
  38.     }
  39. #Powershell execution policy
  40. #set-executionpolicy -scope process -force remotesigned
  41. #set-executionpolicy -scope localmachine -force remotesigned
  42. If ($PSVersionTable.PSVersion.Major -ge 3){ #check la version de Powershell (minimum 3)
  43.     #OK
  44.     }Else{
  45.         write-host "La version minimum de Powershell requise est 3 !" -foregroundcolor white -backgroundcolor red
  46.             if ($log) {
  47.             time
  48.             write-output "$time --> La version minimum de Powershell requise est 3 !" >> $TEMP\LOG_$LogTime.txt
  49.             }
  50.         Read-Host "Press Enter to continue..." #Hack pause si version powershell < 3
  51.         exit
  52.     }
  53. If (Test-Path $TORRENT_S){ #check si dossier $TORRENT_S présent
  54.     #OK
  55.     }Else{
  56.         write-host "Le dossier $TORRENT_S n'existe pas !" -foregroundcolor white -backgroundcolor red
  57.             if ($log) {
  58.             time
  59.             write-output "$time --> Le dossier $TORRENT_S n'existe pas !" >> $TEMP\LOG_$LogTime.txt
  60.             }
  61.         pause
  62.         exit
  63.     }
  64. If (Test-Path $BIN){ #check si dossier $BIN présent
  65.     #OK
  66.     }Else{
  67.         write-host "Le dossier $BIN n'existe pas !" -foregroundcolor white -backgroundcolor red
  68.             if ($log) {
  69.             time
  70.             write-output "$time --> Le dossier $BIN n'existe pas !" >> $TEMP\LOG_$LogTime.txt
  71.             }
  72.         pause
  73.         exit
  74.     }
  75. If (Test-Path $BIN\psexec.exe){ #check si fichier $BIN\psexec.exe présent
  76.     #OK
  77.     }Else{
  78.         write-host "Le fichier psexec.exe n'existe pas !" -foregroundcolor white -backgroundcolor red
  79.             if ($log) {
  80.             time
  81.             write-output "$time --> Le fichier psexec.exe n'existe pas !" >> $TEMP\LOG_$LogTime.txt
  82.             }
  83.         pause
  84.         exit
  85.     }
  86. If (Test-Path $BIN\utorrent.exe){ #check si fichier $BIN\utorrent.exe présent
  87.     #OK
  88.     }Else{
  89.         write-host "Le fichier utorrent.exe n'existe pas !" -foregroundcolor white -backgroundcolor red
  90.             if ($log) {
  91.             time
  92.             write-output "$time --> Le fichier utorrent.exe n'existe pas !" >> $TEMP\LOG_$LogTime.txt
  93.             }
  94.         pause
  95.         exit
  96.     }
  97. If ($RSAT.Installed -eq "True"){#check si RSAT-ADDS-Tools installé, sinon on installe
  98.     #OK
  99.     }Else{
  100.         Write-Host "RSAT-ADDS-Tools non installe !" -foregroundcolor white -backgroundcolor red
  101.             if ($log) {
  102.             time
  103.             write-output "$time --> RSAT-ADDS-Tools non installe !" >> $TEMP\LOG_$LogTime.txt
  104.             }
  105.         Install-WindowsFeature RSAT-ADDS-Tools | Out-Null
  106.     }
  107. }
  108. function time{ #Obtenir l'heure lors de l'appel de la fonction (utilise pour les logs)
  109.     $global:time=Get-Date -Format "HH:mm:ss"
  110. }
  111. function clean { #ne pas afficher les messages d'informations
  112.     Select-Object -Property * -ExcludeProperty *
  113. }
  114. function header { #ENI TORRENT DEPLOY ASCII ART
  115. cls
  116. write-host "              
  117.               ______ _   _ _____   _______ ____  _____  _____  ______ _   _ _______
  118.              |  ____| \ | |_   _| |__   __/ __ \|  __ \|  __ \|  ____| \ | |__   __|
  119.              | |__  |  \| | | |      | | | |  | | |__) | |__) | |__  |  \| |  | |  
  120.              |  __| | .   | | |      | | | |  | |  _  /|  _  /|  __| | .   |  | |  
  121.              | |____| |\  |_| |_     | | | |__| | | \ \| | \ \| |____| |\  |  | |  
  122.              |______|_| \_|_____|    |_|  \____/|_|  \_\_|  \_\______|_| \_|  |_|  
  123.                                                                                    
  124.                                                                                    
  125.                              _____  ______ _____  _      ______     __
  126.                             |  __ \|  ____|  __ \| |    / __ \ \   / /
  127.                             | |  | | |__  | |__) | |   | |  | \ \_/ /
  128.                             | |  | |  __| |  ___/| |   | |  | |\   /  
  129.                             | |__| | |____| |    | |___| |__| | | |  
  130.                             |_____/|______|_|    |______\____/  |_|
  131. "
  132. }
  133.  
  134. #DEBUT DU SCRIPT
  135. check
  136. header
  137. #SALLES
  138. write-host "Voici les salles disponibles :"
  139. dsquery OU "$OU"  -o rdn -name 'Salle *' |%{$_ -replace '"', ""} > $TEMP\SALLES_$LogTime.txt #on recupère les salles de OU
  140. $salles = Get-Content $TEMP\SALLES_$LogTime.txt
  141. ForEach ($salles in $salles)
  142. {
  143.     $counter_salles++
  144.     write-host $counter_salles----------$salles -foregroundcolor green #affichage du compteur+salles
  145. }
  146. Do
  147. {
  148.     $NUM = Read-Host "Entrer le numero de salle (0,1,2,...) "
  149. }
  150. while ($NUM -gt $counter_salles)
  151. $salles=Get-content $TEMP\SALLES_$LogTime.txt | Select-Object -Index $NUM # index 0 = ligne 1
  152.  
  153. #PC
  154. dsquery computer "OU=$salles,$OU" -o rdn |% {$_ -replace '"', ""} > $TEMP\COMPUTERS_$LogTime.txt #on recupère les PC de OU (salles)
  155. write-host
  156. write-host "Voici les PC de cette salle"
  157. $PC=Get-content $TEMP\COMPUTERS_$LogTime.txt # affichage pour verifs
  158. write-host "$PC"  -foregroundcolor green
  159. write-host
  160.  
  161.  
  162. #NOM DU COURS
  163. write-host "Voici les cours disponibles :"
  164. Get-ChildItem -path $TORRENT_S -filter *.torrent -name > $TEMP\TORRENT_$LogTime.txt # on liste .torrent
  165. $cours = Get-Content $TEMP\TORRENT_$LogTime.txt
  166. ForEach ($cours in $cours)
  167. {
  168.     $counter_cours++
  169.     write-host $counter_cours----------$cours -foregroundcolor green #affichage du compteur+torrent
  170. }
  171. Do
  172. {
  173.     $NUM = Read-Host "Entrer le numero du cours (0,1,2,...) "
  174. }
  175. while ($NUM -gt $counter_cours)
  176. $FILE=Get-content $TEMP\TORRENT_$LogTime.txt | Select-Object -Index $NUM # index 0 = ligne 1
  177.  
  178.  
  179. #DEPLOIEMENT
  180. ForEach ($PC in $PC)
  181. {
  182.     if (Test-Connection -ComputerName $PC -Quiet -Count 2) { #test connexion, si true alors on lance
  183.         write-host "Lancement sur $PC de $FILE ..." -foregroundcolor green
  184.         #LOG
  185.         if ($log) {
  186.             time
  187.             write-output "$time --> Lancement sur $PC de $FILE ..." >> $TEMP\LOG_$LogTime.txt
  188.             }
  189.         # Kill du processus utorrent
  190.         write-host "Kill du processus ..." -foregroundcolor green
  191.         taskkill.exe /S $PC /IM utorrent.exe /T /F | clean
  192.         # creation du repertoire DATA
  193.         write-host "Creation repertoire DATA ..." -foregroundcolor green
  194.         $d = [WMIClass]"\\$PC\root\cimv2:Win32_Process"
  195.         $d.Create("cmd.exe /c md $DATA") | clean
  196.         # creation du repertoire torrent
  197.         write-host "Creation repertoire TORRENT ..." -foregroundcolor green
  198.         $t = [WMIClass]"\\$PC\root\cimv2:Win32_Process"
  199.         $t.Create("cmd.exe /c md $TORRENT_C") | clean
  200.         # copie du .torrent dans rerpertoire torrent
  201.         write-host "Copie du .torrent ..." -foregroundcolor green
  202.         Copy-Item $TORRENT_S\$FILE -Destination \\$PC\C$\torrent\ -force
  203.         # lancement de utorrent et ajout auto du .torrent
  204.         write-host "Lancement de uTorrent ..." -foregroundcolor green
  205.         .$BIN\psexec.exe -accepteula \\$PC -c -v -d -s -i $BIN\uTorrent.exe /HIDE /NOINSTALL /DIRECTORY "$DATA" "$TORRENT_C\$FILE"
  206.     }
  207.     else { #si test NOK, on affiche et on log eventuellement
  208.         write-host "Le $PC ne repond pas !" -foregroundcolor white -backgroundcolor red
  209.         #LOG
  210.         if ($log) {
  211.             time
  212.             write-output "$time --> Le $PC ne repond pas !" >> $TEMP\LOG_$LogTime.txt
  213.             }
  214.         }
  215. }
RAW Paste Data