Private/Connect-VCDA.ps1
<# Copyright 2023 VMware, Inc. SPDX-License-Identifier: BSD-2-Clause #> function Connect-VCDA { [CmdletBinding()] param ( #VCDA server address IP or FQDN [Parameter(Mandatory = $true )] [string]$Server, #authentication type [parameter(mandatory = $true, HelpMessage = "Local, SSO, VCDCredentials")] [ValidateSet("Local", "SSO", "VCDCredentials")] [string]$AuthType, #VCDA server port, Default 443 [Parameter(Mandatory = $false)] [int]$port = 443, #VCDA credential local credentia (root) [Parameter(Mandatory = $true)] [PSCredential] $Credentials, # Specifies that you do not want to save the specified server as default servers. [Parameter(Mandatory = $false)] [switch] $NotDefault = $false, # Parameter help description [Parameter(Mandatory = $false)] [Switch] $SkipCertificateCheck ) process { try { $LocalVarBodyParameter = @{} switch ($PSBoundParameters.AuthType) { "local" { $LocalVarBodyParameter["type"] = "localUser" $LocalVarBodyParameter["localUser"] = $Credentials.UserName $LocalVarBodyParameter["localPassword"] = $Credentials.GetNetworkCredential().Password } "sso" { $LocalVarBodyParameter["type"] = "ssoCredentials" $LocalVarBodyParameter["username"] = $Credentials.UserName $LocalVarBodyParameter["password"] = $Credentials.GetNetworkCredential().Password } "VCDCredentials" { $LocalVarBodyParameter["type"] = "vcdCredentials" $LocalVarBodyParameter["vcdUser"] = $Credentials.UserName $LocalVarBodyParameter["vcdPassword"] = $Credentials.GetNetworkCredential().Password } } $LocalVarBodyParameter = $LocalVarBodyParameter | ConvertTo-Json -Depth 100 $LocalVarUri = [System.UriBuilder]::new("https", $server, $port).Uri.ToString() $LocalVarheaders = @{ 'Content-Type' = "application/json" } Write-Verbose "Connecting to $LocalVarUri" $LocalvarInvokeParams = @{ 'uri' = $LocalVarUri 'Method' = "Post" 'Body' = $LocalVarBodyParameter 'Headers' = $LocalVarheaders 'Path' = "sessions" 'SkipCertificateCheck' = $SkipCertificateCheck } $LocalVarResult = Invoke-VCDARequest @LocalvarInvokeParams $VCDAClient = [PSCustomObject]@{ 'PSTypeName' = "VCDAServer" 'Server' = $Server 'IsConnected' = $false 'ServiceUri' = $LocalVarUri 'Headers' = @{ 'Content-Type' = "application/json"; 'X-VCAV-Auth' = [string] $LocalVarResult.headers.'X-VCAV-Auth'; 'Accept' = [string] $LocalVarResult.headers.'Content-Type'; 'operationID' = "" } 'ServiceType' = "" 'BuildVersion' = "" 'Client' = $LocalVarResult.Response 'UID' = "" 'LocalSite' = $LocalVarResult.Response.authenticatedSites.site 'LocalOrg' = $LocalVarResult.Response.authenticatedSites.org 'SkipCertificateCheck' = $SkipCertificateCheck 'Default' = $false } $VCDAClient.UID = $LocalVarResult.Response.user, $Server, (New-Guid).Guid -join "/" $VCDAClient.Headers.operationID = "VMware.VCDA.AVS", (New-Guid).Guid -join "-" #get-product info and add it to connection $LocalVarInfo = Get-VCDAInfo -server $VCDAClient $VCDAClient.ServiceType = $LocalVarInfo.serviceType $VCDAClient.BuildVersion = $LocalVarInfo.buildVersion $VCDAClient.IsConnected = $true if (-not $NotDefault) { $VCDAClient.Default = $true Set-Variable -Name DefaultVCDAServer -Value $VCDAClient -Scope Global } return $VCDAClient } catch { if ($_.TargetObject -match "VCDA_Server_Error" -and $_ -match "Authentication required.") { Write-Error "Unable to connect to VCDA Server '$server'. The server returned the following: '$_'" } if ($_ -match "The remote certificate is invalid according to the validation procedure") { Write-Error "The remote certificate is invalid. If you want to connect anyway use '-SkipCertificateCheck' parameter" } else { $psCmdlet.ThrowTerminatingError($_) } } } } |