Private/New-WPSWSession.ps1

<#
.Synopsis
Connects to Wilma and sets session variables
#>

function New-WPSWSession (){
    [CmdletBinding()]
    param(
      [string]
      $site = 'DEFAULT'
    )
    begin {
    $config = Get-WPSWConfig -site $site

    Write-Verbose "Starting Get-WPSWSession"
    Write-Debug "Config: $config"

    $Login = $config.cred.UserName
    $password =  [System.Runtime.InteropServices.Marshal]::PtrToStringAuto([System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($config.cred.Password))

    [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
    $reply = Invoke-RestMethod -Uri "$($config.url)/index_json"
    $SessionId=$reply.SessionID
    }
    process {
      try{
      $data= "$Login|$SessionId|$($config.apikey)"
      $hashString= Get-SHA1stringHash( $data )
      $Apikey = "sha1:$hashString"

      $LoginParameters = @{
        Login = $Login
        Password = $Password
        SessionId = $SessionID
        ApiKey = $Apikey
        format = 'json'
      }

      $reply = Invoke-RestMethod -Method Post -Uri "$($config.url)/login" -Form $LoginParameters -SessionVariable WilmaSession

      $result = @{
          LoginResult = $reply.LoginResult
          WilmaId     = $reply.WilmaId
          ApiVersion  = $reply.ApiVersion
          FormKey     = $reply.FormKey
          ConnectIds  = $reply.ConnectIds
          Slug        = $reply.Slug
          Name        = $reply.Name
          Type        = $reply.Type
          PrimusId    = $reply.PrimusId
          School      = $reply.School
      }

      if ($result.LoginResult -ne "OK") {
        Write-Debug $result
        Throw "Kirjautuminen epäonnistui"
      } else {
        @{WilmaSession=$WilmaSession
          Result = $result
          config = $config
          Site   = $site}
      }
    }
    catch {
      $ErrorMessage = $_.Exception.Message
      throw{"New-WPSWSession cannot connect to site: $ErrorMessage"}
    }
  }
}