gpt4 book ai didi

powershell - 如何比较 dotnet 包和 txt

转载 作者:行者123 更新时间:2023-12-05 01:23:46 27 4
gpt4 key购买 nike

我有脚本:

$Test = (dotnet list C:\Tasks.Api.csproj package) 它提供了一些包(最后有 2 个空格!):

Project 'Tasks.Api' has the following package references 
[net5.0]:
Top-level Package Requested Resolved
> AspNetCore.HealthChecks.SqlServer 6.0.0 6.0.0
> Microsoft.ApplicationInsights.AspNetCore 2.18.0 2.18.0
> Microsoft.EntityFrameworkCore.Tools 5.0.11 5.0.11
> Swashbuckle.AspNetCore 6.2.3 6.2.3
(SPACE)
(SPACE)

gettype 提供下一个:

enter image description here

然后我有一个“好的”文件(txt):

AspNetCore.HealthChecks.SqlServer
Microsoft.ApplicationInsights.AspNetCore

现在我想知道,我的“好”文件是否包含来自 $Test 的行?

我想我尝试了数百万种其他选择,但现在我坚持使用它:

$whiteliste = Get-Content C:\whitelist.txt 
$test = (dotnet list C:\Tasks.Api.csproj package)
$array = @()
$test[3..($test.Length-2)] | foreach {
$array+=$_
}
Foreach ($item in $array) {
Write-host "!!!" $item
$containsWord = $whiteliste | %{$_ -contains $item.Remove(" ")}
if ($containsWord -contains $true) {
Write-Host "There is!"
} else {
Write-Host "There ins't!"
}
}

谢谢!

最佳答案

不用花哨,一个简单的解决方案是使用 -Match 运算符来查找那些包引用,因为它们是唯一的名称,我们可以利用一些用户友好的 正则表达式:

$whiteliste = (Get-Content -Path "C:\whitelist.txt").Foreach{[regex]::Escape($_.Trim())} -join "|"
$test.Foreach{
if ($_ -match $whiteliste) {
Write-Host -Object "Found: [$($Matches[0])]"
}
}

编辑:根据您对 Santi 帖子的评论,如果您希望它在未找到匹配项时告诉您,您可以添加开始、过程和结束子句:

$test.ForEach{
Begin { $Matches = $null }
Process {
if ($_ -match $tomatch) {
Write-Host -Object "Found: $($Matches[0])"
}
}
End {
if ($null -eq $Matches) {
"No Match Found:("
}
}
}
  • 首先,Begin 子句将$matches 的自动变量设置为$null这样它就不会干扰过去的比赛
  • 然后,Process 子句将运行您的代码以添加到 $matches
  • 最后,End 子句将检查是否填充了 $matches,如果没有,则输出未找到任何内容。
    • 这是可行的,因为 -match 会在找到某些内容时填充 $matches 变量。
    • 如果未找到任何内容,则不会填充变量。

关于powershell - 如何比较 dotnet 包和 txt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71874890/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com