概述如何使用WMI更改文件权限?
我想要做的是相当于这里描述的脚本。 基本上,我想取得文件的所有权,并将权限设置为OWNER /完全控制。
在我看来,从VBS脚本使用WMI是最便携的方式。 也就是说,我想避免xcacls,icacls和其他工具,要么下载,要么只支持某些版本的windows。
search后,我发现这个代码取得所有权:
\’connect to WMI namespace on local machine Set obJservices = Getobject(\”winmgmts:{impersonationLevel=impersonate}\”) \’get a reference to data file strfile = Wscript.Arguments(0) Set objfile = obJservices.Get(\”CIM_Datafile.name=\’\” & strfile & \”\’\”) If objfile.TakeOwnership = 0 Then Wscript.Echo \”file ownership successfully changed\” Else Wscript.Echo \”file ownership transfer operation\” End If
我仍然缺less的部分是设置权限,并使其工作在相对path。
如何将VB脚本的输出写入文件?
从组合键创build桌面快捷方式?
如何更新windowsregistry每2分钟?
从WMI Execquery获取第一条logging
从相对path启动可执行文件
VBScript – 检查是否启用了防火墙
如何自动closuresVBScript成千上万的MsgBox的
按数字sorting文本文件的内容
确定默认程序打开给定的文件扩展名 – VBS
使用VB脚本压缩文件与睡眠
由于您已经在CIM_Datafile类中使用了CIM_Datafile ,我假设您可以使用ChangeSecurityPermissions来更改权限,这是在同一个类中。
在使用它们之前,您可以使用GetabsolutePathname将相对路径转换为绝对路径。
从ho1的回答中得知,我搜索了一些,最终得出这个结论:
此脚本查找当前用户的SID,然后获取所有权并将argv [0]中给出的文件的权限仅更改为当前用户的完全控制。
Set objWMI = Getobject(\”winmgmts:{impersonationLevel=impersonate}\”) Function GetCurrentUserSID \’ Get user name \’ Set colComputer = objWMI.Execquery(\”Select * from Win32_ComputerSystem\”) \’ LooPing over one item \’ For Each objComputer in colComputer currentUsername = objComputer.Username Next Set AccountSIDs = Getobject(\”Winmgmts:\”).InstancesOf(\”Win32_AccountSID\”) For Each AccountSID In AccountSIDs AccountKey = AccountSID.Element Set objAccount = Getobject(\”Winmgmts:\”+AccountKey) strname = objAccount.Domain & \”\” & objAccount.name If strname = currentUsername Then \’ that\’s it SIDKey = AccountSID.Setting Set SID = Getobject(\”Winmgmts:\” + SIDKey) GetCurrentUserSID = SID.BinaryRepresentation Exit For End If Next End Function Function limitPermissions(path,SID) Set objfile = objWMI.Get(\”CIM_Datafile.name=\’\” & path & \”\’\”) Set Trustee = Getobject(\”Winmgmts:Win32_Trustee\”).SpawnInstance_ Trustee.SID = SID Set ACE = getobject(\”Winmgmts:Win32_Ace\”).Spawninstance_ ACE.AccessMask = 2032127 \’ Full Control ACE.AceFlags = 3 ACE.AceType = 0 ACE.Trustee = Trustee Set obJsecDescriptor = Getobject(\”Winmgmts:Win32_SecurityDescriptor\”).SpawnInstance_ obJsecDescriptor.DACL = Array(ACE) objfile.ChangeSecurityPermissions obJsecDescriptor,4 End Function Function TakeOwnership(path) Set objfile = objWMI.Get(\”CIM_Datafile.name=\’\” & path & \”\’\”) TakeOwnership = objfile.TakeOwnership End Function \’ Main \’ strfilename = Wscript.Arguments(0) Set fso = CreateObject(\”Scripting.fileSystemObject\”) path = fso.GetabsolutePathname(strfilename) SID = GetCurrentUserSID TakeOwnership path limitPermissions path,SID
总结
以上是内存溢出为你收集整理的如何使用WMI更改文件权限?全部内容,希望文章能够帮你解决如何使用WMI更改文件权限?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
请登录后查看评论内容