Дать пользователю права на каталог (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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.571 из 5
Похожие ответы