как назвать файл из индекса массива? - PullRequest
0 голосов
/ 31 марта 2020

У меня есть массив, в который я хочу поместить имена файлов, поэтому, когда я вызываю pester и publi sh результаты моих тестов, я получаю каждый тест с соответствующим именем

. иметь это:

  $file = "D:\ParametrosExcel.xlsx"
$objExcel = New-Object -ComObject Excel.Application
$workbook = $objExcel.Workbooks.Open($file)
$sheet = $workbook.Worksheets.Item(1)
$objExcel.Visible = $false
$rowMax = ($sheet.UsedRange.Rows).count
$colMax = ($sheet.UsedRange.Columns).count
     [System.Collections.ArrayList]$data = @(

    )
for ($row = 3; $row -le $rowMax; $row++) {   # salta header
    $params = @()
    [System.Collections.ArrayList]$nameTests=@()
    for ($col = 1; $col -le $colMax; $col++) {
    #Si la celda es igual a nulo, no se agrega al array de parametros
        if ($sheet.Cells.Item($row, $col).Value()-ne $null){
         [System.Collections.ArrayList]$params += $sheet.Cells.Item($row, $col).Value()


        }
    }
    # si el parametro en la posición uno igual a 1 procede si no se brinca a la linea siguiente
    if ($params[0] -ne 0) {
        # muestra output

        $params.Remove($params[0])
          $nombrePrueba=$params[0]
         Write-Host "NOMBRE DE ESCENARIO" $nombrePrueba
         $nameTests.Add($nombrePrueba)

        $params.Remove($params[0])
        #Write-Output "Resultado1"  -f ($params -join '; ').TrimEnd(", ")

        #Write-Output "Resultado2"  -f ($params -join '; ').TrimEnd(", ")
       'Parametros: {0}' -f ($params -join ' ').TrimEnd(", ")

    $data.Add($params)

    }
}



$objExcel.Quit()
# cierra elementos usados
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($sheet)    | Out-Null
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($workbook) | Out-Null
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($objExcel) | Out-Null
[System.GC]::Collect()
[System.GC]::WaitForPendingFinalizers()
$contador=0
foreach ($parametro in $data )
{

 $nombre= $nameTests[$contador]


Invoke-Pester -Script @{Path = 'C:\Turing\Tests\Azure.ps1'; Parameters = @{parameter=$parametro}} -OutputFile "C:\Turing\Test Results\'$nombre'.xml" -OutputFormat "NUnitXML"
$contador+=1

}

Извините, что комментируется на испанском sh, но здесь

Write-Host "NOMBRE DE ESCENARIO" $nombrePrueba
             $nameTests.Add($nombrePrueba)

это где я получаю имя, которое я хочу, и я добавляю его в список массивов, и он добавляет его два раза, но когда я печатаю его вот так

$nameTest[0]
$nameTest[1] 

, я получаю только один, но нулевой индекс меняется с этого "prueba1" на "prueba3", я не знаю что я могу делать не так Спасибо за помощь

и за файл, который получает имя. xml, я пытался обозначить это как '$ filename'. xml и ничего, и я знаю, что он просто пропускает некоторые ps трюк, ха-ха, но я новичок ie в powershell, я надеюсь, что кто-то может мне помочь, пожалуйста, большое спасибо за вашу помощь Приветствую!

Ответы [ 2 ]

0 голосов
/ 01 апреля 2020

Как упомянул @BACON, интервал действительно не имеет значения. Проверяя ваш текущий фрагмент кода, я вижу три проблемы:

  1. Раньше вы использовали $variable=@() для создания экземпляра пустого фиксированного массива. В таких массивах нельзя использовать функцию Add() для добавления элементов. Вы должны использовать дорогой оператор +=, чтобы создать новый массив, который будет дополнительно содержать новый элемент. Чтобы решить эту проблему, вы преобразовали необработанный массив в ArrayList, который действительно может использовать функцию Add (). Я думаю, что это решило вашу проблему, а не интервал.
  2. Вы упомянули:

    Я получаю только один, но нулевой индекс изменяется с этой "prueba1" на "prueba3", я не знаю, что я могу делать неправильно.

    Это потому, что вы дважды используете $params.Remove($params[0]) в своем утверждении if. Таким образом, вы обрабатываете один элемент и пропускаете его последующий элемент в каждой итерации.

  3. Пока ваша первая проблема не была решена, конечно, ваш вывод не работал. Теперь вы должны удалить лишние цитаты ' в "C:\Turing\Test Results\'$nombre'.xml", так как я предполагаю, что вы не хотите, чтобы эти цитаты были в вашем имени файла.
0 голосов
/ 01 апреля 2020

Ну, мне удалось получить ошибку, здесь отсутствовал пробел

[System.Collections.ArrayList]$nameTests=@()

, поэтому оказалось, что

[System.Collections.ArrayList]$nameTests = @()

, вот и все, с этим сработало без проблем

спасибо за помощь:)

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