daily pastebin goal
44%
SHARE
TWEET

ENI TORRENT DEPLOY (V1)

wackou Jun 20th, 2014 1,821 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
Top