主頁(yè) > 知識(shí)庫(kù) > vbs通過(guò)WMI修改文件文件夾的NTFS權(quán)限

vbs通過(guò)WMI修改文件文件夾的NTFS權(quán)限

熱門標(biāo)簽:智能手機(jī) 銀行業(yè)務(wù) 鐵路電話系統(tǒng) 美圖手機(jī) 檢查注冊(cè)表項(xiàng) 網(wǎng)站文章發(fā)布 服務(wù)器配置 呼叫中心市場(chǎng)需求

使用WMI修改文件文件夾的NTFS權(quán)限, 代碼:

復(fù)制代碼 代碼如下:

strUser = "guests"
strPath = "D:\\abc.txt"
RetVal = AddPermission(strUser,strPath,"R",True)

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

'用于給文件和文件夾添加一條權(quán)限設(shè)置.返回值: 0-成功,1-賬戶不存在,2-路徑不存在
'strUser表示用戶名或組名
'strPath表示文件夾路徑或文件路徑
'strAccess表示允許權(quán)限設(shè)置的字符串,字符串中帶有相應(yīng)字母表示允許相應(yīng)權(quán)限: R-讀,C-讀寫(xiě),F-完全控制
'blInherit表示是否繼承父目錄權(quán)限.True為繼承,False為不繼承

Function AddPermission(strUser,strPath,strAccess,blInherit)
        Set objWMIService = GetObject("winmgmts:\\.\root\Cimv2")
        Set fso = CreateObject("Scripting.FileSystemObject")
        '得到Win32_SID并判斷用戶/組/內(nèi)置賬戶是否存在
        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
        '設(shè)置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
        '設(shè)置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
        '設(shè)置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)               
    '自動(dòng)繼承位置位,如果是剛創(chuàng)建的目錄或文件該位是不置位的,需要置位
        End If
        If blInherit = True Then
                objSD.ControlFlags = (objSD.ControlFlags And HEFFF)       
    '阻止繼承復(fù)位
        Else
                objSD.ControlFlags = (objSD.ControlFlags Or H1400)               
    '阻止繼承位置位,自動(dòng)繼承位置位
        End If
        objOldDacl = objSD.Dacl
        ReDim objNewDacl(0)
        Set objNewDacl(0) = objNewACE
        If IsArray(objOldDacl) Then               
  '權(quán)限為空時(shí)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
                                '當(dāng)自動(dòng)繼承位置位為0時(shí)即使時(shí)繼承的權(quán)限也會(huì)顯示為非繼承,這時(shí)所有權(quán)限都不設(shè)置
                                '當(dāng)自動(dòng)繼承位置位為0時(shí),在繼承父目錄權(quán)限的情況下不設(shè)置繼承的權(quán)限.賬戶和需要加權(quán)限的賬戶一樣時(shí)不設(shè)置權(quán)限
                        Else
                                Ubd = UBound(objNewDacl)
                                ReDim preserve objNewDacl(Ubd+1)
                                Set objNewDacl(Ubd+1) = objACE
                        End If
                Next
        End If

        objSD.Dacl = objNewDacl
        '提交設(shè)置修改
        Call objFileSecSetting.SetSecurityDescriptor(objSD)
        AddPermission = 0
        Set fso = Nothing
End Function

您可能感興趣的文章:
  • VB中使用WMI獲取系統(tǒng)硬件和軟件有關(guān)信息
  • VBS調(diào)用WMI遍歷搜索硬盤文件并計(jì)數(shù)的方法
  • WMI StdRegProv 通過(guò)wmi操作注冊(cè)表的vbscript實(shí)現(xiàn)代碼 (本地或遠(yuǎn)程)
  • VBS通過(guò)WMI監(jiān)視注冊(cè)表變動(dòng)的代碼
  • VBS通過(guò)WMI獲取CPU使用率的代碼
  • 將WMI中的DateTime類型轉(zhuǎn)換成VBS時(shí)間的函數(shù)代碼
  • VBS調(diào)用WMI實(shí)現(xiàn)搜索硬盤mp3文件
  • Rcmd.vbs [Remote Cmd with wmi]遠(yuǎn)程腳本
  • VBS調(diào)用WMI快速關(guān)閉IE的腳本
  • VBS腳本使用WMI操作注冊(cè)表的代碼
  • vbs wmi獲取電腦硬件信息實(shí)例
  • 初窺WMI_Vbs腳本編程簡(jiǎn)明教程補(bǔ)充讀物
  • 使用WMI得到計(jì)算機(jī)的信息

標(biāo)簽:河南 紅河 長(zhǎng)治 樂(lè)山 沈陽(yáng) 滄州 上海 新疆

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《vbs通過(guò)WMI修改文件文件夾的NTFS權(quán)限》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266