PowerShell/Utilisateur
Aller à la navigation
Aller à la recherche
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
}