Scripts/ProtectionSource/Register-CohesityProtectionSourceHyperV.ps1

function Register-CohesityProtectionSourceHyperV
{
  [CmdletBinding()]
  Param(
    [Parameter(Position=0, Mandatory=$true)]
    [ValidateNotNullOrEmpty()]
    [String]$Server,
    [Parameter(Mandatory=$true)]
    [ValidateNotNullOrEmpty()]
    [ValidateSet('KSCVMMServer','KHyperVHost')]
    $HyperVType,
    [Parameter(Mandatory=$false)]
    [ValidateNotNullOrEmpty()]
    [System.Management.Automation.PSCredential]$Credentials
  )

  Begin {
    if(-not (Test-Path -Path "$HOME/.cohesity"))
    {
      throw "Failed to authenticate. Please connect to the Cohesity Cluster using 'Connect-CohesityCluster'"
    }
    $session = Get-Content -Path $HOME/.cohesity | ConvertFrom-Json
  }

  Process {

    $token = 'Bearer ' + $session.AccessToken.AccessToken
    $headers = @{"Authorization"=$token}
    $uri = $session.ClusterUri + '/irisservices/api/v1/public/protectionSources/register'

    if ($HyperVType -eq 'KSCVMMServer'){
      $reqParameters = @{
        environment = "kHyperV"
        username = $Credentials.UserName
        password = $Credentials.GetNetworkCredential().Password
        endpoint = $Server
        hyperVType = "kSCVMMServer"
      }
    }
    else{
      $reqParameters = @{
        environment = "kHyperV"
        endpoint = $Server
        hyperVType = "kStandaloneHost"
      }
    } 

    $columnWidth = 20
    $request = $reqParameters | ConvertTo-Json
    Invoke-RestApi -Method Post -Headers $headers -Uri $uri -Body $request |
    Format-Table @{ Label='ID'; Expression={$_.id}; },  
    @{ Label='Name'; Expression={$_.name}; Width=$columnWidth; },
    @{ Label='Environment'; Expression={$_.environment}; Width=$columnWidth },
    @{ Label='Type'; Expression={$_.hypervProtectionSource.type}; Width=$columnWidth }
  } # End of process
} # End of function