AU3如何删除没有权限的文件夹及子文件(夹)
本帖最后由 ssjoe 于 2012-4-28 19:03 编辑如图,
谢谢各位的帮忙,因不是一台机子的问题,机子实在太多了,手动可以修改到,但是太麻烦,批处理是做不到的,所以想问问AU3是否有权限做到! 你可以调用批处理命来做呢 回复 2# f4李文杨
楼上前辈,没有权限的也可以吗? 如果文件不多的话,建议自己手工操作哦 回复 1# ssjoe
自然是先修改权限, 成功后再删除!
您应该搜索 "权限 修改" 本帖最后由 pusofalse 于 2012-4-27 23:29 编辑
只要令牌中还有恢复(SeRestoreName)和取得所有者(SeTakeOwnershipName)的特权,权限什么的都可以无视,一般管理员用户的令牌中总是有这两个特权。
如果手动修改,先将所有者改为Administrators,再重新打开安全属性页修改Everyone为完全控制,并继承到所有子对象,这样就可以删除了。AU3代码:
#include <lsasecur.au3>
Const $sFilePath = @ScriptDir & "\test\"
Local $aPriv = [[$SE_RESTORE_PRIV, $SE_PRIV_ENABLED], [$SE_TAKE_OWNERSHIP_PRIV, $SE_PRIV_ENABLED]]
Local $hToken = _SeOpenProcessToken(-1)
_SeAdjustTokenPrivs($hToken, $aPriv)
_SeCloseHandle($hToken)
Local $pTrustee = _SeLookupAccountName("Everyone")
Local $pDacl = _SeSetEntriesInAcl1($pTrustee, $SE_GENERIC_ALL, $SE_GRANT_ACCESS, BitOR($SE_OBJECT_INHERIT_ACE, $SE_CONTAINER_INHERIT_ACE, $SE_NO_PROPAGATE_INHERIT_ACE))
Local $pSecurity = _SeInitSecurityDescriptor()
_SeSetSecurityDescriptorDacl($pSecurity, $pDacl)
_SeSetSecurityDescriptorOwner($pSecurity, $pTrustee)
If _SeSetFileSecurity($sFilePath, $SE_INFO_OWNER, $pSecurity) Then
If _SeSetFileSecurity($sFilePath, $SE_INFO_DACL, $pSecurity) Then
MsgBox(48, "OK", _SeFormatMsg("", 0))
Else
MsgBox(48, "Error", _SeFormatMsg("Setting DACL"))
EndIf
Else
MsgBox(48, "Error", _SeFormatMsg("Setting Owner"))
EndIf
_SeHeapFree($pSecurity)
_SeHeapFree($pTrustee)
_SeLocalFree($pDacl) 回复 6# pusofalse
P版的东西就是如此难看懂,所以无法修改为继承到所有子对象,现在的只可以支持当前文件夹的删除,如果文件夹内还有同样没有权限的文件夹子文件,就无法删除了!请看子文件(夹)附上图片。
回复 6# pusofalse
P版,能否帮忙解决一下这个继承到所有子对象的问题,实在是找了很多方法也没法解决,因为不是一台机子出现这样的问题,数量比较多,人手解决会比较麻烦,希望P版能帮上这个忙,先谢谢了! 管理员批量后台删呢? 回复 9# ssjoe
指明每个IP下相对文件的路径,然后循环用FileRecycle或者FileDelete试试呢?之前我们公司一些公共电脑下的C:\Documents and Settings的配置文件太多太大的时候我记得我这样搞过 回复 11# 502762378
是因为没有权限,所以无法删除,现在就是想把继承到所有子对象的问题,P版给的源码是当前文件夹的! 回复 1# ssjoe
我也遇到过类似的问题,没有想到好的解决之道,只能用au3模拟键盘操作,稳定性不是很高,但是总比手动的要好的多 用windows的自带命令不是可以吗?cacls.exe
页:
[1]