Необычное возвращаемое значение PowerShell

#powershell

#powershell

Вопрос:

У меня есть эта часть скрипта, которая вызывает функцию во внешнем файловом скрипте:

     #CheckIn della changelist
    $tmpresult = CheckIn-ChangeList -LogPath $LogFullPathName -number $ChangeListNumber -FilesToRevert $ChangeListFiles
    if ($tmpresult -eq 0)
    {
        $result = $True
    }
    else
    {
        $result = $False
    }
 

Функция заключается в следующем:

 Function CheckIn-ChangeList
{

[CmdletBinding()]

Param ([Parameter(Mandatory=$true)][string]$LogPath,
        [Parameter(Mandatory=$true)][string[]]$FilesToRevert,
        [Parameter(Mandatory=$true)][string]$number)

Process
{
    try 
    {
        Log-Write -LogPath $LogPath -LogText "Inizio CheckIn" -NewLine $True
        #Questo comando esegue il checkIn
        p4 submit -c $number
        Log-Write -LogPath $LogPath -LogText ("CheckIn per changelist n° "   $($number).ToString()   " eseguito correttamente") -NewLine $True
        return 0
    }
    catch
    {
        Manage-Exception -LogPath $LogPath -number $number -ErrMessage $_.Exception -FilesToRevert $FilesToRevert
        return 1
    }
}
}
 

Я ожидаю, что возвращаемое значение будет равно 0 или 1, которое можно естественным образом преобразовать в $True или $False , но это вывод на консоль:

 edit //depot/***.map#130
edit //depot/***.cs#139
edit //depot/*.xml#149
Change 285339 submitted.
0
[DBG]: PS C:Usersmmarcianesi>> $tmpresult.GetType()

IsPublic IsSerial Name                                     BaseType                                                                                                                        
-------- -------- ----                                     --------                                                                                                                        
True     True     Object[]                                 System.Array                                                                                                                    
 

это нормально? У меня нет опыта программирования power shell.

Комментарии:

1. Если вы используете Process блок для настройки конвейера, да, это нормально. Однако, поскольку вы не обрабатываете элементы конвейера, использовать его нелогично. Удалите этот блок и просто поместите инструкции в командлете непосредственно под Param блоком, и возвращаемое значение должно быть таким, какое вы ожидаете.

2. Это был бы Process { } блок CheckIn-ChangeList , о котором я говорю. Если вы можете изменить это, удалите этот блок, в данном случае это не обязательно или не требуется. Если оно просто плохо написано, но вы не можете его изменить, вам придется вместо этого обработать вывод, просто выбрав первый элемент в конвейере ( $tmpresult[0] ) .

3. Если вы опубликуете в качестве ответа, я приму.

4. Я сомневаюсь, что это решит вашу проблему. Я подозреваю, что дополнительный вывод получен из этого оператора: p4 submit -c $number — измените его на p4 submit -c $number |Out-Null или p4 submit -c $number |% { Write-Host $_ } , чтобы он не загромождал вывод функции