PowerShell/Utilisateur
Serveur RDS, liste des dossiers "users"
Liste des dossiers c:\users\compte\
et c:\users\local_compte\
sur chaque RDS (de 01 à 20) :
<# Nom : PSHUTL001 Description : liste des dossiers de profil utilisateur de bureau distant présents sur les serveurs RDS Usage : à lancer depuis un des serveurs RDS ; saisir le nom du compte à analyser Particularité : néant Auteurs : fylip22 Version : 1.0 Révisions : - 1.0 (24/08/2023) : création du script - 1.1 (09/02/2024) : modification pour l'affichage des étapes #> # Liste des dossiers "users" sur tous les serveurs RDS : Clear-Host Write-Host "Liste des dossiers Users sur tous les serveurs RDS" Write-Host $Compte = Read-Host "Saisir le nom d'un compte" # création de la liste des serveurs RDS à analyser : PHPRDS01 à PHPRDS20 $RDSListe = (1..20).ForEach({ "{0}{1:d2}" -f "PHPRDS", $_ }) Write-Host Write-Host ("Test du serveur {0} au serveur {1} :" -f $RDSListe[0], $RDSListe[-1]) foreach ($RDS in $RDSListe) { $cheminCompte = "\\$RDS\c$\users\$Compte" $cheminLocal_Compte = "\\$RDS\c$\users\local_$Compte" if (Test-Path -Path $cheminCompte) { Write-Host ("{0}, présence du dossier '{1}'" -f $RDS, $Compte) } if (Test-Path -Path $cheminLocal_Compte) { Write-Host ("{0}, présence du dossier 'local_{1}'" -f $RDS, $Compte) } } Write-Host Write-Host "Fin du traitement" Write-Host Read-Host "Appuyer sur une touche pour continuer"
Liste des dossiers c:\users\
sur chaque RDS (de 01 à 13) :
<# Nom : PSHUTL002 Description : liste des dossiers de profil utilisateur de bureau distant présents sur les serveurs RDS Usage : à lancer depuis un des serveurs RDS Particularité : néant Auteurs : fylip22 Version : 1.0 Révisions : - 1.0 (20/02/2024) : création du script #> $RDSListe = (1..13).ForEach({ "{0}{1:d2}" -f "PHPRDS", $_ }) $ListeTout = $null foreach ($RDS in $RDSListe) { $cheminCompte = "\\$RDS\c$\users\" # ajoute chaque dossier trouvé à la liste $ListeTout += Get-ChildItem -Path $cheminCompte | Select-Object name } # Affichage du résultat, trié sur le nom $ListeTout | Sort-Object name
Compte local
Création
Création d'un compte local en manuel :
# liste des comptes locaux Get-LocalUser # nom du compte $compte = "Nomade" # Fenêtre de saisie pour le mot de passe $Password = Read-Host -AsSecureString # Création du compte New-LocalUser $compte -Password $Password -FullName $compte -Description $compte
Avec un script
<# Nom : PSHUTL003 Description : création d'un compte utilisateur local avec appartenance à deux groupes de sécurité Usage : exercice en PowerShell Auteurs : fylip22 Version : 1.1 Révisions : - 1.0 (01/12/2023) : création du script - 1.1 (24/04/2024) : personnalisation #> # liste les paramètres pour la création de l'utilisateur $compte = 'recupe' $parametreListe = @{ Name = $compte Password = (ConvertTo-SecureString "MonMotDePasse2023*" -AsplainText -Force) FullName = $compte Description = '$compte temporaire' AccountNeverExpires = $true PasswordNeverExpires = $true } New-LocalUser @parametreListe # ajout de l'utilisateur à différents groupes de sécurité locaux Add-LocalGroupMember -Group "Administrateurs" -Member $compte Add-LocalGroupMember -Group "Utilisateurs du Bureau à distance" -Member $compte
Suppression
Suppression d'un compte local en manuel :
Remove-LocalUser -Name "nomade"
Avec un script
<# Nom : PSHUTL004 Description : suppression d'un compte utilisateur local Usage : exercice en PowerShell Auteur : fylip22 Version : 1.1 Révisions : - 1.0 (01/12/2023) : création du script - 1.1 (24/04/2024) : personnalisation #> Clear-Host $compteASupprimer = "recupe" if (Get-LocalUser -name "$compteASupprimer" -ErrorAction Ignore) { Remove-LocalUser -Name "$compteASupprimer" Write-Output "Compte '$compteASupprimer' supprimé" } else { Write-Output "Le compte '$compteASupprimer' n'existe pas" } # Liste des comptes locaux Get-LocalUser
Groupe et utilisateur
Explication | Code |
---|---|
Liste des utilisateurs du groupe de sécurité PhpCompta
|
Get-ADGroupMember -Identity PhpCompta | sort-object name | ft name
|
Création de l'utilisateur "nomade", sans mot de passe : | New-LocalUser -fullname 'MonCompte' -Name 'nomade' -noPassword
|
Modification de l'utilisateur "nomade", modification mot de passe : | get-localuser -name 'MonCompte' | set-localuser -Password (ConvertTo-SecureString "MonMotDePasse1234*" -AsplainText -Force)
|
Modification de l'utilisateur "nomade", pas d'expiration du mot de passe : | get-localuser -name 'MonCompte' | set-localuser -PasswordNeverExpires $true
|
Modification de l'utilisateur "nomade", l'utilisateur ne peut pas modifier le mot de passe : | get-localuser -name 'MonCompte' | set-localuser -UserMayChangePassword $false
|
Ajout de l'utilisateur "nomade" au groupe de sécurité local "Utilisateurs" : | get-localuser -name 'MonCompte' | Add-LocalGroupMember 'Utilisateurs'
|
Liste des utilisateurs du groupe local "Utilisateurs du Bureau à distance" : | Get-LocalGroupMember -Group 'Utilisateurs du bureau à distance'
|
Création de groupe de sécurité : | New-ADGroup "PhpCompta" -Description "Accès dossier bureautique K:\Compta" -Path "OU=Compta,DC=php,dc=local" -GroupCategory Security -GroupScope Global
|
Ajout d'utilisateurs ou de groupe d'utilisateur au groupe local "Utilisateurs du Bureau à distance" : | Add-LocalGroupMember -Group 'utilisateurs du bureau à distance' -Member ('groupe1' , 'Admins du domaine') Add-LocalGroupMember -Group 'utilisateurs du bureau à distance' -Member 'test'
|
Suppression d'utilisateurs ou de groupe d'utilisateur du groupe local "Utilisateurs du Bureau à distance" : | Remove-LocalGroupMember -Group 'utilisateurs du bureau à distance' -member 'test'
|
Liste des groupes d'un utilisateur, affichage avec séparateur point-virgule :
$compte = "martina" (Get-ADUser $compte –Properties MemberOf).memberof | Get-ADGroup | Select-Object name | Sort-Object name | ForEach-Object {write-host -NoNewLine "$($_.name);"}
Affectation de plusieurs groupes à un utilisateur :
$user = "uncompte" # affectation des groupes standards $groupes = @("phpcompta", "phpgaec", "phpgerant"") foreach ($groupe in $groupes) { Add-AdGroupMember -Identity $groupe -members $user } # affectation des groupes spécifiques $groupeutilisateur =@("phpcompta" ,"capcompta") foreach ($groupe in $groupeutilisateur) { Add-AdGroupMember -Identity $groupe -members $user }
Ménage sur profil itinérant (FSLogix)
<# Description : suppression des fichiers et dossiers du profil itinérant Usage : à lancer depuis le serveur RDS où la session du profil à nettoyer est ouverte Particularité : ne traite que les fichiers datant de plus de deux jours ; voir la variable Auteurs : fylip22 Version : 1.0 Révisions : - 1.0 (24/08/2023) : création du script #> # Nom du compte à traiter $Compte = "lecompte" # Ancienneté des fichiers à traiter $FichierAnciennete = 2 # Liste des dossiers à traiter (ces dossiers sont les plus volumineux en nombre et en taille de fichiers) $DossierListe = @( "C:\users\$compte\AppData\LocalLow\Adobe\Acrobat\DC\ConnectorIcons", "C:\users\$compte\AppData\Local\Microsoft\Edge\User Data\Default\Cache\Cache_Data", "C:\users\$compte\AppData\Local\Microsoft\Edge\User Data\Default\Service Worker\CacheStorage", "C:\Users\$compte\AppData\Local\Microsoft\Outlook\RoamCache", "C:\users\$compte\AppData\Local\Microsoft\Terminal Server Client\Cache", "C:\users\$compte\AppData\Local\Microsoft\Windows\INetCache\Content.MSO", "C:\users\$compte\AppData\Local\Microsoft\Windows\INetCache\IE" ) Foreach ($Dossier in $DossierListe) { Get-ChildItem -path $Dossier | Where { ($_.CreationTime -lt (Get-Date).addDays(-$FichierAnciennete)) -and ($_.LastWriteTime -lt (Get-Date).addDays(-$FichierAnciennete))} | Remove-Item -Recurse -Force }