Table des matières

Création nouvel utilisateur via .csv


Nous créons un script permettant de créer de nouveaux utilisateurs avec un dossier partagé personnel dans notre environnement Active directory depuis un fichier CSV :

<#
Auteur : Degnace Karl
Date : 20/01/2023
Description : script de création d’utilisateurs dans l’AD et du dossier partagé personnel à partir d'un fichier .txt ou excel
Version: 1.1
Revisions :
-1.1 Rectification de la lettre du lecteur
-1.0 creation du script
#>
 
 
# Renseignez le chemin du fichier de données necessaire à la creation des nouveaux utilisateurs
 
$CSV = Read-Host "Veuillez entrer le chemin du fichier que vous souhaitez executer "
$Collection = Import-CSV -Path $CSV -Delimiter ";" -Encoding UTF8
Write-Output $Collection
 
 
#La boucle suivante traite automatiquement ligne par ligne chaque élément du fichier CSV de la collection. Ces données sont chargées dans des variables.
 
Foreach($Utilisateur in $Collection)
{
  $UPrenom = $Utilisateur.Prenom
  $UNom = $Utilisateur.Nom
  $UDepartment = $Utilisateur.Service
  $UTitle = $Utilisateur.Fonction
  $ULogin = $Utilisateur.Login
  $UMail = $Utilisateur.Mail
 
          #Creation d'une hashtable contenant nos valeurs d'attribut des utilisateurs à partir des variables.
 
  $NewUser = 
  @{
     Name = "$UPrenom $UNom"
     DisplayName = "$UPrenom $UNom"
     GivenName = $UPrenom
     Surname = $UNom
     SamAccountName = $ULogin
     UserPrincipalName = "$ULogin@axeplane.loc"
     EmailAddress = $Umail
     Path = "OU=Ut_$UDepartment,OU=Personnel,DC=axeplane,DC=loc"
     AccountPassword = (ConvertTo-SecureString "Motpasse_2022" -AsPlainText -Force)
     ChangePasswordAtLogon = $true
     Enabled = $true
     OtherAttributes = @{'Title' = $UTitle ;'department' = $UDepartment} 
   } 
 
 
            # Vérification de l'absence de l'utilisateur dans l'AD puis creation de l'utilisateur et de son dossier partagé et intégration dans un groupe.
            # Un message de confirmation de création d'utilisateur est affiché
  if (Get-ADUser -Filter {SamAccountName -eq $ULogin})
  {
    Write-Warning "L'identifiant $ULogin existe déjà dans l'AD"
  }
  else
  {
    New-ADUser @NewUser
    New-Item -ItemType Directory -Path "P:\Partages_Personnels_Utilisateurs\$ULogin"
    New-SmbShare -Name Partage_$ULogin$ -Path "P:\Partages_Personnels_Utilisateurs\$ULogin" -ChangeAccess $ULogin
    Add-NTFSAccess -Path "P:\Partages_Personnels_Utilisateurs\$ULogin" -Account "$ULogin" -AccessRights Modify
    #Add-NTFSAccess -Path "P:\Partages_Personnels_Utilisateurs\$ULogin" -Acadministrateur" -AccessRights Modify
    Get-Item "P:\Partages_Personnels_Utilisateurs\$ULogin" | Disable-NTFSAccessInheritance
    Set-ADUser -Identity $ULogin -HomeDirectory \\SRVAXPLN\Partage_$ULogin$ -HomeDrive Z:
    Add-AdGroupMember -Identity GG_$UDepartment -Members $ULogin
    Write-Output "Succès de la création de l'utilisateur : 
    $UPrenom $UNom"
  }
}

Lister membres groupe de sécurité


Voici un script interactif listant les membres d’un groupe de sécurité et permettant l'export du résultat dans un fichier texte :

<#
Auteur : Degnace Karl
Date : 20/01/2023
Description : script permettant d’afficher/d’exporter la liste des membres d’un groupe AD
Version: 1.0
#>
 
#Install-Module -Name ImportExcel
 
# Affiche la liste des groupe de securité de l'AD
Write-Output $table=(Get-ADGroup -filter 'Name -like "GG*" -or Name -like "GDL*"'| format-table -property name)
 
$tableau=@()
$lgroup=(Get-ADGroup -filter 'Name -like "GG*" -or Name -like "GDL*"' | Select name)
$Date = (Get-Date -Format "ddMMyy_HHmm")
foreach($lg in $lgroup) {$tableau+=$lg.name}
 
# Demande d'entrer le nom du groupe que l'on souhaite connaitre les membres
Do {$Groupe = Read-Host "Veuillez entrer le groupe dont vous souhaitez connaitre les membres (respectez la casse) "} until ( $tableau -contains $Groupe)
 
Write-Output(Get-ADGroupMember -Identity $Groupe | Select Name, SamAccountName)
 
 
# Demande si l'on veut exporter la liste générée en fichier .txt
Do {$Reponse = Read-Host "Voulez-vous exporter cette liste ci-dessus dans un fichier txt (oui ou non) "} Until (($Reponse -eq "oui") -or ($Reponse -eq "non"))
if ($Reponse -eq "oui")
  {
    Get-ADGroupMember -Identity $Groupe | Select Name, SamAccountName | Export-Csv -path C:\Users\Administrateur\Documents\Export\$($Groupe)_ListMembre_$($Date).txt -NoTypeInformation
    Write-Output "La liste des membres du groupe $Groupe est exportée dans le fichier C:\Users\Administrateur\Documents\Export\$($Groupe)_ListMembre_$($Date).txt"
  }
 
 
# Demande si l'on veut exporter la liste générée en fichier .xlsx
Do {$Reponse = Read-Host "Voulez-vous exporter cette liste ci-dessus dans un fichier excel (oui ou non) "} Until (($Reponse -eq "oui") -or ($Reponse -eq "non"))
if ($Reponse -eq "oui")
  {
    Get-ADGroupMember -Identity $Groupe| Select-Object Name, SamAccountName | Export-Excel -Path C:\Users\Administrateur\Documents\Export\$($Groupe)_ListMembre_$($Date).xlsx 
    Write-Output "La liste des membres du groupe $Groupe est exportée dans le fichier C:\Users\Administrateur\Documents\Export\$($Groupe)_ListMembre_$($Date).xlsx"
  }

Lister les groupes d'un utilisateur


Nous créons un script interactif listant les groupes d'appartenance d’un utilisateur d'un active directory et permettant l'export du résultat dans un fichier texte :

<#
Auteur : Degnace Karl
Date : 20/01/2023
Description : script permettant d’afficher/d’exporter la liste des groupes AD d’un utilisateur
Version: 1.0
#>
 
 
 
#Install-Module -Name ImportExcel
 
 
# Affiche la liste des utilisateurs de l'AD
 
$Luser=@()
$Lutilisateur=(Get-ADUser -filter * | Select SamAccountName)
$Date = (Get-Date -Format "ddMMyy_HHmm")
foreach($User in $Lutilisateur) {$Luser+=$User.SamAccountName}
Write-Output $Luser
 
 
# Demande d'enrtrer le login de l'utilisatateur dont l'on souhaite connaitre les groupes d'attachements
Do {$Utilisateur = Read-Host "Veuillez entrer le login de l'utilisateur dont vous souhaitez connaitre ses groupes d'attachements (respectez la casse) "} until ( $Luser -contains $Utilisateur)
Write-Output(Get-ADPrincipalGroupMembership  -Identity $Utilisateur | Select Name, DistinguishedName)
 
# Demande si l'on veut exporter la liste générée en fichier .txt
 
Do {$Reponse = Read-Host "Voulez-vous exporter cette liste ci-dessus dans un fichier texte (oui ou non) "} Until (($Reponse -eq "oui") -or ($Reponse -eq "non"))
if ($Reponse -eq "oui")
  {
    Get-ADPrincipalGroupMembership -Identity $Utilisateur | Select Name | Export-Csv -path C:\Users\Administrateur\Documents\Export\$($Utilisateur)_Group_List_$($Date).txt -NoTypeInformation
    Write-Output "La liste des groupes de l'utilisateur $Utilisateur est exportée dans le fichier C:\Users\Administrateur\Documents\Export\$($Utilisateur)_Group_List_$($Date).txt"
  }
 
# Demande si l'on veut exporter la liste générée en fichier .xlsx
 
Do {$Reponse = Read-Host "Voulez-vous exporter cette liste ci-dessus dans un fichier excel (oui ou non) "} Until (($Reponse -eq "oui") -or ($Reponse -eq "non"))
if ($Reponse -eq "oui")
  {
    Get-ADPrincipalGroupMembership -Identity $Utilisateur| Select-Object Name |Export-Excel -Path C:\Users\Administrateur\Documents\Export\$($Utilisateur)_Group_List_$($Date).xlsx 
    Write-Output "La liste des groupes de l'utilisateur $Utilisateur est exportée dans le fichier C:\Users\Administrateur\Documents\Export\$($Utilisateur)_Group_List_$($Date).xlsx"
  }

Sauvegarde dossier utilisateur sur serveur


Nous créons un script planifiant une sauvegarde quotidienne de nuit des données utilisateurs situées sur les postes de travail :

<#
Auteur : Degnace Karl
Date : 20/01/2023
Description :  script de sauvegarde des données utilisateurs dans le dossier de sauvegarde du serveur
Version: 1.0
#>
 
#declaration des variables
#ouverture d'un prompt administrateur
 
$Utilisateur  =  "administrateur" 
$MDP =  ConvertTo-SecureString  "axeplanE_2000"  -AsPlainText  -Force
$Credential  =  New-Object -Typename System.Management.Automation.PSCredential -argumentlist ($Utilisateur, $MDP)
$ListPc = Get-ADComputer -filter {Name -like 'PC*'}
$Date = (Get-Date -Format "ddMMyy_HHmm")
 
 
#boucle sur les Pc de l' Active Directory avec un fichier log et ouverture d'une session administrateur sur le pc distant
foreach($Pc in $ListPc)
{
Start-Transcript -Path "P:\Sauvegardes\Log_Sauvegardes\$($Pc.Name)_$($Date)_log.txt"
 Try
 {
  $Session = New-PSSession -ComputerName $Pc.Name -Credential $Credential
 
# Copie du dossier users du poste client sur le dossier de sauvegarde du serveur avec message en cas d'erreur.
  Copy-Item "C:\Users" -Destination "P:\Sauvegardes\$($Pc.Name)_$($Date)" -FromSession $Session -Recurse
 }
 catch
 {
  Write-Output "Une erreur s'est produite pour l'ordinateur $($Pc.Name). Pour plus d'informations, consultez le fichier texte P:\Sauvegardes\Log_Sauvegardes\$($Pc.Name)_$($Date)_log.txt"
 } 
 finally
 {
  Stop-Computer -ComputerName $Pc.Name -force
 }
Stop-Transcript
}