タイトル : Re^8: 続 ファイルサーバアクセス権 投稿日 : 2009/03/23(Mon) 18:38 投稿者 : ON
オショウ さん お手数おかけします 了解です ありがとうございました >VBScriptは、ほぼ使わないので、何とも・・・ VBSも何とかのレベルですが リンク先は 下記エクセルVBAでとりあえず動作しました (動けばいいでちゃんと考えて修正していませんです) はずかし修正コード Public Sub JJ() On Error Resume Next Dim i '--- ループ用など Dim strComputer '--- 検索時にコンピュータを指定するための変数 Dim strPath '--- ACL 取得対象のファイル 'strPath = "D:\batch\tmp" '--- 要変更 'strPath = "Z:\新しいフォルダ (2)\DDD" '--- 要変更 'strPath = "\\hoge\fuga\新しいフォルダ (2)\DDD" '--- 要変更 strPath = "Z:\TEMP" '--- 要変更 Dim wmiFileSecSetting '--- Security Setting Object 用変数 Dim wmiSecurityDescriptor '--- Security Descriptor 用変数 Dim RetVal '--- エラー判定用変数 Dim objDACL '--- DACL 用変数 Dim intTrstNum '--- Trustee のメンバ数 Dim objTrstDomain '--- Trustee の所属ドメイン Dim objTrstName '--- Trustee の名前 Dim objTrstSID '--- Trustee の SID Dim varAMask '--- Trustee の Access Mask 値 Dim strACL '--- Access Mask 値をあらわす内容文字列変数 Const FULLACCESS = 2032127 '--- フルアクセス(All) Const DenyFULLACCESS = 983551 '--- 【拒否】フルアクセス(All) Const UPDATE = 1245631 '--- 変更(RWXD) Const DenyUPDATE = 197055 '--- 【拒否】変更(RWXD) Const READEX = 1179817 '--- 読み取りと実行(RX) Const DenyREADEX = 131241 '--- 【拒否】読み取りと実行(RX) Const READ = 1179785 '--- 読み取り Const DenyREAD = 131209 '--- 【拒否】読み取り 'Const WRITE = 1048854 '--- 書き込み Const WRITEZ = 1048854 '--- 書き込み Const DenyWRITE = 278 '--- 【拒否】書き込み Const SR_FSFX = 1048608 '--- 特殊なアクセス権(フォルダのスキャン/ファイルの実行) Const SR_DenySFX = 32 '--- 【拒否】特殊なアクセス権(フォルダのスキャン/ファイルの実行) Const SR_LFRD = 1048577 '--- 特殊なアクセス権(フォルダの一覧/データの読み取り) Const SR_DenyLFRD = 1 '--- 【拒否】特殊なアクセス権(フォルダの一覧/データの読み取り) Const SR_RAt = 1048704 '--- 特殊なアクセス権(属性の読み取り) Const SR_DenyRAt = 128 '--- 【拒否】特殊なアクセス権(属性の読み取り) Const SR_RExAt = 1048584 '--- 特殊なアクセス権(拡張属性の読み取り) Const SR_DenyRExAt = 8 '--- 【拒否】特殊なアクセス権(拡張属性の読み取り) Const SR_CrFiWD = 1048578 '--- 特殊なアクセス権(ファイルの作成/データの書き込み) Const SR_DenyCrFiWD = 2 '--- 【拒否】特殊なアクセス権(ファイルの作成/データの書き込み) Const SR_CrFoAdD = 1048580 '--- 特殊なアクセス権(フォルダの作成/データの追加) Const SR_DenyCrFoAdD = 4 '--- 【拒否】特殊なアクセス権(フォルダの作成/データの追加) Const SR_WAt = 1048832 '--- 特殊なアクセス権(属性の書き込み) Const SR_DenyWAt = 256 '--- 【拒否】特殊なアクセス権(属性の書き込み) Const SR_WExAt = 1048592 '--- 特殊なアクセス権(拡張属性の書き込み) Const SR_DenyWExAt = 16 '--- 【拒否】特殊なアクセス権(拡張属性の書き込み) Const SR_Del = 1114112 '--- 特殊なアクセス権(削除) Const SR_DenyDel = 65536 '--- 【拒否】削除 Const SR_RAcl = 1179648 '--- 特殊なアクセス権(アクセス許可の読み取り) Const SR_DenyRAcl = 131072 '--- 【拒否】特殊なアクセス権(アクセス許可の読み取り) Const SR_ChAcl = 1310720 '--- 特殊なアクセス権(アクセス権の変更) Const SR_DenyChAcl = 262144 '--- 【拒否】特殊なアクセス権(アクセス権の変更) Const SR_GOwn = 1572864 '--- 特殊なアクセス権(所有権の取得) Const SR_DenyGOwn = 524288 '--- 【拒否】特殊なアクセス権(所有権の取得) strComputer = "." '--- 指定したファイルの Security Setting オブジェクトを取得 Set wmiFileSecSetting = GetObject( _ "winmgmts:Win32_LogicalFileSecuritySetting.path='" & strPath & "'") RetVal = wmiFileSecSetting.GetSecurityDescriptor(wmiSecurityDescriptor) If (RetVal <> 0) Then 'WScript.Echo "GetSecurityDescriptorに失敗しました:" & RetVal 'WScript.Quit Debug.Print "GetSecurityDescriptorに失敗しました:" & RetVal 'WScript.Quit End If '--- セキュリティディスクリプタから情報を取得する。 Set objDACL = wmiSecurityDescriptor.Properties_.Item("dacl") intTrstNum = UBound(objDACL.Value) For i = 0 To intTrstNum Set objTrstDomain = _ objDACL.Value(i).Properties_.Item("trustee").Value.Properties_.Item("Domain") Set objTrstName = _ objDACL.Value(i).Properties_.Item("trustee").Value.Properties_.Item("Name") Set objTrstSID = _ objDACL.Value(i).Properties_.Item("trustee").Value.Properties_.Item("Sidstring") '--- アクセスマスクの取得 varAMask = objDACL.Value(i).Properties_.Item("AccessMask").Value '--- アクセスマスクをアクセス権表示文字列に変換する。 '--- (メジャーなものだけ。組み合わせ不可) 'Stop Select Case varAMask Case FULLACCESS strACL = "フルコントロール(All) : " & varAMask Case UPDATE strACL = "変更(RWXD) : " & varAMask Case READEX strACL = "読み取りと実行(RX) : " & varAMask Case READ strACL = "読み取り : " & varAMask 'Case WRITE Case WRITEZ strACL = "書き込み : " & varAMask Case Else strACL = "その他のアクセス権 : " & varAMask End Select 'MsgBox "Trustee Domain " & vbTab & " : " & objTrstDomain & vbCrLf & _ "Trustee Name " & vbTab & " : " & objTrstName & vbCrLf & _ "Trustee SID " & vbTab & " : " & objTrstSID & vbCrLf & _ "ACL " & vbTab & vbTab & " : " & strACL & vbCrLf Debug.Print "Trustee Domain " & vbTab & " : " & objTrstDomain & vbCrLf & _ "Trustee Name " & vbTab & " : " & objTrstName & vbCrLf & _ "Trustee SID " & vbTab & " : " & objTrstSID & vbCrLf & _ "ACL " & vbTab & vbTab & " : " & strACL & vbCrLf Next Set objTrstSID = Nothing Set objTrstName = Nothing Set objTrstDomain = Nothing 'Set objSACL = Nothing Set strACL = Nothing 'Set objOwner = Nothing 'Set objGroup = Nothing Set objDACL = Nothing Set wmiSecurityDescriptor = Nothing Set wmiFileSecSetting = Nothing End Sub >そのパス?と実パス記載?とは・・・ 言葉足らずで申し訳ありません そのパス(ネットワークドライブの割り当て):trPath = "Z:\TEMP" 実パス:strPath = "\\hoge\fuga\新しいフォルダ (2)\DDD" で、あとで思いついたのですが 実パスはDFSのパスでした で、DFSよくわかりませんが 下記試してみましたが、ドライブの割り当て以外はどちらも駄目でした DFSパス TargetPath = "\\hoge\fuga\新しいフォルダ (2)\DDD" 実パス? TargetPath = "\\PC名\bar\新しいフォルダ (2)\DDD" DFS調査中で、理解が足りていません 今回の希望の操作は叶っています 新たに解決したい問題は ファイルサーバーの階層構造で、上位を引き継がないでアクセス許可をしたものの メンテが??の状態になってしまっていることです この辺調査中ですが、近々別Qで上げそうな感じみたいなです 取りあえずのご報告でした。 |