我們最近被迫轉移到全球一半的新域名服務器。這可能看起來並不是什麼大的改變,但我們經常運行的一個流程突然間形成了一個2秒命令到一個5分鐘命令。複製像XCopy這樣的ACL信息
原因?我們正在根據「模板」目錄結構更新許多目錄的權限。
我們發現XCOPY可以在同一個老兩秒的窗口中更新大部分這些設置。剩下的設置當然會被關閉。
我想弄清楚的是,XCopy如何更快地實現.NET安全類本應該執行的操作?顯然我錯過了一些東西。
複製目錄的ACL信息而不ping(或最小程度地ping)域/ Active Directory服務器的最佳方法是什麼?
這是我有:
...
DirectorySecurity TemplateSecurity = new DirectorySecurity(TemplateDir, AccessControlSections.All);
...
public static void UpdateSecurity(string destination, DirectorySecurity TemplateSecurity)
{
DirectorySecurity dSecurity = Directory.GetAccessControl(destination);
// Remove previous security settings. (We have all we need in the other TemplateSecurity setting!!)
AuthorizationRuleCollection acl_old = dSecurity.GetAccessRules(true, true, typeof(NTAccount));
foreach (FileSystemAccessRule ace in acl_old)
{
// REMOVE IT IF YOU CAN... if you can't don't worry about it.
try
{
dSecurity.RemoveAccessRule(ace);
}
catch { }
}
// Remove the inheritance for the folders...
// Per the business unit, we must specify permissions per folder.
dSecurity.SetAccessRuleProtection(true, true);
// Copy the permissions from TemplateSecurity to Destination folder.
AuthorizationRuleCollection acl = TemplateSecurity.GetAccessRules(true, true, typeof(NTAccount));
foreach (FileSystemAccessRule ace in acl)
{
// Set the existing security.
dSecurity.AddAccessRule(ace);
try
{
// Remove folder inheritance...
dSecurity.AddAccessRule(new FileSystemAccessRule(
ace.IdentityReference, ace.FileSystemRights,
InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
PropagationFlags.None,
ace.AccessControlType));
}
catch { }
}
// Apply the new changes.
Directory.SetAccessControl(destination, dSecurity);
}