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" } }
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" }
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" }
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 }