我正在编写一个vbscript来整理各种Windows文件共享的权限,并遇到了一个我还没有克服的问题。
这部分脚本首先运行一个基本的icacls来拉回路径的当前权限(从读取文本文件获得(是unicode,是的,我有TriStateTrue设置),可以是文件夹或文件(我稍后会在剧本中处理这个问题。)
strFolderPath = chr(34) & strFolderPathRaw & chr(34)
Set icacls = oshell.Exec("icacls " & strFolderPath)
Do While icacls.Status = 0
WScript.Sleep 100
Loop
'Process through permissions for Folder Path
Do Until icacls.StdOut.AtEndOfStream
strPermission = icacls.StdOut.ReadLine
etc.
现在,如果你运行icacls,你会知道第一行包含你刚给它的路径,然后是第一个ACL条目,下面的条目只是它们自己但是缩进了空格以匹配路径的长度,例如
D:\Folder\Folder\File.doc NT AUTHORITY\SYSTEM:(F)
DOMAIN\Domain Admins:(F)
D:\Folder\Folder\Folder\File.doc NT AUTHORITY\SYSTEM:(F)
DOMAIN\Domain Admins:(F)
所以我使用了一些正则表达式替换首先删除了路径,并将所有双空格切除到一个空格,并忽略字符串中的第一个字符(这是一个空格),因为我不能只是删除所有空格,因为“Domain Admins”中有空格。
strPermission = Replace(strPermission,strFolderPathRaw, "")
objRegEx.Pattern = "[ ]{2,}"
strPermission = objRegEx.Replace(strPermission, " ")
objRegEx.Pattern = "^.{1}([^\n\r:]+:+.+)$"
strPermission = objRegEx.Replace(strPermission, "$1")
我觉得很聪明......直到一些海外股票破坏了我的计划,并且文件夹名称如下: TelegrammfürX
当我检查StdOut时,我看到它反而: Telegramm f?r X
因此没有匹配,没有替换/删除,诅咒。经过许多小时的谷歌搜索和试用错误,我还没有解决这个问题。有没有其他人遇到这个并得到一个有效的解决方案/修复?谢谢。