2011-08-14 15 views
2

Windowsユーザー名をプログラムで変更する方法(APIまたはコマンドラインツールを使用) Windowsユーザーの名前を変更する方法はありますか?一部のWindowsユーザー名をプログラムで変更する(Windowsユーザーの名前を変更)

+0

なぜですか?これは典型的な質問です!それについてのリソースはありません! –

+2

なぜこれが下落しましたか? – Tigran

+0

あなたは何を達成しようとしていますか?別のユーザーに一時的にログインしますか? –

答えて

4

ユーザーアカウントのユーザー名は、NetUserSetInfo関数で変更できます。

ユーザー名を変更する場合は、レベル引数を0に設定し、USER_INFO_0構造体を渡します。一度に複数のものを変更したい場合は、別のレベルを使用することができます。私はSystem.DirectoryServices.DirectoryEntryクラスを使用して、Windowsユーザーの名前を変更するにはいくつかの小さな方法を書かれている

#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\n", result); 

    return result; 
}  
+0

ありがとうございますが、(lm.h)ファイルは何ですか?私はC++に精通していないからです:) –

+0

申し訳ありませんが、お手伝いできませんが、.NETコードから直接Win32 API関数を呼び出す方法がいくつかサポートされていると思います。 NetUserSetInfo引数とUSER_INFO_0構造体は、MSDNライブラリに記載されています。 NET_API_STATUSは単なる32ビットの符号なし整数です。 –

4

あなたが内部リソースたくさんの種類keyのこととして、明らかにWindowsシステム上のユーザの名前を変更することはできませんが、方法によって、内部ファイルには影響しません、それのDisplayNameを、変更することができます構造はとても種類がcosmeticに変更されています。あなたのために、または同じマシン上の他のユーザーが何年にもわたって混乱する可能性が最も高いので、私はそうしないことをお勧めします。あなたがしたい場合でも、ここでは、powershellスクリプトの例であるべきあなたのための作業:

$CurrentUserName = "Your_Domain_Name/Current_User_Name" 
    Get-QADUser -SearchRoot $CurrentUserName ` 
    | Set-QADUser -DisplayName "New_User_Name" ` 
    | FT FirstName, LastName, DisplayName, company 

この良い例で、より詳細な説明の一見のため:彼らが使用ここ

Change user DisplayName from powershell

注意PowerShellのための余分なプラグイン。私が何を意味するかを明確にするテーマに関する

EDIT

別のリンク:

Change user name on Windows7 Professional

は、この情報がお役に立てば幸いです。

+0

ありがとう、それは良い答えですが、F2を押すと、ローカルユーザーやグループから変更できるので、ユーザー名をプログラムで変更できると思います! –

+0

大丈夫ですが、変更されません。C:\ Users \ ...のユーザーに添付されたファイルシステム...編集した投稿を確認してください。 – Tigran

+0

これは問題ありません。 私はログイン名を変更する必要があります。明日お試しになります:) –

3

これは私がユーザ名を変更するために正常に使用したコードの単純なビットです。

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; 
} 
+0

これは便利な舐めです(WMI、WMICツールを使って名前を変更)http://www.911cd.net/forums//index.php?showtopic=23638 –

+0

ありがとう!私はあなたのコードを ''(var entry = new DirectoryEntry($ "WinNT:// {Environment.MachineName}/{oldLoginName}"))entry.Rename(newLoginName);という目的に使用するように減らしました。完全に! – Maverik

関連する問題