从C#控制VisualSVN服务器

本文关键字:服务器 VisualSVN 控制 | 更新日期: 2023-09-27 18:30:14

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

从C#控制VisualSVN服务器

更新日期:2015年9月3日

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

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

例如,

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

    New-SvnReposiory MySuperRepo

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

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

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

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

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

    Measure-SvnRepository MySuperRepo

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

    Test-SvnRepository MySuperRepo

    还有更多

有关更多信息和Cmdlet的完整列表,请阅读文章VisualSVN Server PowerShell Cmdlet Reference。


VisualSVN服务器可以通过WMI(Windows管理Instrumentation)接口。

描述VisualSVN服务器接口的MOF文件位于计算机上的%VisualSVN_Server%''WMI中,其中VisualSVN服务器已安装。使用此文件作为参考,您可以编写一个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("内置''用户")提供对存储库"测试"的读/写访问权限。仅供参考: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年10月2日:

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

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

        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);