使用VB.net - 从GitLab中提取文件

时间:2018-06-08 15:22:59

标签: vb.net powershell gitlab

正如标题所暗示的那样,我正在寻找一种使用VB.net(2017)从私有GitLab仓库中提取特定文件的方法。

我有一个我正在编写的应用程序,它将调用某些PowerShell脚本。我和其他一些用户一起编写脚本,所以我们使用GitLab作为这些脚本的存储库。

我们希望应用程序在应用程序打开时从GitLab中提取最新版本的脚本,然后从应用程序中调用脚本。

我完成了所有工作,但从GitLab下载脚本除外。

1 个答案:

答案 0 :(得分:0)

因此,我在这里发布答案,以防万一其他人有相同的问题。实际上,我很容易就能做到这一点。

首先,您必须生成一个专用令牌。为此,有很多演练,所以我在这里不再赘述。

接下来,您必须获取要下载的原始文件的地址。您可以通过在GitLab中打开文件来获得此文件,然后在窗口右上角的“打开原始文件”按钮打开原始页面。
See Image Here

从地址栏中获取该网址。一旦有了这些,就可以使用VB.net将文件缩小到所需的所有位置。

您必须获取原始文件的地址,假设它是“ https://gitlab.com/CompanyName/raw/master/folder/filename.ps1”,然后使用您的私人令牌附加?,所以它看起来像这样:“ https://gitlab.com/CompanyName/raw/master/folder/filename.ps1?private_token=MyPrivateToken”并使用卷发(通过Powershell)来获得它。

我的代码中已经有一个功能可以运行Powershell脚本(使用代码,我相信我离开了这个网站...忘记了确切的位置),就像这样:

    Private Function RunScript(ByVal scriptText As String) As String
    ' Takes script text as input and runs it, then converts
    ' the results to a string to return to the user
    ' create Powershell runspace
    Dim MyRunSpace As Runspace = RunspaceFactory.CreateRunspace()

    ' open it
    MyRunSpace.Open()

    ' create a pipeline and feed it the script text
    Dim MyPipeline As Pipeline = MyRunSpace.CreatePipeline()

    MyPipeline.Commands.AddScript(scriptText)

    ' add an extra command to transform the script output objects into nicely formatted strings
    ' remove this line to get the actual objects that the script returns. For example, the script
    ' "Get-Process" returns a collection of System.Diagnostics.Process instances.
    MyPipeline.Commands.Add("Out-String")

    ' execute the script
    Dim results As Collection(Of PSObject) = MyPipeline.Invoke()

    ' close the runspace
    MyRunSpace.Close()

    ' convert the script result into a single string
    Dim MyStringBuilder As New StringBuilder()

    For Each obj As PSObject In results
        MyStringBuilder.AppendLine(obj.ToString())
    Next

    ' return the results of the script that has
    ' now been converted to text
    Return MyStringBuilder.ToString()

End Function

现在,我可以使用如下函数调用curl命令:

RunScript("curl https://gitlab.com/CompanyName/raw/master/folder/filename.ps1?private_token=MyPrivateToken -outfile C:\DownloadFolder\FileName.ps1")

就是这样!任何时候需要获取文件时,您都可以简单地获取原始文件的位置并修改函数调用以反映新地址并获取它。