欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

利用PowerShell一鍵下載Nuget某個(gè)包的所有版本

 更新時(shí)間:2024年12月11日 08:41:38   作者:丁雙磊  
這篇文章主要為大家詳細(xì)介紹了如何利用PowerShell一鍵下載Nuget某個(gè)包的所有版本,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以參考一下

一轉(zhuǎn)眼好幾年沒(méi)有寫(xiě)博客了,來(lái)博客園冒個(gè)泡,最近由于工作需要,內(nèi)網(wǎng)辦公,幸運(yùn)的是只需要上傳一個(gè)*.nupkg一個(gè)包信息就可以在私有nuget下載到了,下面就用PowerShell編寫(xiě)下載腳本,需要注意的是PowerShell后綴ps1(最后一個(gè)數(shù)字1),以Newtonsoft.Json為例:

下載地址

# 設(shè)置NuGet包列表的URL
$packageName = "Newtonsoft.Json"
$targetHttp = "https://www.nuget.org/packages/"
$targetUrl = "{0}{1}" -f $targetHttp, $packageName

保存地址

# 設(shè)置保存已下載包的目錄
$outputDirectory = "D:\nuget_packages"
if (-not (Test-Path $outputDirectory)) {
    New-Item -Path $outputDirectory -ItemType Directory
}

 解析下載版本地址

定義下載需要解析的包地址

# 定義下載前綴
$httpPrefix = "https://www.nuget.org/api/v2/package/"
# 下載html文件內(nèi)容
$htmlContent = Invoke-WebRequest -Uri $targetUrl -UseBasicParsing | Select-Object -ExpandProperty Content
# 匹配標(biāo)簽
$pattern = "<.*?>"
$matches = [regex]::Matches($htmlContent, $pattern)

獲取所有a標(biāo)簽

foreach ($match in $matches) {
  $tag = $match.Value
  # 獲取a標(biāo)簽
  if ($tag -like "<a href=*") {
    Write-Host $tag
  }
}

 輸出結(jié)果

<a href="#" rel="external nofollow"  rel="external nofollow"  id="skipToContent" class="showOnFocus" title="Skip To Content">
...
<a href="/packages/System.Xml.XmlDocument/" rel="external nofollow" >
<a href="/packages/Newtonsoft.Json/13.0.3" rel="external nofollow"  rel="external nofollow"  title="13.0.3">
...
<a href="/packages/Newtonsoft.Json/3.5.8" rel="external nofollow"  rel="external nofollow"  title="3.5.8">
<a href="/stats/packages/Newtonsoft.Json?groupby=Version" rel="external nofollow"  rel="external nofollow"  title="Package Statistics">
...
<a href="/packages/Newtonsoft.Json/13.0.3/ReportAbuse" rel="external nofollow"  rel="external nofollow"  title="Report the package as abusive">
<a href="/packages/Newtonsoft.Json/13.0.3/ContactOwners" rel="external nofollow"  rel="external nofollow"  title="Ask the package owners a question">
...

觀察上一步結(jié)果可以看出來(lái)每一個(gè)版本都有title,且title內(nèi)容是版本

# 獲取含有title的a標(biāo)簽
if ($tag -like "*title=*") {
  Write-Host $tag        
}

 輸出結(jié)果

<a href="#" rel="external nofollow"  rel="external nofollow"  id="skipToContent" class="showOnFocus" title="Skip To Content">
<a href="/packages/Newtonsoft.Json/13.0.3" rel="external nofollow"  rel="external nofollow"  title="13.0.3">
...
<a href="/packages/Newtonsoft.Json/3.5.8" rel="external nofollow"  rel="external nofollow"  title="3.5.8">
<a href="/stats/packages/Newtonsoft.Json?groupby=Version" rel="external nofollow"  rel="external nofollow"  title="Package Statistics">
<a href="https://www.newtonsoft.com/json" rel="external nofollow"  data-track="outbound-project-url" title="Visit the project site to learn more about this package" >
...
<a href="/packages/Newtonsoft.Json/13.0.3/ReportAbuse" rel="external nofollow"  rel="external nofollow"  title="Report the package as abusive">
<a href="/packages/Newtonsoft.Json/13.0.3/ContactOwners" rel="external nofollow"  rel="external nofollow"  title="Ask the package owners a question">
<a href="/packages?q=Tags%3A%22json%22" rel="external nofollow"  title="Search for json" class="tag">

接著上一步的結(jié)果繼續(xù)過(guò)濾

# 截取href的內(nèi)容
$substr = $tag.Substring(9)
if ($substr -like "/packages/*") {
    Write-Host $substr
}

輸出結(jié)果

/packages/Newtonsoft.Json/13.0.3" title="13.0.3">
...
/packages/Newtonsoft.Json/3.5.8" title="3.5.8">
/packages/Newtonsoft.Json/13.0.3/ReportAbuse" title="Report the package as abusive">
/packages/Newtonsoft.Json/13.0.3/ContactOwners" title="Ask the package owners a question">

有完沒(méi)完,又來(lái)了?看上面的結(jié)果就還差過(guò)濾兩個(gè)不相關(guān)的了,

 獲取href完整內(nèi)容

# 查找第一個(gè)雙引號(hào)的位置
$index = $substr.IndexOf('"')
# 獲取部分/packages/Newtonsoft.Json/13.0.3
$substr = $substr.Substring(0,$index)

剔除最后兩個(gè)版本無(wú)關(guān)的a標(biāo)簽

# 排除報(bào)告濫用a標(biāo)簽
if ($substr -notlike "*/ReportAbuse") {
  # 排除聯(lián)系作者a標(biāo)簽
  if ($substr -notlike "*/ContactOwners") {
    # 匹配版本
    $endIndex = $substr.LastIndexOf('/')
    $startPackageIndex = $endIndex + 1
    $packageVersion = $substr.Substring($startPackageIndex)
  }
}

Invoke-WebRequest命令下載并保存文件

# 下載地址nupkg
$packageUrl = "{0}{1}/{2}" -f $httpPrefix,$packageName,$packageVersion
# 生成保存文件的路徑
$packageFile = Join-Path -Path $outputDirectory -ChildPath "$packageName.$packageVersion.nupkg"
# 下載 .nupkg 文件
Write-Host "Downloading $packageName version $packageVersion from $packageUrl"
Invoke-WebRequest -Uri $packageUrl -OutFile $packageFile

全部代碼

# 設(shè)置NuGet包列表的URL
$packageName = "Newtonsoft.Json"
$targetHttp = "https://www.nuget.org/packages/"
$targetUrl = "{0}{1}" -f $targetHttp, $packageName
# 設(shè)置保存已下載包的目錄
$outputDirectory = "D:\nuget_packages"
if (-not (Test-Path $outputDirectory)) {
    New-Item -Path $outputDirectory -ItemType Directory
}
# 定義下載前綴
$httpPrefix = "https://www.nuget.org/api/v2/package/"
# 下載html文件內(nèi)容
$htmlContent = Invoke-WebRequest -Uri $targetUrl -UseBasicParsing | Select-Object -ExpandProperty Content
# 匹配標(biāo)簽
$pattern = "<.*?>"
$matches = [regex]::Matches($htmlContent, $pattern)
foreach ($match in $matches) {
    $tag = $match.Value
        # 獲取a標(biāo)簽
        if ($tag -like "<a href=*") {
            # 獲取含有title的a標(biāo)簽
            if ($tag -like "*title=*")
            {
                # 截取href的內(nèi)容
                $substr = $tag.Substring(9)
                if ($substr -like "/packages/*")
                {
                    # 查找第一個(gè)雙引號(hào)的位置
                    $index = $substr.IndexOf('"')
                    # 獲取部分/packages/Newtonsoft.Json/13.0.3
                    $substr = $substr.Substring(0,$index)
                    # 排除報(bào)告濫用a標(biāo)簽
                    if ($substr -notlike "*/ReportAbuse")
                    {
                        # 排除聯(lián)系作者a標(biāo)簽
                        if ($substr -notlike "*/ContactOwners")
                        {
                            # 匹配版本
                            $endIndex = $substr.LastIndexOf('/')
                            $startPackageIndex = $endIndex + 1
                            $packageVersion = $substr.Substring($startPackageIndex)
                            # 下載地址nupkg
                            $packageUrl = "{0}{1}/{2}" -f $httpPrefix,$packageName,$packageVersion
                            # 生成保存文件的路徑
                            $packageFile = Join-Path -Path $outputDirectory -ChildPath "$packageName.$packageVersion.nupkg"
                            # 下載 .nupkg 文件
                            Write-Host "Downloading $packageName version $packageVersion from $packageUrl"
              Invoke-WebRequest -Uri $packageUrl -OutFile $packageFile
                            
                        }
                        
                    }
                    
                }
                
            }
            
        }
}
# 執(zhí)行結(jié)束暫停
$null = Read-Host

以上就是利用PowerShell一鍵下載Nuget某個(gè)包的所有版本的詳細(xì)內(nèi)容,更多關(guān)于PowerShell下載Nuget包所有版本的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論