• ベストアンサー

WSH(VBS)でNTFSのアクセス権の付け方を教えてください

MS-DOSのCACLSにあたるWSH(VBS)の使い方が 分かりません。教えて頂けないでしょうか? WINDOWSのNTFSに存在するファイルに対し スクリプトにてアクセス権付与をしたいと 考えています。 何卒よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • ittochan
  • ベストアンサー率64% (2667/4137)
回答No.1

以前、私が作成したVBSです。 参考になれば。 c:\scripts\test.txt のアクセス許可を変更します。 Option Explicit Dim instance Dim strMoniker Dim objDescriptor Dim retval Dim DACL Dim controlFlags Dim accessmask Dim Group Dim Owner Dim SACL Dim number_of_trustees Dim trustee_Domain Dim trustee_Name Dim trustee_Sidstring Dim i Dim strACL '' アクセス権のマスク Const FULLACCESS = 2032127 '' フルアクセス(All) Const READ = 1179817 '' 読み取り(RX) Const UPDATE = 1245631 '' 変更(RWXD) Const R = 1179785 '' 特殊なアクセス権(R) Const W = 1179926 '' 特殊なアクセス権(W) Const X = 1179808 '' 特殊なアクセス権(X) Const D = 65536 '' 特殊なアクセス権(D) Const P = 262144 '' 特殊なアクセス権(P) Const O = 524288 '' 特殊なアクセス権(O) Const ImpLevel = "{impersonationLevel=impersonate}" Const namespace = "!root\cimv2:" Const objectpath = _ "Win32_LogicalFileSecuritySetting=""c:\\scripts\\test.txt""" strMoniker = "winmgmts:" & ImpLevel & namespace & objectpath Set instance = GetObject(strMoniker) If instance Is Nothing Then MsgBox ("インスタンスを取得出来ません。") WSCript.Quit End If retval = instance.getsecuritydescriptor(objDescriptor) Set DACL = objDescriptor.Properties_.Item("dacl") ' get dacl controlFlags = objDescriptor.Properties_.Item("controlflags") Set Group = objDescriptor.Properties_.Item("Group") Set Owner = objDescriptor.Properties_.Item("Owner") Set SACL = objDescriptor.Properties_.Item("Sacl") number_of_trustees = UBound(DACL.Value) WScript.Echo "ドメイン名\ユーザ名:SID\アクセス権\アクセスマスク" For i = 0 To number_of_trustees Set trustee_Domain = DACL.Value(i).Properties_.Item _ ("trustee").Value.Properties_.Item("Domain") Set trustee_Name = DACL.Value(i).Properties_.Item _ ("trustee").Value.Properties_.Item("Name") Set trustee_Sidstring = DACL.Value(i).Properties_.Item _ ("trustee").Value.Properties_.Item("Sidstring") accessmask = DACL.Value(i).Properties_.Item _ ("AccessMask").Value ' Save the accessmask Select Case accessmask Case FULLACCESS strACL = "フルコントロール(All)" Case READ strACL = "読み取り(RX)" Case UPDATE strACL = "変更(RWXD)" Case Else strACL = accessmask End Select WScript.Echo trustee_domain & "\" & trustee_name & ":" & trustee_Sidstring & ":" & strACL & ":" & accessmask If trustee_name = "Administrators" Then 'アクセス許可の設定 'Administratorsを「読み取り」にする objDescriptor.Properties_.Item("dacl").Value(i).Properties_.Item _ ("AccessMask").Value = R End If Next retval = instance.setsecuritydescriptor(objDescriptor) If retval = 0 Then MsgBox "成功しました。" Else MsgBox "セキュリティ設定を変更できませんでした。" End If Set instance = Nothing WSCript.Quit

milki
質問者

お礼

試してみます。ありがとうございました。

関連するQ&A