- PR -

ユーザの所属するグループを取得する

1
投稿者投稿内容
kes
ベテラン
会議室デビュー日: 2004/08/10
投稿数: 67
投稿日時: 2004-12-21 18:23

現在ログオン中のユーザが所属するグループ名を取得することは可能でしょうか。
開発環境はVB.NETでOSはXPです。

ユーザ名はSystem.Environment.UserNameで取れることが分かったのですが、
そのユーザが属するグループが取れるのか分かりません。

ご存知の方、よろしくお願いいたします。
mei
大ベテラン
会議室デビュー日: 2003/04/08
投稿数: 114
投稿日時: 2004-12-22 02:07
こんばんは、meiです。

引用:

kesさんの書き込み (2004-12-21 18:23) より:

現在ログオン中のユーザが所属するグループ名を取得することは可能でしょうか。
開発環境はVB.NETでOSはXPです。



ちょっとややこしいですが、こんな感じです。

コード:
using System;
using System.Collections;
using System.Management;

class Program {

	static void Main(string[] args) {
		// ドメインとユーザを指定して所属するグループを取得するクエリー
		string s = String.Format("select * from Win32_GroupUser where " 
			+ "PartComponent=\"Win32_Account.Domain='{0}',Name='{1}'\"", 
			Environment.UserDomainName, Environment.UserName);

		// クエリーの実行
		SelectQuery query = new SelectQuery(s);
		ManagementObjectSearcher ms = new ManagementObjectSearcher(query);

		foreach (ManagementObject mo in ms.Get()) {
			// グループのパスを取得する
			string path = mo["GroupComponent"].ToString();
			// パスからグループオブジェクトを作成
			ManagementObject go = new ManagementObject(path);
			// グループの名前を取得
			Console.WriteLine(go["Name"]);
		}
	}
}



System.Management.dllを参照に追加する必要があるので注意です。
kes
ベテラン
会議室デビュー日: 2004/08/10
投稿数: 67
投稿日時: 2004-12-22 11:47
ありがとうございます。

これはC#のコードしょうか。VB.NETでも同じように使えるのでしょうか。

あまり回答がいただけないみたいで
根本的な部分で不安になってきたんですが、

要はやりたいことは
Windows上の特定のグループに属するユーザにだけ、
今回作成するアプリの起動を許可したいのです。
起動した時に、そのユーザが属するグループ名を取得して、
そこに想定したグループ名があるか、でチェックしようとしてます。

他にもっとよいやり方があるのでしょうか。

よろしくお願いいたします。
mei
大ベテラン
会議室デビュー日: 2003/04/08
投稿数: 114
投稿日時: 2004-12-22 12:20
こんにちは、meiです。

引用:

kesさんの書き込み (2004-12-22 11:47) より:

これはC#のコードしょうか。VB.NETでも同じように使えるのでしょうか。



.NET FrameworkのライブラリなのでC#でもVB.NETでも使い方は一緒です。
にしざき
ぬし
会議室デビュー日: 2003/06/30
投稿数: 304
投稿日時: 2004-12-22 13:31
コード:
Dim principal As System.Security.Principal.WindowsPrincipal = new System.Security.Principal.WindowsPrincipal(System.Security.Principal.WindowsIdentity.GetCurrent())
If (principal.IsInRole(必要な権限)) Then
  任意の処理
End If



※必要な権限は、
System.Security.Principal.WindowsBuiltInRole.Administrator 等のように System.Security.Principal.WindowsBuiltInRole を渡すか、
"BUILTIN\\ビルトイングループ名" あるいは "ドメインもしくはマシン名\\グループ名" の文字列
kes
ベテラン
会議室デビュー日: 2004/08/10
投稿数: 67
投稿日時: 2004-12-22 17:03
Principalオブジェクトでうまくいきそうです。
BUILTIN以外の自分で作ったグループだとなんかうまくいきませんが。
もうちょっといろいろ試してみます。

ありがとうございました。
kes
ベテラン
会議室デビュー日: 2004/08/10
投稿数: 67
投稿日時: 2004-12-27 10:40
再起動したらうまく行きました。
ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)