Невозможно преобразовать System.Object [] в тип System.String, требуемый параметром Path. Указанная ошибка - PullRequest
0 голосов
/ 16 мая 2018

Я получаю приведенную ниже ошибку при запуске сценария powershell

Set-Location: невозможно преобразовать 'System.Object []' в тип 'System.String', требуемый параметром 'Дорожка'.Указанная ошибка 15-May-2018 08:31:42 метод не поддерживается.

Ниже приведен скрипт, в котором возникают проблемы. Не могли бы вы подсказать, что здесь не так

cd $lsolutionPath
    Get-ChildItem -Path "$lsolutionPath" -Filter "*Tests" -Recurse -Directory | where {$_.FullName -inotlike "*.sonarqube*"} | ForEach-Object {
    $fullName = $_.FullName
    $projName = $_.BaseName
    write-output $projName
    write-output $fullName

    Write-Output "Starting Build Helper unit test run:3"
    $tests = Get-ChildItem -Path "$fullName" -Recurse -Include *.dll
    Write-Output "Starting Build Helper unit test run:4"
    if($tests -eq $null) {
        Write-Error "Could not find *Tests.dll"
        return 999
        }

    cd $tests.Directory
    Write-Output $tests.Directory
    Write-Output "target args"
    $targetArgs = "\""$tests\"" -nologo -parallel none -noshadow -xml \""$xUnittestResultsPath\$projName.xml\"" -nunit \""$testResultsPath\$projName.xml\"""
    Write-Output "$target args"
     Write-Output "###### Target Args:"**

Ответы [ 2 ]

0 голосов
/ 20 мая 2018

Переменная $tests является массивом файловых объектов, поэтому вам может потребоваться просто создать еще один цикл foreach для массива $tests.

Заменить это:

cd $tests.Directory
Write-Output $tests.Directory
Write-Output "target args"
$targetArgs = "\""$tests\"" -nologo -parallel none -noshadow -xml \""$xUnittestResultsPath\$projName.xml\"" -nunit \""$testResultsPath\$projName.xml\"""
Write-Output "$target args"
 Write-Output "###### Target Args:"**

С этим:

$tests | foreach {
Set-Location $_.Directory
Write-Output $_.Directory
Write-Output "target args"
$targetArgs = "\""$($_.FullName)\"" -nologo -parallel none -noshadow -xml \""$xUnittestResultsPath\$projName.xml\"" -nunit \""$testResultsPath\$projName.xml\"""
Write-Output "$target args"
Write-Output "###### Target Args:"**
}
0 голосов
/ 16 мая 2018
$tests = Get-ChildItem -Path "$fullName" -Recurse -Include *.dll

cd $tests.Directory

cd - это псевдоним для Set-Location, а $tests содержит несколько файлов DLL, поэтому $tests.directory - это массив из нескольких файлов, то есть то, что отображается как System.Object[].Вы не можете перейти на все из них одновременно.

Мне не ясно, на какой вы хотите перейти, поскольку у вас есть -recurse, поэтому может быть много разных каталогов.Возможно, вам нужен get-childitem ... | Select-Object -First 1 или вам нужен цикл над ними для обработки каждого из них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...