アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (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
    • good
    • 1
この回答へのお礼

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

お礼日時:2004/08/24 10:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています