Получить список пакетов из нескольких решений с помощью PowerShell

У меня есть единственная родительская папка, которая содержит несколько подпапок, каждая из которых содержит файл решения VS С#. Каждая подпапка с решением может также содержать еще несколько внутренних подпапок с .csproj файлами. Это может выглядеть так:

Parent
   |-->A
   |   |-->a.sln
   |       X
   |       |-->x.csproj
   |       Y
   |       |-->y.csproj
   |-->B
        |-->b.sln
            Z
            |-->z.csproj
            W
            |-->w.csproj

Я хочу получить список всех пакетов (зависимостей), которые используются всеми проектами. А позже использовать его для получения лицензий. Я знаю, что есть вариант запустить:

@( Get-Project -All | ? { $_.ProjectName } | % { Get-Package -ProjectName $_.ProjectName } )

но поскольку я открываю решение не в VS, а просто как папку, оно не работает. Я попытался получить список всех проектов из каждого решения, запустив скрипт:

$slnFiles = Get-ChildItem -Path $parentPath -Directory | % { Get-ChildItem $_ -File -Filter "*.sln"}
$projList = @()
foreach ($file in $slnFiles){
  dotnet sln $slnFile.FullName list | % {if($_ -like '*.csproj'){$projList += $_}}
}

Что дало мне:

X\x.csproj
Y\y.csproj
Z\z.csproj
W\w.csproj

Если я пытаюсь использовать пути/имена проектов вместе с Get-Package -ProjectName x, я получаю сообщение об ошибке:

Get-Package : Project 'x' is not found.

Я застрял здесь на некоторое время. Как мне получить список проектов таким образом, чтобы Get-Package его принял?
В конце концов моя цель состоит в том, чтобы извлечь все лицензионные пути для каждого возможного пакета, используемого во всех проектах.


person user1927829    schedule 13.08.2020    source источник