PowerShell : scripts complets

De Justine's wiki
Aller à la navigation Aller à la recherche

Script de manipulation de fichiers

Dans ce script, le but est de venir en aide à l'utilisatrice "Micheline"; celle-ci a besoin de récupérer des fichiers et de vérifier sa connexion à Internet.

Il contient différents exemples intéressants de boucle, conditions, etc...

#Ce script est à placer dans le dossier "Travail".

###1 - Lister et afficher les fichier de ce répertoire

gci -r .

###2 - Il y'a trop de fichiers... Afficher seulement les .docx et .html

gci -r | Where-Object {$_.extension -eq ".docx" -or $_.Extension -eq ".html"}


###3 - Afficher Seulement les fichiers ultérieurs au 01/01/2019
#(Le résultat va dans le tableau nommé "fichiers")

$fichiers = gci -r | Where-Object {$_.extension -eq ".docx" -or $_.Extension -eq ".html" -and $_.LastWriteTime -gt "01/01/2019"}


###4 - On ajoute le fichier top secret de Micheline
#On le met d'abord dans la variable $secret

$secret = gci -r | Where-Object {$_.Name -eq "secret.txt"}

#On affiche les fichiers concernés par la sauvegarde
Write-Host "Les fichiers qui seront sauvegardés sont :"; $fichiers; $secret

###5 - Création de l'archive : je pars du fichier secret.txt, puis je mets mon archive à jour avec les autres fichiers

#Création de l'archive
Compress-Archive -LiteralPath $secret.FullName -CompressionLevel Fastest -DestinationPath .\ArchiveMicheline.zip

#Remplissage de l'archive et affichage d'un message d'avertissement
foreach ($file in $fichiers){
    Compress-Archive -Path $file.fullname -Update -DestinationPath .\ArchiveMicheline.zip
}

Write-Host "Archive créée"

###6 - Vérifier le processus WINWORD, le tuer si il est présent

#Ce bloc teste si WINWORD est présent et le tue si c'est le cas
#L'argument -ErrorAction sert à  ne pas afficher les messages d'erreur (Nous affichons le résultat nous-même)
if(Get-Process -name WINWORD -ErrorAction 'SilentlyContinue'){
    Stop-Process -name WINWORD; Write-Host "WINWORD stoppé"}
else{
    Write-Host "WINWORD n'est pas en cours d'exécution"}

###7 - Mettre une liste de sites dans un tableau et les tester un par un

#Liste de mes sites
$sites = @("google.com", "portal.office.com", "microsoft.com", "pcastuces.com", "aidermicheline.com")

#Ce bloc teste un à un les sites et affiche le résultat
foreach ($site in $sites){
    if (Test-Connection -ComputerName $site -ErrorAction 'SilentlyContinue'){
        Write-Host $site, "OK"}
    else{
        Write-Host $site, "KO"}
    }



 Script de création d'OU et d'utilisateurs

Ce script a pour but de créer des OUs et des utilisateurs sur un contrôleur de domaine. Les OUs sont d'abord créés, puis les utilisateurs, tous destinés à l'OU "ENG". Ce script est destiné au controleur de domaine du domaine "lpasr.loc". Il est plutôt efficace :)

Les OUs et utilisateurs apparaissent ensuite dans le centre de contrôle Active Directory :

###TP Création d'annuaire
#Pour ce TP je pars d'un serveur Windows Server 2012 R2 en version d'essai
#Celui-ci est déjà Domain Controller du domaine lpasr.loc

###0 - Import du module
Import-Module ActiveDirectory

###1 - Création des OU

$OUsRacine = @("FRA", "ALL", "ENG", "ESP")  #OUs de premier niveau
$OUsENG = @("Compta", "DSI", "Secu", "DRH")   #OUs situées dans ENG

#Création des OU de premier niveau
foreach ($ou in $OUsRacine){
    New-ADOrganizationalUnit -name $ou -Path "DC=lpasr, DC=loc" -ProtectedFromAccidentalDeletion $true
}

#Création des OU contenues dans ENG
foreach ($SousOu in $OUsENG){
    New-ADOrganizationalUnit -name $SousOu -Path "OU=ENG, DC=lpasr, DC=loc" -ProtectedFromAccidentalDeletion $true
}

###2 - Création des utilisateurs

#Mon tableau d'utilisateurs
$NouveauxUsers = @("sbozor", "mcolak", "ndesserrey", "idiallo", "lelkamel", "rgermain", "rgueye", "flarcher", "plawson", "pmandrou", "imohamed", "jnanthaphak", "aquach", "ktandavane", "atiroual", "eyamani")

#Création du mot de passe :
#Tous les utilisateurs commencent avec un mot de passe temporaire identique, qu'ils devront changer à leur première connexion
$pass = "MotDePasseTemporaire!"
$passSec = ConvertTo-SecureString $pass -AsPlainText -Force

#Création des utilisateurs
foreach ($nom in $NouveauxUsers){
    New-ADUser -name $nom -UserPrincipalName "$nom@lpasr.loc" -Path "OU=ENG, DC=lpasr, DC=loc" -AccountPassword $passSec -Enabled $true  #Chaque utilisateur est créé dans "ENG", avec un mdp temporaire, et un login nom@lpasr.loc
    Get-ADUser -Filter {Name -eq $nom} -SearchBase "OU=ENG, DC=lpasr, DC=loc" | Set-ADUser -ChangePasswordAtLogon $true | Set-ADObject -ProtectedFromAccidentalDeletion $true #L'utilisateur doit changer son mot de passe, et on protège son compte de la suppression accidentelle
    Write-Host "L'utilisateur $nom est créé dans l'OU ENG" #Message d'avertissement
}