解決済み

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

  • 困ってます
  • 質問No.973466
  • 閲覧数3258
  • ありがとう数7
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 59% (77/129)

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

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

  • 回答No.1

ベストアンサー率 64% (2667/4137)

以前、私が作成した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

お礼率 59% (77/129)

試してみます。ありがとうございました。
投稿日時 - 2004-08-24 10:04:27
感謝経済、優待交換9月20日スタート
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

特集


より良い社会へ。感謝経済プロジェクト始動

ピックアップ

ページ先頭へ