[英]Nuget Packages Version difference analysis using powershell
在我的解決方案中,我們使用不同版本的軟件包。但是,我現在想在整個解決方案中維護一個軟件包的單個版本。
為了分析現有的解決方案,我編寫了powershell腳本來在解決方案中遞歸分析所有pacakges.config文件,現在我有了PSObject,其中包含以下內容
Config PackageName Version
proj1\packages.config A 4
proj1\packages.config B 1
proj2\packages.config A 4
proj2\packages.config B 1
proj3\packages.config A 3
proj3\packages.config B 1
在此輸出中有2個包A和B,其中包A具有不同的版本,並且B具有相同的版本。
現在我只需要以下列格式顯示具有不同版本的軟件包。應該從輸出中刪除具有相同版本的軟件包B.
PackageName Version Config
A 4 proj1\packages.config
A 4 proj2\packages.config
A 3 proj3\packages.config
我怎么做 ? 我嘗試使用PackageName進行分組,但我找不到一種方法來刪除具有相同版本的軟件包B.
更新:
可以在此處找到完整的PowerShell腳本以查找沖突的軟件包版本及其用法
我用以下方式解決了它
$groupedPackgeList = GetPackages | Group-Object -Property PackageName
$multipleVersionPackageList = @()
$groupedPackgeList | % {
$originalCount =$_.Count
$groupByVersion = $_.Group | Group-Object -Property Version
if($groupByVersion.Count -ne $originalCount)
{
$packageName = $_.Name
$groupByVersion |% {
$_.Group |% {
$tempObj = New-Object PSCustomObject -Property @{Id=$packageName;Version=$_.Version;Config=$_.Config;}
$multipleVersionPackageList+=$tempObj
}
}
}
}
$multipleVersionPackageList
可能有一種更簡單的方法,但我找不到它。 問題是我們需要查找具有各種版本的所有軟件包,並保存這些軟件包,同時忽略具有一致版本號的軟件包。
我首先從您的示例中重新生成PSCustomObject數組$a
,因此我們可以使用以下內容:
$a = @()
$a += New-Object PSCustomObject -Property @{
Config = "proj1\packages.config";
PackageName = "A";
Version = 4
}
$a += New-Object PSCustomObject -Property @{
Config = "proj1\packages.config";
PackageName = "B";
Version = 1
}
$a += New-Object PSCustomObject -Property @{
Config = "proj1\packages.config";
PackageName = "A";
Version = 4
}
$a += New-Object PSCustomObject -Property @{
Config = "proj1\packages.config";
PackageName = "B";
Version = 1
}
$a += New-Object PSCustomObject -Property @{
Config = "proj1\packages.config";
PackageName = "A";
Version = 3
}
$a += New-Object PSCustomObject -Property @{
Config = "proj1\packages.config";
PackageName = "B";
Version = 1
}
然后,我們將結果保存在一個名為$b
的新數組中
$b = @()
然后我們將遍歷$a
數組中的每個元素。 如果在$b
找不到此元素,我們將分析它。 我們將此元素的包名稱和版本與$a
所有元素進行比較, $a
查找不同的版本號。 如果我們找到匹配項,我們會在$ b中保存具有相同PackageName的所有元素。
$a | % {
$found = $false
foreach ($e in $b)
{
if ($e.PackageName -eq $_.PackageName)
{
$found = $true
break
}
}
if (!$found)
{
foreach ($i in $a)
{
if ($i.PackageName -eq $_.PackageName -and $i.Version -ne $_.Version)
{
foreach ($j in $a)
{
if ($j.PackageName -eq $_.PackageName)
{
$b += $j
}
}
break
}
}
}
}
結果是:
Config PackageName Version
------ ----------- -------
proj1\packages.config A 4
proj1\packages.config A 4
proj1\packages.config A 3
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.