Créer un utilisateur local avec Powershell (suite)

Suite à Créer un utilisateur local avec Powershell, voici deux fonctions Powershell pour créer et supprimer un utilisateur local.

New-LocalUser

Pour créer un utilisateur local en une commande:

function New-LocalUser
(
    [string] $userName,
    [string] $password,
    [string] $description = $null,
    [bool]   $isAdmin = $false,
    [bool]   $mustChangePassword = $false
)
{
    $adsi = [ADSI]"WinNT://$env:COMPUTERNAME"

    # Création du nouvel utilisateur
    $user = $adsi.Create('User', $userName)

    # Définit un mot de passe à l'utilisateur
    $user.SetPassword($password)

    # Enregistre l'utilisateur
    $user.SetInfo()

    # Définit une description
    if ($description -ne $null) {
        $user.Description = $description
    }

    # # Oblige à changer le MDP à la prochaine ouverture de session
    if ($mustChangePassword) {
        $user.PasswordExpired = 1
    }

    # Enregistre l'utilisateur
    $user.SetInfo()

    # Ajoute au groupe 'Users'
    $users = [ADSI]"WinNT://$env:COMPUTERNAME/Users,group"
    $users.PSBase.Invoke('Add', $user.Path)

    # Ajoute au groupe 'Administrators'
    if ($isAdmin) {
        $admins = [ADSI]"WinNT://$env:COMPUTERNAME/Administrators,group"
        $admins.PSBase.Invoke('Add', $user.Path)
    }
}

Utilisation:

New-LocalUser -userName sdujancourt -password 'Passw0rd'
New-LocalUser -userName sdujancourt -password 'Passw0rd' -description 'Test User' -isAdmin $true -mustChangePassword $true
@("user1", "user2", "user3") | foreach {
    Write-Progress -Activity 'Création des utilisateurs' -Status "Création de $_" -PercentComplete -1
    New-LocalUser -userName $_ -password 'Passw0rd' -isAdmin $true
}

Remove-LocalUser

Function Remove-LocalUserAccount
(
    [parameter(Mandatory=$true)] $UserName
)
{
    [ADSI] $server="WinNT://$env:COMPUTERNAME"
    $server.delete("user", $UserName)
}

Variante où l’erreur est ignorée si l’utilisateur n’existe pas:

Function Remove-LocalUserAccount
(
    [parameter(Mandatory=$true)] $UserName
)
{
    try
    {
        [ADSI] $server="WinNT://$env:COMPUTERNAME"
        $server.delete("user", $UserName)
    }
    catch [System.Management.Automation.MethodInvocationException]
    {}
}}

Utilisation:

Remove-LocalUserAccount -UserName 'sdujancourt'
@("user1", "user2", "user3") | foreach {
    Write-Progress -Activity 'Suppression des utilisateurs' -Status "Suppression de $_" -PercentComplete -1
    Remove-LocalUserAccount -UserName $_
}}

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s