tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
[ツリー表示へ]  [ワード検索]  [Home]

タイトル 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で上げそうな感じみたいなです

取りあえずのご報告でした。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。