Лучший способ завершить функцию PowerShell на основе параметров - PullRequest
0 голосов
/ 05 июня 2018

У меня есть несколько функций, которые вызываются либо из Jenkins как часть конвейера, они также вызываются из теста pester или, наконец, их можно вызывать из консоли powershell.Проблема, с которой я столкнулся на самом деле, связана с тем, что Дженкинс, похоже, не справляется с выводом записи так, как мне кажется.

Итак, что я делаю, так это создание логического параметра, который позволит мне выбирать, завершу ли я свою функцию кодом выхода или сообщением возврата.Код завершения будет использоваться моей конвейерной логикой и сообщением возврата для остальных?

Есть ли альтернативный подход, который я должен использовать, это похоже на хак.

function Get-ServerPowerState
{
[CmdletBinding()]
param
(
    [string[]]$ilo_ip,
    [ValidateSet('ON', 'OFF')]
    [string]$Status,
    [boolean]$fail
)

BEGIN
{
    $here = Split-Path -Parent $Script:MyInvocation.MyCommand.Path
    $Credentials = IMPORT-CLIXML "$($here)\Lib\iLOCred.xml"

}
PROCESS
{
    foreach ($ip in $ilo_ip)
    {
        New-LogEntry -Message ("Getting current powerstate " + $ip)
        If (Test-Connection -ComputerName $ip.ToString() -Count 1 -Quiet)
        {
            $hostPower = Get-HPiLOhostpower -Server $ip -Credential 
            $Credentials -DisableCertificateAuthentication
        }
    }

}
END
{

    If($fail){
        New-LogEntry -Message "Script been set to fail with exit code" -Log Verbose
        New-LogEntry -Message "The host is powered -  $($HostPower.Host_Power)" -Log Verbose

        If($hostPower.HOST_POWER -match $Status)
        {
            Exit 0
        }
        else {

            Exit 1
        }
    }
    else {
        New-LogEntry -Message "Script been set to NOT fail with exit code" -Log Verbose
        New-LogEntry -Message "The host is powered -  $($HostPower.Host_Power)" -Log Verbose
        If($hostPower.HOST_POWER -match $Status)
        {
            return 0
        }
        else {

            return 1
        }

    }


}
}

1 Ответ

0 голосов
/ 05 июня 2018

Вот так

function Get-Output {
  param ([switch]$asint)

  if ($asint) {
    return 1
  }
  else {
    write-output 'one'
  }
}

Get-Output

Get-Output -asint

Если вы собираетесь использовать выходные данные в конвейере, используйте Write-Output.Если вы намереваетесь только отправить его процессу хоста, используйте Write-Host.Обычно я использую ключевое слово return, если я хочу присвоить возвращаемое значение переменной.

[int]$result = Get-Output -asint
...