7271


スクリプトや、API,WMIなど、言語や手段は問いません。

Windowsで現在ログインしているユーザーにパスワードが設定されているかどうかの情報を取得できる方法を教えて下さい。

よろしくお願いします。


CC BY-SA 3.0
2015-02-27T05:32:16.460
7197
2015-03-01T09:13:18.093
2015-03-01T09:13:04.130
3715
3715
question
c# windows vba
Windowsで現在ログイン中のユーザーにパスワードが設定されているか取得する方法ありますか？


(2015/02/27 20:44追記)下記回答は使えないようです。

* * *

ローカルドメインのユーザーであれば、Windowsのコマンド`net`を利用して

[code]

    net user %USERNAME%
    
[/code]

とすると、パスワードの有無を含む様々な情報が取得できます。


CC BY-SA 3.0
2015-02-27T09:57:36.940
7217
2015-02-27T11:46:54.733
2015-02-27T11:46:54.733
3160
3160
7197
answer


酷い方法ですがSystem.DirectoryServices.AccountManagement.dllを参照して  

[code]

    bool HasPassword()
    {
        using (var pc = new PrincipalContext(ContextType.Machine))
        {
            try
            {
                return !pc.ValidateCredentials(Environment.UserName, "");
            }
            catch
            {
                return false;
            }
        }
    }
    
[/code]

のようにログインしてみれば分かるかと。`ValidateCredentials`は`False`または例外を返します。


CC BY-SA 3.0
2015-02-27T10:51:53.313
7225
2015-02-27T10:51:53.313
5750
7197
answer


# 解決！

C++ですが、下記のような感じで取得出来ました。ありがとうございました。(__)

[code]

    wstring user = "HogeHoge";
    
    HANDLE h;
    CEdit* edit = (CEdit*)GetDlgItem(IDC_EDIT1);
    CString s;
    s.AppendFormat(L"ユーザー: %s\r\n", user.c_str());
    int res = LogonUser(user.c_str(), L".", L"", LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, &h);
    if (res == 0) {
        DWORD error = GetLastError();
        s.AppendFormat(L"Error: %d\r\n", error);
        if (error == ERROR_ACCOUNT_RESTRICTION) {
            s.AppendFormat(L"このユーザーにはパスワードが設定されていません");
        }
        else if (error == ERROR_LOGON_FAILURE){
            s.AppendFormat(L"このユーザーにはパスワードが設定されています");
        }
        else {
            s.AppendFormat(L"不明なエラー");
        }
        edit->SetWindowTextW(s);
    }
    else {
        s.AppendFormat(L"Result: %d", res);
        edit->SetWindowTextW(s);
    }
    
[/code]


CC BY-SA 3.0
2015-03-01T09:13:18.093
7271
2015-03-01T09:13:18.093
3715
7197
answer