今だけ人気マンガ100円レンタル特集♪

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_ユーザー配下のすべてのユーザ情報を取得する場合には、どのようにすればよろしいでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (2件)

質問文に書いてある単一ユーザーを取得する書き方に沿えばこんな感じかなぁ。


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}
    • good
    • 2

今日の質問 : OU とそのサブ OU 内のすべてのユーザーの一覧を取得する方法はありますか


http://gallery.technet.microsoft.com/scriptcente …
で解決するかも?
※当方、AD環境ではないのでここまで。

蛇足。
リモートレジストリの参照の件ですが、管理共有を復活させても良いかも?
https://support.microsoft.com/ja-jp/kb/951016
reg query \\win7pc\hklm /s では全てを取得できそうです。
(途中で止めてしまったので・・・)
ただし、セキュリティ的にゆるくなります。
\\Win7PC\C$ などでエクスプローラでも操作できるようになったり
shutdown /r /m \\win7pc とかも思いのままに・・・。
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

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

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

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

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

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

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

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

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

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

Aベストアンサー

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

参考URL:http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=17653&forum=7&1

QEXCELファイルのカレントフォルダを取得するには?

EXCELファイルのカレントフォルダを取得するには?

C:\経理\予算.xls

D:\2005年度\予算.xls

EXCEL97ファイルがあります。

VBAで
  カレントフォルダ名
(C:\経理\,D:\2005年度\)
を取得する事は可能でしょうか?

CURDIRでは上手い方法が見つかりませんでした。

Aベストアンサー

こんばんは。
Excel97 でも、同じですね。以下で試してみてください。

Sub test()
'このブックのパス
a = ThisWorkbook.Path
'アクティブブックのパス
b = ActiveWorkbook.Path
'Excelで設定されたデフォルトパス
c = Application.DefaultFilePath
'カレントディレクトリ
d = CurDir
MsgBox "このブックのパス   : " & a & Chr(13) & _
   "アクティブブックのパス: " & b & Chr(13) & _
   "デフォルトパス    : " & c & Chr(13) & _
   "カレントディレクトリ : " & d & Chr(13)
End Sub

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...続きを読む

QVBA オブジェクトが空かどうか判定する

皆様のお知恵を拝借させてください。

エクセルVBAでオブジェクトを入れる変数を定義し、その変数にオブジェクト
が入っているかどうか検査したいのですがどうしたらいいでしょうか。

例えば---
Dim a As Workbook
If a <> nothing then ←この部分が分からない。このままだとエラー。
処理
End if
---------
環境
エクセル2003
WinXPsp1

Aベストアンサー

もし、aが空だったら
If a Is Nothing Then 

もし、aが空じゃなかったら
If Not a Is Nothing Then

Q【Excel VBA】マクロでExcel自体を終了させたい

環境:WindowsXP、Excel2003

マクロでエクセルを終了(ブックを閉じて、アプリケーション自体も終了)させたいのですが、以下のコードではアプリケーションが閉じてくれません。

ThisWorkbook.Close
ExcObj.Quit
Application.Quit

どこか悪いところはありますでしょうか?

よろしくお願いします。

Aベストアンサー

普通に考えれば質問者のコードで上手くいきそうですが
hana-hana3さんの回答にもあるようにThisWorkBook.Closeでコード終了となりますので
Application.QuitをThisWorkBook.Closeの前にもってこないといけません。
Application.Quitはそれがあるプロシージャのコードが全て終わるまで
その実行を保留するちょと特別動作をします。

'-------------------------------------
 Application.Quit
 ThisWorkbook.Close
'-------------------------------------
 
 

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

Qエクセル マクロで指定フォルダを開く

エクセルにて
指定フォルダを開く、マクロがあれば教えて頂けないでしょうか。
よろしくお願いいたします。

Aベストアンサー

こんにちは。

こういうものですか?
開くフォルダを変えたいときは targ に与えるパスを変更します。

Sub OpenFolders()
Dim targ As String
targ = "C:\"
Shell "C:\Windows\Explorer.exe " & targ, vbNormalFocus
End Sub

QADでユーザ名と表示名をコマンドでCSV取得したい

お世話になります。
windowsserver2003 or 2000で
Active directoryのユーザ名と表示名の一覧をコマンドで
取得したいのですが可能でしょうか。

netuserとかdsqueryでないのかな?と思って調べたのですが
表示名がどうにも探せませんでした。
VBとかだと、可能なようですが、
cmdのコマンドベースでさっと取得できないものでしょうか。
どうかよろしくお願いします。

Aベストアンサー

dsquery user -limit 100 | dsget user -display
でいかがでしょうか。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング