Functions/CSP/Portal/Start-B1DiagnosticTask.ps1
function Start-B1DiagnosticTask { <# .SYNOPSIS Initiates a NIOS-X Diagnostic Task .DESCRIPTION This function is used to initiate a NIOS-X Diagnostic Task .PARAMETER B1Host The name/fqdn of the NIOS-X Host to run the task against .PARAMETER Traceroute This switch indicates you want to use the traceroute test .PARAMETER Target This is used as the target for the traceroute test .PARAMETER Port This is used as the port for the traceroute test .PARAMETER DNSTest This switch indicates you want to use the dns test .PARAMETER FQDN This is used as the fqdn for the dns test .PARAMETER NTPTest This switch indicates you want to use the ntp test .PARAMETER DNSConfiguration This switch indicates you want to return the DNS Configuration file .PARAMETER DHCPConfiguration This switch indicates you want to return the DHCP Configuration file .PARAMETER WaitForOutput Indicates whether the function should wait for results to be returned from the diagnostic task, or start it in the background only. This defaults to $true .PARAMETER Object The NIOS-X Host Object(s) to run the diagnostic task on. Accepts pipeline input .PARAMETER Force Perform the operation without prompting for confirmation. By default, this function will not prompt for confirmation unless $ConfirmPreference is set to Medium. .EXAMPLE PS> Start-B1DiagnosticTask -DNSTest -FQDN "google.com" .EXAMPLE PS> Start-B1DiagnosticTask -DHCPConfiguration .FUNCTIONALITY NIOS-X .FUNCTIONALITY Tasks #> [CmdletBinding( SupportsShouldProcess, ConfirmImpact = 'Medium' )] param( [Alias('OnPremHost')] [String]$B1Host, [parameter(ParameterSetName="traceroute",Mandatory=$true)] [Switch]$Traceroute, [parameter(ParameterSetName="dnstest")] [Switch]$DNSTest, [parameter(ParameterSetName="ntptest")] [Switch]$NTPTest, [parameter(ParameterSetName="dnsconf")] [Switch]$DNSConfiguration, [parameter(ParameterSetName="dhcpconf")] [Switch]$DHCPConfiguration, [parameter(ParameterSetName="traceroute",Mandatory=$true)] [String]$Target, [parameter(ParameterSetName="traceroute",Mandatory=$false)] [String]$Port, [parameter(ParameterSetName="dnstest",Mandatory=$true)] [String]$FQDN, [parameter(Mandatory=$false)] [Bool]$WaitForOutput = $true, [Parameter(ValueFromPipeline = $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 } } } else { $Object = Get-B1Host -Name $B1Host -Strict -Detailed if (!($Object)) { Write-Error "Unable to find NIOS-X Host: $($B1Host)" return $null } } if ($Traceroute) { $splat = @{ "ophid" = $Object.ophid "cmd" = @{ "name" = "traceroute" "args" = @{ "target" = $Target "port" = $Port } } } } if ($DNSTest) { $splat = @{ "ophid" = $Object.ophid "cmd" = @{ "name" = "dns_test" "args" = @{ "domain_name" = $FQDN } } } } if ($NTPTest) { $splat = @{ "ophid" = $Object.ophid "cmd" = @{ "name" = "ntp_test" } } } if ($DNSConfiguration) { $splat = @{ "ophid" = $Object.ophid "cmd" = @{ "name" = "dns_conf" } } } if ($DHCPConfiguration) { $splat = @{ "ophid" = $Object.ophid "cmd" = @{ "name" = "dhcp_conf" } } } $JSON = $splat | ConvertTo-Json if($PSCmdlet.ShouldProcess("Start NIOS-X Diagnostic Task: $($Object.display_name)","Start NIOS-X Diagnostic Task on: $($Object.display_name)",$MyInvocation.MyCommand)){ $Result = Invoke-CSP -Method POST -Uri "$(Get-B1CSPUrl)/atlas-onprem-diagnostic-service/v1/task" -Data $JSON | Select-Object -ExpandProperty result -ErrorAction SilentlyContinue if ($Result) { if ($WaitForOutput) { while ((Get-B1DiagnosticTask -id $Result.id).status -eq "InProgress") { Write-Host "Waiting for task to complete on $($Object.display_name).." -ForegroundColor Yellow Wait-Event -Timeout 5 } if ($DNSConfiguration) { $Job = Get-B1DiagnosticTask -id $Result.id -Download } elseif ($DHCPConfiguration) { $Job = Get-B1DiagnosticTask -id $Result.id -Download | Select-Object -ExpandProperty Dhcp4 -ErrorAction SilentlyContinue } else { $Job = Get-B1DiagnosticTask -id $Result.id } if ($Job) { return $Job } else { Write-Host "Job failed on $($Object.display_name)." -ForegroundColor Red } } else { return $Result } } } } } |