人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

VBScriptで、フォルダのアクセス権におけるユーザーの継承元を調べる方法を教えてください。
プロパティのセキュリティから詳細設定を開いたところに表示されるユーザーの「継承元」の部分です。

フォルダを指定すると、そこに許可されているユーザー名と継承元が分かるようなものだと嬉しいです。

一応、先の質問の関連です。
http://q.hatena.ne.jp/1210746433

●質問者: harrypotter
●カテゴリ:コンピュータ
✍キーワード:VBScript アクセス セキュリティ フォルダ プロパティ
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● ardarim
●100ポイント ベストアンサー

作ってみました。


親オブジェクトから継承されていない(SE_DACL_PROTECTEDがセットされていない)フォルダに到達するまで1つずつフォルダをたどっていきます。

継承元のフォルダに辿り着いたら、GetSecurityDescriptorメソッドでユーザー名などの詳細を取得します。

Const SE_DACL_PROTECTED = &h1000

On Error Resume Next

If WScript.Arguments.Count = 0 Then
 WScript.Echo "引数にパスを指定してください"
 WScript.Quit
End If
TargetPath = WScript.Arguments.Item(0)

Set fso = CreateObject("Scripting.FileSystemObject")

TargetPath = fso.GetFolder(TargetPath).Path
WScript.Echo "対象パス: " & TargetPath

CurrentPath = ""
Do
 If CurrentPath = "" Then
 CurrentPath = TargetPath
 Else
 Err = 0
 ' 1つ上のフォルダを取得
 CurrentPath = fso.GetFolder(CurrentPath).ParentFolder
 If Err <> 0 Then
 ' ルートに到達
 Exit Do
 End If
 End If

 Set wmiFileSecSetting = GetObject( _
 "winmgmts:Win32_LogicalFileSecuritySetting.path='" & _
 CurrentPath & "'")

Loop Until (wmiFileSecSetting.ControlFlags And SE_DACL_PROTECTED) <> 0

WScript.Echo "継承元パス: " & CurrentPath

Err = 0
RetVal = wmiFileSecSetting.GetSecurityDescriptor(wmiSecurityDescriptor)
If Err <> 0 Then
 WScript.Echo "GetSecurityDescriptor 失敗" & _
 vbCrLf & Err.Number & vbCrLf & Err.Description
 WScript.Quit
End If

WScript.Echo
WScript.Echo "アクセス制御リスト:"

For Each wmiAce in wmiSecurityDescriptor.DACL
 WScript.Echo " " & wmiAce.Trustee.Name
Next

参考:

Win32_LogicalFileSecuritySetting Class (Windows)

GetSecurityDescriptor Method of the Win32_LogicalFileSecuritySetting Class (Windows)

◎質問者からの返答

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

スクリプトまで書いていただきすいません。


確認してみました。

継承元を追えるのでかなり便利なのですが、継承元が複数ある時にも一つのフォルダしか出ません。


たとえば、各ユーザの継承元が

userA→C:\hoge

userB→C:\hoge

userC→C:\hoge\hogehoge

となった状態で子に継承されている場合に、c:\hogeは表示されるのですが、c:\hoge\hogehogeは出ないといった具合です。


今回のチェックの目的は、継承元を拾いたいというのもあるのですが、それよりも、継承のないユーザがいるフォルダを見つけたいということがあります。


たとえば

c:\hoge 以下のサブフォルダにアクセス権の継承をしていている状態で、

c:\hoge\hoge2\hoge3 に継承なしのユーザが追加されている場合、その\hoge3フォルダを見つけたいのです。


質問の内容とは少し違ったというものの、このスクリプトは大変参考になりそうです。

ほんとにありがとうございます。


WMIやVBSに関しては全く無知ですので、コメント欄もとても参考になります。

ポイントを差し上げたいのでぜひ回答欄にも書いていただけたらと思います。


引き続き回答お待ちしております。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ