プロが教えるわが家の防犯対策術!

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

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

ご存知の方、よろしくお願いいたします。

A 回答 (5件)

#1 です。

失礼しました・・・
コレなんかはどうでしょうか?
C# のコードみたいですけど。

参考URL:http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.ph …
    • good
    • 0
この回答へのお礼

ありがとうございます。

そっちの書込みも私のものです。(笑)

どうも。

お礼日時:2004/12/22 11:47

>それではうまくいかないですよねぇ。


ええっ?
String型で"コンピュータ名\グループ名"
でうまくいきますよ。
実際、
自分で作ったグループでIsInRoleで試してみましたが、
trueになりました。
    • good
    • 0
この回答へのお礼

マシンを再起動したらうまくいきました。
OKです。ばっちりです。

ありがとうございました。

お礼日時:2004/12/24 11:37

#2の参考URLをみたんですけど、


あるグループに所属するかどうか調べたいだけなら
参考URLにも書かれている
IsInRole("調べたいグループ名")
を使って調べられると思います。

組み込みのグループ名は列挙体で得られるんですけど
ユーザー定義のグループのリストの.NETでの取り出し方は、わかりません。
私も知りたいです。
    • good
    • 0
この回答へのお礼

String型で”コンピュータ名\グループ名”で渡せばいいと書いてあるのですが、それではうまくいかないですよねぇ。
わたしもそれ以上の情報が見つけられませんでした。

なにか分かったら教えてください。
ありがとうございました。

お礼日時:2004/12/23 02:34

VB6の方法ですが記述します。


Active DS Type Libraryを参照設定します。

Dim dso As IADsOpenDSObject
Dim User As IADsUser
Dim username As String
Dim username2 As String
Dim Password As String
Dim DomainName As String
Dim group As IADsGroup

username = "ユーザー名"
username2 = "管理者ユーザー名"
Password = "管理者パスワード"
DomainName = "ドメイン名"

Set dso = GetObject("WinNT:")
Set User = dso.OpenDSObject("WinNT://" & DomainName & "/" & username & ",user", username2, Password, 1)

For Each group In User.Groups
List1.AddItem group.Name
Next

以上で、リストボックスの中に所属するグループが
追加されると思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

VB6ならWIN32APIのNetLocalGroupGetMembersでとれるらしいです。

.NETは基本的にWIN32APIは使わないで済むとマニュアルにあったので、他の方法があるのではとおもって探しております。

ありがとうございました。

お礼日時:2004/12/22 13:42

Environment.UserDomainNmae でも取れますし


SystemInformation.UserDomainName でも取れますよ
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

すみません、ドメイン名じゃなくて、グループ名が取りたいんです。Administratorsとか、PowerUsersとか。

全然回答がないところを見ると無理なのかな・・・。


ありがとうございました。

お礼日時:2004/12/22 10:34

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QVBAでActiveDirectoryのユーザ一覧の取得の仕方

Excel VBAにてActiveDirectoryのユーザなどの管理をしたいと考えています。
(理由:操作ミスなどを防ぐために、AD操作は全てExcelからにしたい)

情報を取得する対象のユーザが分かっていれば、以下の方法で、情報を取得可能かと思います。
(実行するユーザが、ADの操作権限がある前提で、suzukiというユーザの情報を取得する場合)
Dim objSysInfo
Dim objUser
Set objSysInfo = CreateObject("ADSystemInfo")
Set objUser = GetObject("LDAP://CN=suzuki,OU=OU123_ユーザー,OU=OU123,DC=ad,DC=test,DC=com")
 AD:ad.test.com
 OU:OU123→OU123_ユーザー

OU123_ユーザー配下のすべてのユーザ情報を取得する場合には、どのようにすればよろしいでしょうか?

Aベストアンサー

質問文に書いてある単一ユーザーを取得する書き方に沿えばこんな感じかなぁ。
Dim objOU, objUser
Set ObjOU = CreateObject("LDAP://OU=OU123_ユーザー,OU=OU123,DC=ad,DC=test,DC=com")
objOU.Filter = Array("user")
For Each objUser In objOU
 Debug.Print objUser.Name
Next

複数のアカウントを取得するので ADODB で DB のように取り扱うこともできそう。(ちょっと長いけど)
Dim objConn, objComm, objRst
Set objConn = CreateObject("ADODB.Connection")
Set objComm = CreateObject("ADODB.Command")
objConn.Provider = "ADsDSOObject"
objConn.Open "Active Directory Provider"
set objComm.ActiveConnection = objConn

objComm.Properties("Page Size") = 1000 ' 検索結果の最大取得数
objComm.Properties("Searchscope") = 1 ' この OU の配下も全部なら 2 を指定
objComm.CommandText = "SELECT Name From 'LDAP://OU=OU123_ユーザー,OU=OU123,DC=ad,DC=test,DC=com' WHERE objectCategory='user'"
Set objRst = objComm.Execute

objRst.MoveFirst
Do Until objRst.EOF
 Debug.Print objRst.Fields("Name").Value
 objRst.MoveNext
Loop


私は今まで Excel でアカウントの台帳を作っていたので、これを元に Active Directory を操作できないかと考えていたのですが、最近になって考え方を改めました。
台帳はあくまでも Active Directory なので、ユーザーのリストがほしければ都度取得すればいいじゃないか、と。
アカウント登録や変更も、[対象アカウントの存在確認] → [更新] をすりゃいいじゃないか、と。
それで Excel 台帳による二重管理を捨て、PowerShell によるいくつかのスクリプト ファイルを作っているところです。
一覧を取得するだけなら以下の 1行でできちゃいますし。
Get-ADUser -Filter * -SearchBase "OU=OU123_ユーザー,OU=OU123,DC=ad,DC=test,DC=com" -Properties * -SearchScope OneLevel | ForEach-Object { $_.Name}

質問文に書いてある単一ユーザーを取得する書き方に沿えばこんな感じかなぁ。
Dim objOU, objUser
Set ObjOU = CreateObject("LDAP://OU=OU123_ユーザー,OU=OU123,DC=ad,DC=test,DC=com")
objOU.Filter = Array("user")
For Each objUser In objOU
 Debug.Print objUser.Name
Next

複数のアカウントを取得するので ADODB で DB のように取り扱うこともできそう。(ちょっと長いけど)
Dim objConn, objComm, objRst
Set objConn = CreateObject("ADODB.Connection")
Set objComm = CreateObject("ADODB.Command")
...続きを読む

QC#でローカルユーザーやグループの設定

C#でWindows PC上のローカルユーザーを追加/削除/設定する、できるだけ簡単な方法を教えてください。
具体的には

 ユーザー/グループの追加
 ユーザー/グループの削除
 ユーザーをグループに追加/グループから削除
 ユーザー/グループの一覧取得
 パスワードの設定や変更
 その他上記に関連したことならなんでも

です。
環境はWindows8.1Pro/VisualStudio2013Express For Desktopです。
よろしくお願いします。

Aベストアンサー

ユーザアカウントなどに関しては、ディレクトリサービスを利用するのが良いと思います。
http://support.microsoft.com/kb/306273/ja

もっと簡単に…という事であれば、少し手抜きですが、Process.Startなどでnetコマンドを直接呼び出す方法でも実現できますよ。netコマンドの引数が分からなければ、解説ページがたくさんあるので調べてみてください。
http://www.atmarkit.co.jp/fwin2k/win2ktips/258netcommand/netcommand.html

QActiveDirectoryから値を取得

VB2005にて、ActiveDirectoryから値を取得するアプリを作成しています。

WindowsXPでは問題なく動作するのですが、Windows7だと「ローカルエラーが発生しました」
というエラーメッセージが返って来てしまいます。

OSの設定を変えれば解決するのか、プログラムの書き方を変えるのか分からないので、
こちらに質問させていただきました。以下がプログラムです。

どなたかご存知の方がいらっしゃいましたら教えて下さい。
宜しくお願いします。


Try
Dim serverPath As String = "LDAP://ドメコンのIPアドレス/DC=XXXXX,DC=co,DC=jp"
Dim userName As String = "CN=ユーザー名,CN=Users,DC=XXXXX,DC=co,DC=jp"
Dim password As String = "パスワード"
Dim entry As New System.DirectoryServices.DirectoryEntry(serverPath, userName, password)
Dim lgUser As String
Dim intPos As Integer '「,」の位置

lgUser = ユーザーID

Dim search As New System.DirectoryServices.DirectorySearcher()
'検索のルートになるDirectoryEntryを指定
search.SearchRoot = entry

'検索条件を指定します。下ではアカウント名と変数lgUserの一致が条件
search.Filter = "(samAccountName=" + lgUser + ")"

Dim result As System.DirectoryServices.SearchResult

Dim strA As String

'↓ココでエラーになります。
result = search.FindOne

Dim counter As Integer
For counter = 0 To (result.Properties("memberOf").Count) - 1
'resultで抽出したアカウントがメンバとして含まれるグループを取得
Dim groupName As String = CStr(result.Properties("memberOf")(counter))

strA = strA & groupName & vbCrLf
intPos = groupName.IndexOf(",") '「,」の位置を取得
User_Group.Add(groupName.Substring(3, intPos - 3))

Next counter

SetUser_Group = True

Catch ex As Exception
MessageBox.Show(ex.Message, "ActiveDirectoryからの取得", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try

VB2005にて、ActiveDirectoryから値を取得するアプリを作成しています。

WindowsXPでは問題なく動作するのですが、Windows7だと「ローカルエラーが発生しました」
というエラーメッセージが返って来てしまいます。

OSの設定を変えれば解決するのか、プログラムの書き方を変えるのか分からないので、
こちらに質問させていただきました。以下がプログラムです。

どなたかご存知の方がいらっしゃいましたら教えて下さい。
宜しくお願いします。


Try
Dim serverPath As String = "LDAP://ドメコンのIPアド...続きを読む

Aベストアンサー

EXEを右クリック→管理者として実行
で動きませんか?

常に管理者として実行するならexeのプロパティで「管理者としてこのプログラムを実行する」

あるいはmanifestファイルを同胞
http://www.atmarkit.co.jp/fdotnet/chushin/introwinform_05/introwinform_05_02.html

QVBSであるAD情報を取得したいです!

すいません教えて下さい。

ADにOUが複数あります。
OU一覧を取得するにはどのようにすれば良いでしょうか?
色々やり方はあると思いますが、出来るだけ簡単な方法で実現したいです。

よろしくお願いします。

Aベストアンサー

いろいろというほどは方法は無く限られるような気がします。
以下を参考にして見て下さい。

http://gallery.technet.microsoft.com/scriptcenter/7c06328c-2f1d-45d5-9a6f-98eaf123c343

上記スクリプトでは、NameでANDを取っていますがこれを無くせば全てのOUとなります。
要は、objectCategoryがorganizationalUnitなオブジェクトを全て取得するということですね。

参考までにPower Shellのケースを記載しておきます。
DCのOSが何かわかりませんが、Power Shellが使えるのならこちらのほうが何かと簡単だと思います。

OU一覧取得なら一行で済みます。

Get-ADOrganizationalUnit -Filter *

一覧をDNだけにしたいならこんな感じ。

Get-ADOrganizationalUnit -Filter * | Format-List -Property DistinguishedName

QExcelのセルにユーザー名を表示する方法

こんにちわ。Excelのセルに使用しているユーザー名を表示する関数はありませんか?お知りの方、宜しくお願いします。

Aベストアンサー

ユーザー名とは、コンピュータにログオンしているユーザ名か、ツール>オプション>全般の「ユーザー名」で指定されているユーザ名かどちらでしょう。(後者はOfficeをインストールするときに指定するので、ログオンユーザ名と同じとは限りません)

どちらにしろ、標準の関数では無理なので、ユーザ定義関数を作ります。
Alt+F11でVBAの画面を開き、「挿入」>「標準モジュール」を選択します。Module1というのができて、右側にそのモジュールの入力画面になります。

ここで、右側に、

Function LoginName() As String
  LoginName = CreateObject("WScript.Network").UserName
End Function

Function ExcelUserName() As String
  ExcelUserName = Application.UserName
End Function

をコピーし、Excelに戻ります。

任意のセルで、
=LoginName()
とするとログオンユーザ名が表示され、
=ExcelUserName()
とするとExcelに登録されているユーザ名が表示されます。

ユーザー名とは、コンピュータにログオンしているユーザ名か、ツール>オプション>全般の「ユーザー名」で指定されているユーザ名かどちらでしょう。(後者はOfficeをインストールするときに指定するので、ログオンユーザ名と同じとは限りません)

どちらにしろ、標準の関数では無理なので、ユーザ定義関数を作ります。
Alt+F11でVBAの画面を開き、「挿入」>「標準モジュール」を選択します。Module1というのができて、右側にそのモジュールの入力画面になります。

ここで、右側に、

Function LoginNa...続きを読む

QADSIでパスワード取得

WIN2000ドメイン環境で
ADSIを使用してユーザのパスワードを取得する
方法はあるのでしょうか?IADsUserなんかを使うのだと思うのですが・・・。
パスワードを取得し、それを変更をしたいと考えています。
ちなみにユーザ一覧は取得することはできました。

ご存知の方いらっしゃいましたらご教授願えませんでしょうか?

Aベストアンサー

ADSIをはじめて使用したので、レスが遅くなってます。
>SetPassword
そうですね。基本的に新規ユーザの登録ですが、おっしゃる通り操作する人の権限次第では強制的にパスワードをセットできるようです。
そしてユーザの強制削除もできるようです。

参考文献はMSDNです。会社で試したかったけど、サーバのユーザ情報を勝手に触るわけにはいかないので、現在自宅で実験中です。
一度、適当なパスワードに強制的にパスワードを変更したために、ログインできずに困っちゃいました(笑)

ADSIなんてこんな便利なものがあるなんて知りませんでした。
感謝です。

QVBAでアカウント名を取得する方法

VBAで処理したEXCELブックをデスクトップに自動保存しようとしています。VBAで現在作業中のユーザーアカウント名を自動で取得する方法を教えていただきたいのですが。

デスクトップ上にブックを保存するには、パスを記述すればよいのですが、現在PC毎にユーザーアカウントを設定しユーザー名が異なっています。
このため、PC毎にこのユーザー名をデスクトップへのパスに入れ込まなければなりません。毎回キーボードからこのユーザー名を入力する方法もありますが、自動的にユーザー名を取得し、正しいパスを指定する方法を検討しています。
どなたか、VBAでこのユーザー名を取得する方法が有れば教えていただきたいのですが。
よろしくお願いいたします。

Aベストアンサー

Environ関数で、環境変数[USERNAME]を取得する。

MsgBox Environ("USERNAME")

Qフォルダ、ファイルのアクセス権設定状態を確認したい

 「Windows2000ServerSP4」上に設定している、フォルダ(サブフォルダ含む)、ファイルのアクセス権設定状態を一覧したいのですが、良い方法はありませんか。
 フリーソフトでも良いのですが。

 確認したいのは、[セキュリティ]のアクセス権の状態で、[共有]-[アクセス許可]については『everyone』が設定してあるので必要ありません。

 ただ、フォルダには、サブフォルダがいくつもあり、そのサブフォルダは上位の継承権を外してアクセス権を設定しているものも中にはあります。
 また、アクセス権はグループ単位だけではなく、ドメインユーザーの個人でも付与しているフォルダ、ファイルがいくつもあります。

 これをひとつ、ひとつのフォルダの[プロパティ]-[セキュリティ]を開くことなく、一覧表形式(などで)わかりやすく確認したいと思います。

 どうかよろしく願いいたします。

Aベストアンサー

ちょっとお望みのものとは違うかもしれませんが
コマンドプロンプトで

cacls そのフォルダ /T

としてみる

QIIS7.0上でASP.netでAD情報取得したい

ASP.netをVS2008(言語はVB)で開発しています。ローカル(WinXP)ではAD情報が取得できるのに、
WindowsServer2008(IIS7.0)上で実行したらエラーになりました。

エラー内容:「操作エラーが発生しました」
場所 System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail)
-------------------------------------
コード:
Dim nameCheck As String = System.Security.Principal.WindowsIdentity.GetCurrent.Name.ToString()
Dim serverPath As String = "LDAP://servername/DC=hogehoge,DC=local"

Dim entry As New System.DirectoryServices.DirectoryEntry(serverPath)
'ログオンユーザーを変数へ代入
Dim lgUser As String = Environment.UserName

Dim search As New System.DirectoryServices.DirectorySearcher()
' 検索のルートになるDirectoryEntryを指定
search.SearchRoot = entry
' 検索条件を指定します。下ではアカウント名と変数lgUserの一致が条件
search.Filter = "(samAccountName=" + lgUser + ")"
Dim result As System.DirectoryServices.SearchResult
result = search.FindOne
-------------------------------------
この↑FindOneでエラーになります。
lgUserにはユーザーID、
nameCheckにも、ドメイン名/ユーザーIDで、予定通りの値が取得出来ていることを確認しています
(※nameCheckはコード上必要ありませんが
思った通りの動きをしているか確認のため取得し、エラー時に表示して確認しました)

IIS7.0上では、IISマネージャを使用して、
「認証」で
・ASP.NET偽装
・Windows認証
を有効とし、他(フォーム認証、基本認証、匿名認証)はすべて無効にしています

lgUserにセットされる値はIDなので、
AD情報から、該当する人の名前と、メールアドレスを取得したいです。
(イントラネット上でデフォルト表示に使用します)
IIS7.0上で、ADに接続できるような設定が必要なのかな?と思っているのですが
具体的にどこをどうしたらよいのかわからず、途方に暮れています

こちらの情報が少ないようでしたら追加致します。
もう3日くらい詰まっているので、ヒントだけでも教えていただけると助かります。
よろしくお願いいたします。

ASP.netをVS2008(言語はVB)で開発しています。ローカル(WinXP)ではAD情報が取得できるのに、
WindowsServer2008(IIS7.0)上で実行したらエラーになりました。

エラー内容:「操作エラーが発生しました」
場所 System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail)
-------------------------------------
コード:
Dim nameCheck As String = System.Security.Principal.WindowsIdentity.GetCurrent.Name.ToString()
Dim serverPath As String = "LDAP://servername/DC=hogehoge,DC=local"

Dim...続きを読む

Aベストアンサー

ただのユーザで偽装しているので、AD内オブジェクトの検索ができない(権限がない)のではないかと。

アプリケーションプールアカウントにそれなりの権限を付与し、偽装をやめて、操作者のユーザID 自体は My.User.Name で取得するか、
アプリケーションプールアカウントはデフォルトで、ADの検索する時だけコーディングで偽装するかでいけると思います。

Qコンピューター名の文字数制限

コンピューター名の文字数制限
ネットで検索すると15文字以下、14文字以下、
12文字以下、15文字以下でなるべく少ない文字数など、
さまざまです。
どれが正解なのでしょうか?
また、少なければ少ないほど良いのでしょうか?

Aベストアンサー

OSが記載されていませんが、Windowsということならば以下のサイトが参考になると思います。
http://technet.microsoft.com/ja-jp/library/cc757496(WS.10).aspx

Windowsであれば、
最大63バイト(全角文字も有効であるため単位はバイト)
推奨は15文字

NetBIOS名の制限がありますので、一般的には英数およびハイフンで、15文字以下ということになるかと思います。


人気Q&Aランキング