vbs通過WMI修改文件文件夾的NTFS權限
來源:易賢網(wǎng) 閱讀:1652 次 日期:2014-05-09 16:38:26
溫馨提示:易賢網(wǎng)小編為您整理了“vbs通過WMI修改文件文件夾的NTFS權限”,方便廣大網(wǎng)友查閱!

使用WMI修改文件文件夾的NTFS權限實現(xiàn)方法,需要的朋友可以參考下

使用WMI修改文件文件夾的NTFS權限, 代碼:

代碼如下:

strUser = "guests"

strPath = "D:\\abc.txt"

RetVal = AddPermission(strUser,strPath,"R",True)

'-------------------------------------------------------------------------

'用于給文件和文件夾添加一條權限設置.返回值: 0-成功,1-賬戶不存在,2-路徑不存在

'strUser表示用戶名或組名

'strPath表示文件夾路徑或文件路徑

'strAccess表示允許權限設置的字符串,字符串中帶有相應字母表示允許相應權限: R-讀,C-讀寫,F-完全控制

'blInherit表示是否繼承父目錄權限.True為繼承,False為不繼承

Function AddPermission(strUser,strPath,strAccess,blInherit)

Set objWMIService = GetObject("winmgmts:\\.\root\Cimv2")

Set fso = CreateObject("Scripting.FileSystemObject")

'得到Win32_SID并判斷用戶/組/內置賬戶是否存在

Set colUsers = objWMIService.ExecQuery("SELECT * FROM Win32_Account WHERE Name='"&strUser&"'")

If colUsers.count<>0 Then

For Each objUser In colUsers

strSID = objUser.SID

Next

Else

AddPermission = 1

Exit Function

End If

Set objSID = objWMIService.Get("Win32_SID.SID='"&strSID&"'")

'判斷文件/文件夾是否存在

pathType = ""

If fso.fileExists(strPath) Then pathType = "FILE"

If fso.folderExists(strPath) Then pathType = "FOLDER"

If pathType = "" Then

AddPermission = 2

Exit Function

End If

'設置Trustee

Set objTrustee = objWMIService.Get("Win32_Trustee").SpawnInstance_()

objTrustee.Domain = objSID.ReferencedDomainName

objTrustee.Name = objSID.AccountName

objTrustee.SID = objSID.BinaryRepresentation

objTrustee.SidLength = objSID.SidLength

objTrustee.SIDString = objSID.Sid

'設置ACE

Set objNewACE = objWMIService.Get("Win32_ACE").SpawnInstance_()

objNewACE.Trustee = objTrustee

objNewACE.AceType = 0

If InStr(UCase(strAccess),"R") > 0 Then objNewACE.AccessMask = 1179817

If InStr(UCase(strAccess),"C") > 0 Then objNewACE.AccessMask = 1245631

If InStr(UCase(strAccess),"F") > 0 Then objNewACE.AccessMask = 2032127

If pathType = "FILE" And blInherit = True Then objNewACE.AceFlags = 16

If pathType = "FILE" And blInherit = False Then objNewACE.AceFlags = 0

If pathType = "FOLDER" And blInherit = True Then objNewACE.AceFlags = 19

If pathType = "FOLDER" And blInherit = False Then objNewACE.AceFlags = 3

'設置SD

Set objFileSecSetting = objWMIService.Get("Win32_LogicalFileSecuritySetting.Path='"&strPath&"'")

Call objFileSecSetting.GetSecurityDescriptor(objSD)

blSE_DACL_AUTO_INHERITED = True

If (objSD.ControlFlags And &H400) = 0 Then

blSE_DACL_AUTO_INHERITED = False

objSD.ControlFlags = (objSD.ControlFlags Or &H400)

'自動繼承位置位,如果是剛創(chuàng)建的目錄或文件該位是不置位的,需要置位

End If

If blInherit = True Then

objSD.ControlFlags = (objSD.ControlFlags And &HEFFF)

'阻止繼承復位

Else

objSD.ControlFlags = (objSD.ControlFlags Or &H1400)

'阻止繼承位置位,自動繼承位置位

End If

objOldDacl = objSD.Dacl

ReDim objNewDacl(0)

Set objNewDacl(0) = objNewACE

If IsArray(objOldDacl) Then

'權限為空時objOldDacl不是集合不可遍歷

For Each objACE In objOldDacl

If (blSE_DACL_AUTO_INHERITED=False And blInherit=True) Or ((objACE.AceFlags And 16)>0 And (blInherit=True) Or (LCase(objACE.Trustee.Name)=LCase(strUser))) Then

'Do nothing

'當自動繼承位置位為0時即使時繼承的權限也會顯示為非繼承,這時所有權限都不設置

'當自動繼承位置位為0時,在繼承父目錄權限的情況下不設置繼承的權限.賬戶和需要加權限的賬戶一樣時不設置權限

Else

Ubd = UBound(objNewDacl)

ReDim preserve objNewDacl(Ubd+1)

Set objNewDacl(Ubd+1) = objACE

End If

Next

End If

objSD.Dacl = objNewDacl

'提交設置修改

Call objFileSecSetting.SetSecurityDescriptor(objSD)

AddPermission = 0

Set fso = Nothing

End Function

更多信息請查看IT技術專欄

更多信息請查看腳本欄目
易賢網(wǎng)手機網(wǎng)站地址:vbs通過WMI修改文件文件夾的NTFS權限

2025國考·省考課程試聽報名

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 加入群交流 | 手機站點 | 投訴建議
工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:526150442(9:00—18:00)版權所有:易賢網(wǎng)