Functions/CSP/Portal/Restart-B1Host.ps1

function Restart-B1Host {
    <#
    .SYNOPSIS
        Restarts a NIOS-X Host

    .DESCRIPTION
        This function is used to initiate a reboot of a NIOS-X Host

    .PARAMETER B1Host
        The FQDN of the host to reboot

    .PARAMETER Object
        The NIOS-X Host Object(s) to restart. Accepts pipeline input

    .PARAMETER Force
        Perform the operation without prompting for confirmation. By default, this function will always prompt for confirmation unless -Confirm:$false or -Force is specified, or $ConfirmPreference is set to None.

    .EXAMPLE
        PS> Restart-B1Host -B1Host "ddihost1.mydomain.corp" -NoWarning

    .FUNCTIONALITY
        NIOS-X
    #>

    [CmdletBinding(
      SupportsShouldProcess,
      ConfirmImpact = 'High'
    )]
    param(
        [Parameter(ParameterSetName="Default",Mandatory=$true)]
        [Alias('OnPremHost')]
        [String]$B1Host,
        [Parameter(
        ValueFromPipeline = $true,
        ParameterSetName="Object",
        Mandatory=$true
        )]
        [System.Object]$Object,
        [Switch]$Force
    )

    process {
        $ConfirmPreference = Confirm-ShouldProcess $PSBoundParameters
        if ($Object) {
            $SplitID = $Object.id.split('/')
            if (("$($SplitID[0])/$($SplitID[1])") -ne "infra/host") {
                $Object = Get-B1Host -id $($Object.id) -Detailed
                if (-not $Object) {
                  Write-Error "Error. Unsupported pipeline object. This function only supports 'infra/host' objects as input"
                  return $null
                }
                $HostID = $Object.id
            } else {
              $HostID = $SplitID[2]
            }
        } else {
            $Object = Get-B1Host -Name $B1Host -Strict -Detailed
            if (!($Object)) {
                Write-Error "Unable to find NIOS-X Host: $($B1Host)"
                return $null
            }
            $HostID = $Object.id
        }

        $JSON = @{
            "ophid" = $Object.ophid
            "cmd" = @{
            "name" = "reboot"
            }
        } | ConvertTo-Json

        if($PSCmdlet.ShouldProcess("$($Object.display_name) ($($HostID))")){
            Write-Host "Rebooting $($Object.display_name).." -ForegroundColor Yellow
            Invoke-CSP -Method POST -Uri "$(Get-B1CSPUrl)/atlas-onprem-diagnostic-service/v1/privilegedtask" -Data $JSON | Select-Object -ExpandProperty result -ErrorAction SilentlyContinue
        }
    }
}