Advertisement
wackou

ENI TORRENT DEPLOY (V1)

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