8

我安装了 VisualSVN 服务器 2.5.4。我可以创建用户和存储库。我的问题是如何从 C# 创建/删除用户/存储库。有图书馆吗?

4

1 回答 1

12

2015 年 3 月 9 日更新

不再需要编写自定义 WMI 脚本;从 VisualSVN Server 3.4 开始可用的 PowerShell cmdlet 涵盖了大多数 Subversion 服务器管理和存储库管理用例。在https://www.visualsvn.com/server/features/powershell/阅读有关新功能的信息

VisualSVN Server 3.4 引入了 PowerShell 模块,为您提供了许多有用的 cmdlet。cmdlet 可用于本地或远程管理 VisualSVN 服务器及其存储库。这是VisualSVN Server PowerShell cmdlet 的完整参考

例如,

  • 您可以通过运行以下 PowerShell 命令来创建新的存储库MySuperRepo :

    New-SvnReposiory MySuperRepo

  • 您可以在存储库中创建项目结构

    New-SvnRepositoryItem MySuperRepo -Path /branches, /tags, /trunk -Type Folder

  • 您可以为 DOMAIN\Developers Active Directory 组帐户提供对新存储库的读/写访问权限

    Add-SvnAccessRule MyRepo -Path / -AccountName DOMAIN\Developers -Access ReadWrite

  • 您可以计算存储库在磁盘上的大小:

    Measure-SvnRepository MySuperRepo

  • 您可以验证存储库是否存在损坏:

    Test-SvnRepository MySuperRepo

    还有更多!

有关详细信息和 cmdlet 的完整列表,请阅读文章VisualSVN 服务器 PowerShell Cmdlet 参考


VisualSVN Server 可以通过 WMI(Windows Management Instrumentation)接口进行管理。

描述 VisualSVN 服务器界面的 MOF 文件位于安装了 VisualSVN 服务器的计算机上的%VISUALSVN_SERVER%\WMI中。使用此文件作为参考,您可以编写 C# 脚本来管理 VisualSVN 服务器。

请查看 MSDN 文章:http: //msdn.microsoft.com/en-us/library/bb404655

我包括以下示例供您参考:

  • 此 C# 代码将创建一个密码为“secret”的 Subversion 用户“user1”。

        ManagementClass userClass = new ManagementClass("root\\VisualSVN", "VisualSVN_User", null);
    
        // Obtain in-parameters for the method
        ManagementBaseObject inParams =
            userClass.GetMethodParameters("Create");
    
        // Add the input parameters.
        inParams["Name"] = "user1";
        inParams["Password"] = "secret";
    
        // Execute the method and obtain the return values.
        ManagementBaseObject outParams =
            userClass.InvokeMethod("Create", inParams, null);
    
  • 此 C# 代码将创建一个新的存储库“Repo1”。

        ManagementClass repoClass = new ManagementClass("root\\VisualSVN", "VisualSVN_Repository", null);
    
        // Obtain in-parameters for the method
        ManagementBaseObject inParams =
            repoClass.GetMethodParameters("Create");
    
        // Add the input parameters.
        inParams["Name"] = "Repo1";
    
        // Execute the method and obtain the return values.
        ManagementBaseObject outParams =
            repoClass.InvokeMethod("Create", inParams, null);
    
  • 此 C# 代码将为 SID S-1-5-32-545 ('BUILTIN\Users') 提供对存储库 'Test' 的读/写访问权限。仅供参考:AccessLevel 值如 MOF 中所述:“0 - 无访问权限,1 - 只读,2 - 读/写”

    ManagementClass userClass = new ManagementClass("root\\VisualSVN", "VisualSVN_WindowsAccount", null);                            
    ManagementClass authzClass = new ManagementClass("root\\VisualSVN", "VisualSVN_SecurityDescriptor", null);
    ManagementClass permClass = new ManagementClass("root\\VisualSVN", "VisualSVN_PermissionEntry", null);
    
    ManagementObject userObject = userClass.CreateInstance();
    userObject.SetPropertyValue("SID", "S-1-5-32-545");
    
    ManagementObject permObject = permClass.CreateInstance();
    permObject.SetPropertyValue("Account", userObject);
    permObject.SetPropertyValue("AccessLevel", 2);
    
    ManagementObject repo = new ManagementObject("VisualSVN_Repository.Name='Test'");
    
    ManagementBaseObject inParams =
        authzClass.GetMethodParameters("SetSecurity");
    
    inParams["Object"] = repo;
    inParams["Permissions"] = new object[] { permObject };
    
    ManagementBaseObject outParams =
        authzClass.InvokeMethod("SetSecurity", inParams, null);
    

于 2013 年 2 月 10 日更新:

WMI 架构已在 VisualSVN Server 2.6 中更改(和改进!)。简而言之,要在存储库路径上设置访问权限,您需要:

  • 创建VisualSVN_Repository指定存储库名称的类对象,
  • 创建VisualSVN_PermissionEntry条目对象指定帐户用户名和访问权限,
  • 在传递有效的存储库路径和 PermissionEntry 对象时调用SetSecurity方法。VisualSVN_Repository

        ManagementClass userClass = new ManagementClass("root\\VisualSVN", "VisualSVN_WindowsAccount", null);
        ManagementClass permClass = new ManagementClass("root\\VisualSVN", "VisualSVN_PermissionEntry", null);
        ManagementClass repoClass = new ManagementClass("root\\VisualSVN", "VisualSVN_Repository", null);
    
        ManagementObject userObject = userClass.CreateInstance();
        userObject.SetPropertyValue("SID", "S-1-5-32-545");
    
        ManagementObject permObject = permClass.CreateInstance();
        permObject.SetPropertyValue("Account", userObject);
        permObject.SetPropertyValue("AccessLevel", 2);
    
        ManagementObject repoObject = repoClass.CreateInstance();
        repoObject.SetPropertyValue("Name", "MyProject");
    
        ManagementBaseObject inParams =
            repoClass.GetMethodParameters("SetSecurity");
    
        inParams["Path"] = "/trunk";
        inParams["Permissions"] = new object[] { permObject };
    
        ManagementBaseObject outParams =
            repoObject.InvokeMethod("SetSecurity", inParams, null);
    
于 2012-04-05T13:57:21.763 回答