2016年01月27日

フォルダのアクセス権取得


---------------------------
■ファイル名:test.vbs
---------------------------
Option Explicit

Function getFolderAccessMask(ByVal searchFolder)

'--------------------------------------------------------
'定数
'--------------------------------------------------------

Const FullAccess = 2032127
Const Read = 1179817
Const Write = 1180095
Const Update = 1245631
Const SubFolderAndFileSpecialAccess = -536805376
Const SubFolderAndFileFullAccess = 268435456

Const FullAccessJpn = "フルコントロール(All)"
Const ReadJpn = "読み取り(RX)"
Const WriteJpn = "書き込み(RWX)"
Const UpdateJpn = "変更(RWXD)"
Const SubFolderAndFileSpecialAccessJpn = "サブフォルダーとファイルに対する特殊なアクセス権"
Const SubFolderAndFileFullAccessJpn = "サブフォルダとファイルに対するフルコントロール"

'--------------------------------------------------------
'前処理
'--------------------------------------------------------

Dim wmiFileSecSetting
Dim wmiSecurityDescriptor
Dim retValue

Set wmiFileSecSetting = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2:Win32_LogicalFileSecuritySetting='" & searchFolder & "'")
retValue = wmiFileSecSetting.GetSecurityDescriptor(wmiSecurityDescriptor)

'--------------------------------------------------------
'NTFSのアクセスコントロール情報取得
'--------------------------------------------------------

Dim DACL
Dim wmiAce
Dim wmiTrustee
Dim strSID
Dim strACL
Dim i
Dim accessMask

retValue = ""
DACL = wmiSecurityDescriptor.DACL
For each wmiAce in DACL
Set wmiTrustee = wmiAce.Trustee
strSID = ""
For i = 0 To UBound(wmiTrustee.SID) - 1
strSID = strSID & wmiTrustee.SID(i) & ","
Next
strSID = strSID & wmiTrustee.SID(i)

'アクセスマスクの取得
accessMask = wmiAce.accessMask

'アクセスマスクをアクセス権表示文字列に変換
strACL = ""
Select Case accessMask
Case FullAccess
'フルコントロール(All)
strACL = FullAccessJpn
Case Read
'読み取り(RX)
strACL = ReadJpn
Case Write
'書き込み(RWX)
strACL = WriteJpn
Case Update
'変更(RWXD)
strACL = UpdateJpn
Case SubFolderAndFileSpecialAccess
'サブフォルダーとファイルに対する特殊なアクセス権
strACL = SubFolderAndFileSpecialAccessJpn
Case SubFolderAndFileFullAccess
'サブフォルダとファイルに対するフルコントロール
strACL = SubFolderAndFileFullAccessJpn
Case Else
strACL = accessMask
End Select

'アクセスコントロール情報を取得
If Len(Trim(retValue)) <> 0 Then
retValue = retValue & VbCrLf
End If
retValue = retValue & """" & wmiTrustee.Domain & """"
retValue = retValue & ","
retValue = retValue & """" & wmiTrustee.Name & """"
retValue = retValue & ","
'retValue = retValue & """" & strsid & """"
'retValue = retValue & ","
'retValue = retValue & """" & wmiTrustee.Sidstring & """"
'retValue = retValue & ","
retValue = retValue & """" & strACL & """"
'retValue = retValue & ","
'retValue = retValue & """" & accessMask & """"
Next

'--------------------------------------------------------
'後処理
'--------------------------------------------------------

'オブジェクトの破棄
Set wmiAce = Nothing
Set wmiTrustee = Nothing
Set wmiFileSecSetting = Nothing
Set wmiSecurityDescriptor = Nothing

'戻り値
getFolderAccessMask = retValue

End Function

'*********************************************
' メインの処理
'*********************************************

'Const FileHeader = "Domain,Name,SID,Sidstring,ACL,accessMask"
Const FileHeader = "Domain,Name,ACL"

Dim searchFolder
Dim retValue

'対象のフォルダ
searchFolder = "C:\test"

'NTFSのアクセスコントロール情報を取得
retValue = getFolderAccessMask(searchFolder)

'アクセスコントロール情報を出力
WScript.Echo FileHeader & VbCrLf & retValue

---------------------------
■実行例
---------------------------

>cscript test.vbs //Nologo
Domain,Name,ACL
"BUILTIN","Administrators","フルコントロール(All)"
"BUILTIN","Administrators","サブフォルダとファイルに対するフルコントロール"
"NT AUTHORITY","SYSTEM","フルコントロール(All)"
"NT AUTHORITY","SYSTEM","サブフォルダとファイルに対するフルコントロール"
"BUILTIN","Users","読み取り(RX)"
"NT AUTHORITY","Authenticated Users","変更(RWXD)"
"NT AUTHORITY","Authenticated Users","サブフォルダーとファイルに対する特殊なアクセス権"

posted by rururu at 00:52| Comment(0) | TrackBack(0) | VBScript
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/172814271
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック