Дать пользователю права на каталог (NTFS) из скрипта - VB
Формулировка задачи:
Так как же дать определенному пользователю права на запись в определенный каталог из скрипта (VBScript или JScript), то что надо использовать WMI - я примерно понял, но как...
Желательно с примером
Решение задачи: «Дать пользователю права на каталог (NTFS) из скрипта»
textual
Листинг программы
Option Explicit
Public Function SetPermission(strUserName, strDomainName, strPath)
dim objService
dim objLocator
dim objUserTrustee
Set objLocator = CreateObject("WbemScripting.SWbemLocator")
Set objService = objLocator.ConnectServer ("", "root/cimv2")
'Retrieve user's Trustee
dim objWMIService
dim colItems
dim item
dim objFSO
Set objWMIService = GetObject("winmgmts:\.
ootcimv2")
Set colItems = objWMIService.ExecQuery ("Select * from Win32_Account Where Name = '" & strUserName & "' and Domain = '" & strDomainName & "'")
If colItems.count = 1 Then
For Each item in colItems
set objUserTrustee = item
Next
End If
Set objFSO = CreateObject("Scripting.FileSystemObject")
If objFSO.FolderExists(strPath) Then
SetPermissionToFolder objService,strPath,objUserTrustee
End If
End Function
Private Function SetPermissionToFolder(byref Service,strPath,byRef UserTrustee)
'Declares main variables
dim UserHasPermission
dim NewDACL()
' Init data
UserHasPermission = false
redim NewDACL(0)
'Retrieve security descriptor for the folder
dim wmiFileSecSetting
dim OldSD
dim retVal
dim DACL
dim wmiAce
dim Trustee
dim i
dim NewSD
i=0
Set wmiFileSecSetting = GetObject("winmgmts:Win32_LogicalFileSecuritySetting.path='" & strPath & "'")
retVal = wmiFileSecSetting.GetSecurityDescriptor(OldSD)
' Retrieve the DACL array of Win32_ACE objects.
DACL = OldSD.DACL
For each wmiAce in DACL
' Get Win32_Trustee object from ACE
Set Trustee = wmiAce.Trustee
If (Trustee.SIDString = UserTrustee.SID) Then
ConfigureACE wmiAce
UserHasPermission = true
End If
redim preserve NewDACL(i)
set NewDACL(i) = wmiAce
i = i + 1
Next
If not UserHasPermission Then
dim newACE
set newACE = Service.Get("Win32_Ace").Spawninstance_()
newACE.Trustee = UserTrustee
ConfigureACE newACE
i = ubound(NewDACL)+1
redim preserve NewDACL(i)
set NewDACL(i) = newACE
End If
OldSD.DACL = NewDACL
retVal = wmiFileSecSetting.SetSecurityDescriptor(OldSD)
End Function
Private Sub ConfigureACE (byref wmiAce)
wmiAce.AccessMask = 2032127' Full control
wmiAce.AceType = 0' ALLOW
wmiAce.AceFlags = 3' OBJECT_INHERIT_ACE + CONTAINER_INHERIT_ACE
End Sub