#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 $_ }
, чтобы он не загромождал вывод функции