Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Permet de deployer des fichiers sur des postes en utilisant le protocole bittorrent
- # Pour cela, on liste chaque salles présentes dans une OU, l'utilisateur sélectionne la salle
- # On récupère la liste des PC de la salle choisie
- # On recupère la liste des .torrent disponibles (cours), l'utilisateur choisie le cours
- # On test enfin la connection au PC, si OK on kill le processus utorrent.exe, on créé les repertoires necessaire
- # puis copie du .torrrent et enfin on lance utorrent
- # Si test NOK, un message d'erreur s'affiche et on passe au PC suivant
- # Le script permet de générer des logs pour garder un historique
- #
- # Wackou
- # contact@wackou.com
- # www.wackou.com
- #VARIABLES
- $window = (Get-Host).UI.RawUI
- $window.WindowTitle = "ENI TORRENT DEPLOY"
- import-module ServerManager #Pour rendre compatible Windows Server 2008 avec la commande Get-WindowsFeature
- $DATA="C:\DATA" # Dossier de destination, les fichiers seront téléchargés ici
- $TORRENT_C="C:\torrent" # Dossier contenant les .torrent en destination (client)
- $TORRENT_S="TORRENT" #Dossier contenant les .torrents (serveur)
- $TEMP="TEMP" #Dossier temporaire pour recevoir les fichiers et logs
- $BIN="BIN" #Dossier contenant les binaires
- $counter_cours=-1 #Compteur pour le nom du .torrent
- $counter_salles=-1 #Compteur pour le nom de la salle
- $LogTime = Get-Date -Format "dd-MM-yyyy_HH-mm-ss" # obtenir la date dès le lancement pour LOG
- $log = 1 # 1 ou 0 pour gestion des logs ou non
- $OU="OU=Salles,DC=domaine,DC=local"#OU où se trouvent les salles/PC
- $RSAT = Get-WindowsFeature RSAT-ADDS-Tools #variable pour récupèrer le statut de RSAT-ADDS-Tools
- #FONCTIONS
- function check {#Check de l'environnement, des dossiers et RSAT-ADDS-Tools
- If (Test-Path $TEMP){ #check si dossier $TEMP présent
- #OK
- }Else{
- write-host "Le dossier $TEMP n'existe pas !" -foregroundcolor white -backgroundcolor red
- Read-Host "Press Enter to continue..." #Hack pause si version powershell < 3
- exit
- }
- #Powershell execution policy
- #set-executionpolicy -scope process -force remotesigned
- #set-executionpolicy -scope localmachine -force remotesigned
- If ($PSVersionTable.PSVersion.Major -ge 3){ #check la version de Powershell (minimum 3)
- #OK
- }Else{
- write-host "La version minimum de Powershell requise est 3 !" -foregroundcolor white -backgroundcolor red
- if ($log) {
- time
- write-output "$time --> La version minimum de Powershell requise est 3 !" >> $TEMP\LOG_$LogTime.txt
- }
- Read-Host "Press Enter to continue..." #Hack pause si version powershell < 3
- exit
- }
- If (Test-Path $TORRENT_S){ #check si dossier $TORRENT_S présent
- #OK
- }Else{
- write-host "Le dossier $TORRENT_S n'existe pas !" -foregroundcolor white -backgroundcolor red
- if ($log) {
- time
- write-output "$time --> Le dossier $TORRENT_S n'existe pas !" >> $TEMP\LOG_$LogTime.txt
- }
- pause
- exit
- }
- If (Test-Path $BIN){ #check si dossier $BIN présent
- #OK
- }Else{
- write-host "Le dossier $BIN n'existe pas !" -foregroundcolor white -backgroundcolor red
- if ($log) {
- time
- write-output "$time --> Le dossier $BIN n'existe pas !" >> $TEMP\LOG_$LogTime.txt
- }
- pause
- exit
- }
- If (Test-Path $BIN\psexec.exe){ #check si fichier $BIN\psexec.exe présent
- #OK
- }Else{
- write-host "Le fichier psexec.exe n'existe pas !" -foregroundcolor white -backgroundcolor red
- if ($log) {
- time
- write-output "$time --> Le fichier psexec.exe n'existe pas !" >> $TEMP\LOG_$LogTime.txt
- }
- pause
- exit
- }
- If (Test-Path $BIN\utorrent.exe){ #check si fichier $BIN\utorrent.exe présent
- #OK
- }Else{
- write-host "Le fichier utorrent.exe n'existe pas !" -foregroundcolor white -backgroundcolor red
- if ($log) {
- time
- write-output "$time --> Le fichier utorrent.exe n'existe pas !" >> $TEMP\LOG_$LogTime.txt
- }
- pause
- exit
- }
- If ($RSAT.Installed -eq "True"){#check si RSAT-ADDS-Tools installé, sinon on installe
- #OK
- }Else{
- Write-Host "RSAT-ADDS-Tools non installe !" -foregroundcolor white -backgroundcolor red
- if ($log) {
- time
- write-output "$time --> RSAT-ADDS-Tools non installe !" >> $TEMP\LOG_$LogTime.txt
- }
- Install-WindowsFeature RSAT-ADDS-Tools | Out-Null
- }
- }
- function time{ #Obtenir l'heure lors de l'appel de la fonction (utilise pour les logs)
- $global:time=Get-Date -Format "HH:mm:ss"
- }
- function clean { #ne pas afficher les messages d'informations
- Select-Object -Property * -ExcludeProperty *
- }
- function header { #ENI TORRENT DEPLOY ASCII ART
- cls
- write-host "
- ______ _ _ _____ _______ ____ _____ _____ ______ _ _ _______
- | ____| \ | |_ _| |__ __/ __ \| __ \| __ \| ____| \ | |__ __|
- | |__ | \| | | | | | | | | | |__) | |__) | |__ | \| | | |
- | __| | . | | | | | | | | | _ /| _ /| __| | . | | |
- | |____| |\ |_| |_ | | | |__| | | \ \| | \ \| |____| |\ | | |
- |______|_| \_|_____| |_| \____/|_| \_\_| \_\______|_| \_| |_|
- _____ ______ _____ _ ______ __
- | __ \| ____| __ \| | / __ \ \ / /
- | | | | |__ | |__) | | | | | \ \_/ /
- | | | | __| | ___/| | | | | |\ /
- | |__| | |____| | | |___| |__| | | |
- |_____/|______|_| |______\____/ |_|
- "
- }
- #DEBUT DU SCRIPT
- check
- header
- #SALLES
- write-host "Voici les salles disponibles :"
- dsquery OU "$OU" -o rdn -name 'Salle *' |%{$_ -replace '"', ""} > $TEMP\SALLES_$LogTime.txt #on recupère les salles de OU
- $salles = Get-Content $TEMP\SALLES_$LogTime.txt
- ForEach ($salles in $salles)
- {
- $counter_salles++
- write-host $counter_salles----------$salles -foregroundcolor green #affichage du compteur+salles
- }
- Do
- {
- $NUM = Read-Host "Entrer le numero de salle (0,1,2,...) "
- }
- while ($NUM -gt $counter_salles)
- $salles=Get-content $TEMP\SALLES_$LogTime.txt | Select-Object -Index $NUM # index 0 = ligne 1
- #PC
- dsquery computer "OU=$salles,$OU" -o rdn |% {$_ -replace '"', ""} > $TEMP\COMPUTERS_$LogTime.txt #on recupère les PC de OU (salles)
- write-host
- write-host "Voici les PC de cette salle"
- $PC=Get-content $TEMP\COMPUTERS_$LogTime.txt # affichage pour verifs
- write-host "$PC" -foregroundcolor green
- write-host
- #NOM DU COURS
- write-host "Voici les cours disponibles :"
- Get-ChildItem -path $TORRENT_S -filter *.torrent -name > $TEMP\TORRENT_$LogTime.txt # on liste .torrent
- $cours = Get-Content $TEMP\TORRENT_$LogTime.txt
- ForEach ($cours in $cours)
- {
- $counter_cours++
- write-host $counter_cours----------$cours -foregroundcolor green #affichage du compteur+torrent
- }
- Do
- {
- $NUM = Read-Host "Entrer le numero du cours (0,1,2,...) "
- }
- while ($NUM -gt $counter_cours)
- $FILE=Get-content $TEMP\TORRENT_$LogTime.txt | Select-Object -Index $NUM # index 0 = ligne 1
- #DEPLOIEMENT
- ForEach ($PC in $PC)
- {
- if (Test-Connection -ComputerName $PC -Quiet -Count 2) { #test connexion, si true alors on lance
- write-host "Lancement sur $PC de $FILE ..." -foregroundcolor green
- #LOG
- if ($log) {
- time
- write-output "$time --> Lancement sur $PC de $FILE ..." >> $TEMP\LOG_$LogTime.txt
- }
- # Kill du processus utorrent
- write-host "Kill du processus ..." -foregroundcolor green
- taskkill.exe /S $PC /IM utorrent.exe /T /F | clean
- # creation du repertoire DATA
- write-host "Creation repertoire DATA ..." -foregroundcolor green
- $d = [WMIClass]"\\$PC\root\cimv2:Win32_Process"
- $d.Create("cmd.exe /c md $DATA") | clean
- # creation du repertoire torrent
- write-host "Creation repertoire TORRENT ..." -foregroundcolor green
- $t = [WMIClass]"\\$PC\root\cimv2:Win32_Process"
- $t.Create("cmd.exe /c md $TORRENT_C") | clean
- # copie du .torrent dans rerpertoire torrent
- write-host "Copie du .torrent ..." -foregroundcolor green
- Copy-Item $TORRENT_S\$FILE -Destination \\$PC\C$\torrent\ -force
- # lancement de utorrent et ajout auto du .torrent
- write-host "Lancement de uTorrent ..." -foregroundcolor green
- .$BIN\psexec.exe -accepteula \\$PC -c -v -d -s -i $BIN\uTorrent.exe /HIDE /NOINSTALL /DIRECTORY "$DATA" "$TORRENT_C\$FILE"
- }
- else { #si test NOK, on affiche et on log eventuellement
- write-host "Le $PC ne repond pas !" -foregroundcolor white -backgroundcolor red
- #LOG
- if ($log) {
- time
- write-output "$time --> Le $PC ne repond pas !" >> $TEMP\LOG_$LogTime.txt
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement