1

我正在编写一个 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)

所以我使用了一些正则表达式替换首先删除了路径,并将所有双空格删除为一个空格,并忽略字符串中的第一个字符(这是一个空格),因为我不能只删除所有空格因为“域管理员”中有一个空格。

strPermission = Replace(strPermission,strFolderPathRaw, "")

objRegEx.Pattern = "[ ]{2,}"
strPermission = objRegEx.Replace(strPermission, " ")

objRegEx.Pattern = "^.{1}([^\n\r:]+:+.+)$"
strPermission = objRegEx.Replace(strPermission, "$1")

我认为非常聪明......直到一些海外分享破坏了我的计划,并且文件夹名称如下:Telegramm für X

当我检查 StdOut 时,我看到的是:Telegramm f?r X

因此没有匹配,没有替换/删除,诅咒。经过许多小时的谷歌搜索和反复试验,我仍然没有解决这个问题。有没有其他人遇到过这个并得到一个有效的解决方案/修复?谢谢你。

4

0 回答 0