さまざまな Windows ファイル共有のアクセス許可を整理するための vbscript を作成していて、まだ解決できていない問題に遭遇しました。
スクリプトのこの部分では、最初に基本的な 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 であることがわかりました。
したがって、一致せず、置き換え/削除されず、呪われます。何時間もグーグルで試行錯誤した後も、私はまだこの問題を克服できていません。他の誰かがこれに遭遇し、実用的な解決策/修正を得ましたか? ありがとうございました。