利用PowerShell一鍵下載Nuget某個包的所有版本
一轉(zhuǎn)眼好幾年沒有寫博客了,來博客園冒個泡,最近由于工作需要,內(nèi)網(wǎng)辦公,幸運的是只需要上傳一個*.nupkg一個包信息就可以在私有nuget下載到了,下面就用PowerShell編寫下載腳本,需要注意的是PowerShell后綴ps1(最后一個數(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 # 匹配標簽 $pattern = "<.*?>" $matches = [regex]::Matches($htmlContent, $pattern)
獲取所有a標簽
foreach ($match in $matches) {
$tag = $match.Value
# 獲取a標簽
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é)果可以看出來每一個版本都有title,且title內(nèi)容是版本
# 獲取含有title的a標簽
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ù)過濾
# 截取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">
有完沒完,又來了?看上面的結(jié)果就還差過濾兩個不相關(guān)的了,
獲取href完整內(nèi)容
# 查找第一個雙引號的位置
$index = $substr.IndexOf('"')
# 獲取部分/packages/Newtonsoft.Json/13.0.3
$substr = $substr.Substring(0,$index)剔除最后兩個版本無關(guān)的a標簽
# 排除報告濫用a標簽
if ($substr -notlike "*/ReportAbuse") {
# 排除聯(lián)系作者a標簽
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
# 匹配標簽
$pattern = "<.*?>"
$matches = [regex]::Matches($htmlContent, $pattern)
foreach ($match in $matches) {
$tag = $match.Value
# 獲取a標簽
if ($tag -like "<a href=*") {
# 獲取含有title的a標簽
if ($tag -like "*title=*")
{
# 截取href的內(nèi)容
$substr = $tag.Substring(9)
if ($substr -like "/packages/*")
{
# 查找第一個雙引號的位置
$index = $substr.IndexOf('"')
# 獲取部分/packages/Newtonsoft.Json/13.0.3
$substr = $substr.Substring(0,$index)
# 排除報告濫用a標簽
if ($substr -notlike "*/ReportAbuse")
{
# 排除聯(lián)系作者a標簽
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某個包的所有版本的詳細內(nèi)容,更多關(guān)于PowerShell下載Nuget包所有版本的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
PowerShell包含另一個腳本文件和獲取當前腳本所在目錄的方法例子
這篇文章主要介紹了PowerShell包含另一個腳本文件和獲取當前腳本所在目錄的方法例子,需要的朋友可以參考下2014-08-08
PowerShell小技巧之使用New-Module命令動態(tài)創(chuàng)建對象
這篇文章主要介紹了在PowerShell中使用New-Module命令動態(tài)創(chuàng)建對象,比New-Object高大上很多了吧2014-09-09
使用PowerShell腳本備份和清理Windows事件日志
PowerShell 是一個強大的命令行工具,允許系統(tǒng)管理員可以自動執(zhí)行許多日常任務,包括管理 Windows 事件日志,在這個腳本中,我們將創(chuàng)建一個 PowerShell 腳本將所有事件日志備份到指定位置,然后清除日志,以釋放磁盤空間,提高系統(tǒng)性能,需要的朋友可以參考下2025-11-11
Windows Powershell ForEach-Object 循環(huán)
Powershell管道就像流水線,對于數(shù)據(jù)的處理是一個環(huán)節(jié)接著一個環(huán)節(jié),如果你想在某一環(huán)節(jié)對流進來的數(shù)據(jù)逐個細致化的處理,可是使用ForEach-Object,$_ 代表當前的數(shù)據(jù)。2014-10-10
PowerShell腳本實現(xiàn)網(wǎng)卡DHCP自動獲取IP地址、設(shè)置靜態(tài)IP地址的方法
這篇文章主要介紹了PowerShell腳本實現(xiàn)網(wǎng)卡DHCP自動獲取IP地址、設(shè)置靜態(tài)IP地址的方法,本文同時講解了用PowerShell設(shè)置網(wǎng)卡DHCP、靜態(tài)IP的方法,需要的朋友可以參考下2014-08-08

