c # - Skift nogle Windows-brugernavn programmatisk (Omdøb Windows-bruger)

Indlæg af Hanne Mølgaard Plasc

Problem



Sådan ændres Windows-brugernavn programmatisk (ved hjælp af nogle API- eller kommandolinjeværktøjer)
Eller hvordan kan man omdøbe en Windows-bruger?

Bedste reference


Du kan ændre brugernavnet til en brugerkonto med NetUserSetInfo-funktionen.


Hvis du kun vil ændre brugernavnet, indstiller niveauargumentet til 0 og sender en USER\_INFO\_0 struktur. Du kan bruge et andet niveau, hvis du vil ændre flere ting på én gang.


Dette er en simpel smule kode jeg har brugt til at ændre brugernavne:


#include <Windows.h>
#include <LM.h>

#include <stdio.h>

#pragma comment(lib, "netapi32.lib")

int main(int argc, char ** argv)
{
    USER\_INFO\_0 ui0;
    NET\_API\_STATUS result;
    LPWSTR command = GetCommandLineW();
    wchar\_t newname[21];

    while (*command != L'*') command++;

    command++;

    ui0.usri0\_name = newname;
    wcscpy\_s(newname, \_countof(newname), L"decommiss-");
    wcscat\_s(newname, \_countof(newname), command);

    result = NetUserSetInfo(NULL, command, 0, (LPBYTE)&ui0, NULL);

    printf("\%u
", result);

    return result;
}    

Andre referencer 1


Du kan ikke ændre navnet på brugeren på Windows-systemet, da det er en slags key for mange interne ressourcer, men du kan ændre DisplayName af det, som forresten ikke vil påvirker den interne filstruktur, så lidt af cosmetic ændring. Hvilket sandsynligvis vil skabe forvirring for dig eller for andre brugere på samme maskine i mange års brug, så jeg vil foreslå, at du ikke gør det. Men hvis du vil, er her powershell script eksempel, at skal arbejde for dig:


  $CurrentUserName = "Your\_Domain\_Name/Current\_User\_Name" 
    Get-QADUser -SearchRoot $CurrentUserName  `
    | Set-QADUser -DisplayName "New\_User\_Name" `
    | FT FirstName, LastName, DisplayName, company


For mere detaljeret beskrivelse se på dette gode eksempel:


Skift bruger DisplayName fra powershell [9]


Bemærk at her bruger de ekstra plugin til PowerShell.


EDIT


et andet link på emnet for at præcisere, hvad jeg mener:


Skift brugernavn på Windows7 Professional [10]


Håber dette hjælper.

Andre referencer 2


Jeg har skrevet en lille metode til at omdøbe en Windows-bruger ved hjælp af System.DirectoryServices.DirectoryEntry klasse.


public bool RenameUser(string oldLoginName, string newLoginName)
{
    bool renamed = false;
    try
    {
        using (DirectoryEntry AD = new
                   DirectoryEntry("WinNT://" + Environment.MachineName + ",computer"))
        {
            try
            {
                using (DirectoryEntry NewUser = AD.Children.Find(oldLoginName, "user"))
                {
                    if (NewUser != null)
                    {
                        NewUser.Rename(newLoginName);
                        renamed = true;
                    }
                }
            }
            catch (Exception ex)
            {
                //TODO: Log
            }
        }
    }
    catch (Exception ex)
    {
         //TODO: Log
    }
    return renamed;
}