Pour que les administrateurs puissent gérer plus facilement les utilisateurs et groupes locaux avec PowerShell, Microsoft propose une collection de cmdlets appelée Microsoft.PowerShell.LocalAccounts. Auparavant, il fallait la télécharger et l’importer dans PowerShell, et aussi installer Windows Management Framework 5.1 ; dans les systèmes d’exploitation Windows Server 2016 et Windows 10, la collection de cmdlets est incluse en tant que module standard.
Le module LocalAccounts contient 15 cmdlets. Pour voir la liste complète, exécutez la commande suivante :
Get-Command -Module Microsoft.PowerShell
- Add-LocalGroupMember — Ajouter un utilisateur au groupe local
- Disable-LocalUser — Désactiver un compte d’utilisateur local
- Enable-LocalUser — Activer un compte d’utilisateur local
- Get-LocalGroup — Afficher les préférences du groupe local
- Get-LocalGroupMember — Afficher la liste de tous les membres du groupe local
- Get-LocalUser — Afficher les préférences d’un compte d’utilisateur local
- New-LocalGroup — Créer un nouveau groupe local
- New-LocalUser — Créer un nouveau compte d’utilisateur local
- Remove-LocalGroup — Supprimer un groupe local
- Remove-LocalGroupMember — Supprimer un membre d’un groupe local
- Remove-LocalUser — Supprimer un compte d’utilisateur local
- Rename-LocalGroup — Renommer un groupe local
- Rename-LocalUser — Renommer un compte d’utilisateur local
- Set-LocalGroup — Modifier les paramètres d’un groupe local
- Set-LocalUser — Modifier les paramètres de compte d’un utilisateur local
Gérer les comptes d’utilisateur locaux avec PowerShell
Voyons comment utiliser ces commandes pour effectuer des tâches courantes de gestion des utilisateurs locaux sur un ordinateur sous Windows 10.
Établir la liste des utilisateurs et de leurs propriétés avec PowerShell
Commençons par obtenir la liste de tous les comptes d’utilisateur locaux de la machine. Pour cela, nous utilisons le cmdlet Get-LocalUser :
Get-LocalUser
Comme vous le voyez, nous avons deux comptes d’utilisateur locaux, dont l’un est désactivé (celui pour lequel est indiqué « False » (Faux) dans la colonne « Enabled » (Activé)).
Si vous voulez obtenir toutes les propriétés et leurs valeurs pour un compte d’utilisateur local, utilisez le cmdlet Get-LocalUser avec les paramètres suivants :
Get-LocalUser -Name ‘guest’ | Select-Object *
Pour obtenir la valeur d’un attribut de compte d’utilisateur local particulier, saisissez son nom après le paramètre Select-Object. Dans cet exemple, nous souhaitons connaître la valeur de l’attribut PasswordLastSet du compte dont le nom d’utilisateur est « administrator » :
Get-LocalUser -Name ‘administrator’ | Select-Object PasswordLastSet
Créer un utilisateur local avec PowerShell
Créons maintenant un nouvel utilisateur à l’aide du cmdlet New-LocalUser. Ce cmdlet peut créer les types de comptes d’utilisateur suivants :
- Comptes d’utilisateur locaux Windows
- Comptes Microsoft
- Comptes Azure Active Directory
Lorsque vous créez un compte d’utilisateur local, ne tapez jamais le mot de passe en texte simple ; convertissez-le toujours en une chaîne sécurisée à l’aide du paramètre ?AsSecureString ou ?ConvertTo-SecureString. La commande suivante permet de créer un nouveau compte d’utilisateur local :
$UserPassword = Read-Host –AsSecureString New-LocalUser "Netwrix" -Password $UserPassword -FullName "Netwrix" -Description "CompleteVisibility"
Dans un environnement Windows 10, les utilisateurs peuvent accorder des autorisations depuis leurs comptes Microsoft, ce qui permet de créer un nouveau compte d’utilisateur local lié aux informations d’identification d’un compte Microsoft. À cette fin, utilisez le script suivant (notez que vous n’avez pas besoin de saisir le mot de passe car il est stocké dans le Cloud Microsoft) :
New-LocalUser -Name "MicrosoftAccount\SomeAccount@outlook.com" -Description "Microsoft Account"
Pour créer un compte local lié à votre Azure AD, utilisez la commande suivante :
New-LocalUser -Name "AzureAD\Netwrix@enterprise.com" -Description "Azure AD Account"
Modifier le mot de passe d’un utilisateur local ou les propriétés du mot de passe avec PowerShell
Pour changer le mot de passe d’un compte d’utilisateur local, utilisez le cmdlet Set-LocalUser. Pour changer le mot de passe de l’administrateur local :
$UserPassword = Read-Host –AsSecureString Set-LocalUser -Name Administrator -Password $UserPassword –Verbose
Pour définir avec PowerShell que le mot de passe d’un utilisateur local ne doit jamais expirer, exécutez le script suivant :
Set-LocalUser -Name Netwrix –PasswordNeverExpires $False
Supprimer un compte d’utilisateur local avec PowerShell
Pour supprimer un compte d’utilisateur local, utilisez le cmdlet Remove-LocalUser :
Remove-LocalUser -Name Netwrix -Verbose
Gérer les groupes locaux avec PowerShell
Après nous être intéressés aux utilisateurs locaux, penchons-nous maintenant sur les groupes locaux.
Consulter les groupes locaux avec PowerShell
Commençons par établir une liste de tous les groupes sur notre Windows Server :
Get-LocalGroup
Ajouter un groupe local avec PowerShell
Pour créer un nouveau groupe :
New-LocalGroup -Name 'Netwrix Users' -Description 'Netwrix Users Group'
Ajouter des utilisateurs à un groupe local avec PowerShell
Pour ajouter un utilisateur (ou un groupe) à un groupe local, utilisez le cmdlet Add-LocalGroupMember. Supposez par exemple que vous vouliez ajouter des utilisateurs au groupe local Administrators, mais sans avoir à les ajouter un par un. Pour ajouter le groupe « Netwrix Users » au groupe local Administrators :
Add-LocalGroupMember -Group 'Administrators' -Member ('Netwrix',’Netwrix Users') –Verbose
Si votre ordinateur ou votre serveur fait partie du domaine, vous pouvez également ajouter un compte et des groupes de domaine aux groupes locaux pour accorder à ces utilisateurs des droits locaux spéciaux sur le serveur. Ajoutez-les au format « DomainName\User » (pour un utilisateur) ou « DomainName\Domain Group » (pour un groupe).
Afficher les membres d’un groupe particulier avec PowerShell
Pour établir la liste de tous les membres d’un groupe local particulier :
Get-LocalGroupMember -Group 'Netwrix Users'
Comme vous le voyez, cette commande affiche tous les comptes et groupes locaux qui sont membres du groupe « Netwrix Users ». Bien que seuls les comptes et groupes locaux soient mentionnés dans cette liste, cette commande affiche également tous les utilisateurs et groupes de domaine, ainsi que tous les comptes Microsoft et Azure AD.
Afficher tous les groupes dont un utilisateur est membre avec PowerShell
Pour établir la liste de tous les groupes dont un utilisateur particulier est membre, exécutez le script suivant :
foreach ($LocalGroup in Get-LocalGroup) { if (Get-LocalGroupMember $LocalGroup -Member 'Guest' –ErrorAction SilentlyContinue) { $LocalGroup.Name } }
Supprimer un groupe local avec PowerShell
Pour supprimer un compte d’utilisateur local d’un groupe, utilisez le cmdlet Remove-LocalGroupMember :
Remove-LocalGroupMember -Group 'Netwrix Users' –Member 'guest'
Gérer les utilisateurs et groupes locaux à distance avec PowerShell
Pour gérer à distance les comptes d’utilisateur et groupes locaux, connectez-vous aux postes de travail distants via WinRM en utilisant les cmdlets Invoke-Command et Enter-PSSession. Par exemple, pour obtenir à distance les membres du groupe d’administrateurs local sur plusieurs ordinateurs, exécutez le script suivant :
$search = new-pssession -computer pcname1,pcname2,pcname3 invoke-command -scriptblock {Get-LocalGroupMember -Group 'Administrators'} -session $search -hidecomputername | select * -exclude RunspaceID | out-gridview -title "LocalAdmins"
Comme vous pouvez le constater, il est assez facile de gérer les groupes et utilisateurs locaux avec PowerShell, mais pour assurer la sécurité, la conformité et la continuité des activités, il est essentiel d’auditer toutes ces modifications. Pour en savoir plus sur la configuration des audits natifs, consultez le Guide de référence rapide sur l’audit de Windows Server.