Src/Connect-ROSSSession.ps1
function Connect-ROSSSession { <# .SYNOPSIS Authenticate and creates a connection to the RES ONE Service Store API or database. .EXAMPLE Connect-ROSSSession -Server 'servicestore.lab.local' -Credential 'LAB\Administrator' Create a RES ONE Service Store API session to server 'servicestore.lab.local' over HTTP. .EXAMPLE Connect-ROSSSession -Server 'servicestore.lab.local' -Credential 'LAB\Administrator' -UseHttps Create a RES ONE Service Store API session to server 'servicestore.lab.local' over HTTPS. .EXAMPLE Connect-ROSSSession -DatabaseServer 'controller.lab.local' -DatabaseName RESONEServiceStore Create a RES ONE Service Store MSSSQL database session to server 'controller.lab.local' using Windows authentication. .EXAMPLE Connect-ROSSSession -DatabaseServer 'controller.lab.local' -DatabaseName 'RESONEServiceStore' -Credential 'RESONEServiceStore' Create a RES ONE Service Store MSSSQL database session to server 'controller.lab.local' using SQL authentication. #> [CmdletBinding(DefaultParameterSetName = 'RestApi')] [OutputType([System.Management.Automation.PSCustomObject])] param ( ## RES ONE Service Store server hostname [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName, ParameterSetName = 'RestApi')] [System.String]$Server, ## RES ONE Service Store database server hostname [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName, ParameterSetName = 'Database')] [System.String] $DatabaseServer, ## RES ONE Service Store database name [Parameter(Mandatory, ValueFromPipelineByPropertyName, ParameterSetName = 'Database')] [System.String] $DatabaseName, ## RES ONE Service Store authentication credential [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName, ParameterSetName = 'RestApi')] [Parameter(ValueFromPipeline, ValueFromPipelineByPropertyName, ParameterSetName = 'Database')] [System.Management.Automation.PSCredential] [System.Management.Automation.CredentialAttribute()] $Credential, ## RES ONE Service Store database name [Parameter(ValueFromPipelineByPropertyName, ParameterSetName = 'Database')] [ValidateSet('MSSQL')] [System.String] $Provider = 'MSSQL', ## Use https connection [Parameter(ValueFromPipelineByPropertyName, ParameterSetName = 'RestApi')] [System.Management.Automation.SwitchParameter] $UseHttps, ## Return the session hashtable to the pipeline [Parameter(ValueFromPipelineByPropertyName, ParameterSetName = 'RestApi')] [Parameter(ValueFromPipelineByPropertyName, ParameterSetName = 'Database')] [System.Management.Automation.SwitchParameter] $PassThru ) process { if ($null -eq $script:_RESONEServiceStoreSession) { $script:_RESONEServiceStoreSession = @{}; } if ($PSCmdlet.ParameterSetName -eq 'RestApi') { $body = @{ username = $Credential.UserName; password = $Credential.GetNetworkCredential().Password; logintype = 'windows'; } $uri = Get-ROSSResourceUri -Server $Server -Authentication -UseHttps:$UseHttps; $response = Invoke-ROSSRestMethod -Uri $uri -Method Post -Body $body -NoAuthorization; $script:_RESONEServiceStoreSession['Server'] = $Server; $script:_RESONEServiceStoreSession['AuthorizationToken'] = $response.AuthorizationToken; $script:_RESONEServiceStoreSession['UseHttps'] = $UseHttps.ToBool(); } elseif ($PSCmdlet.ParameterSetName -eq 'Database') { $script:_RESONEServiceStoreSession['DbServer'] = $DatabaseServer; $script:_RESONEServiceStoreSession['DbName'] = $DatabaseName; [ref] $null = $PSBoundParameters.Remove('PassThru'); if ($Provider -eq 'MSSQL') { $script:_RESONEServiceStoreSession['DbConnection'] = New-ROSSMSSQLDatabaseConnection @PSBoundParameters; } } if ($PassThru) { return $script:_RESONEServiceStoreSession; } } #end process } #end function Connect-ROSSSession |