@ -14,10 +14,26 @@ param (
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    [ ValidateNotNullOrEmpty ( ) ] 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    [ securestring ] 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    $AccessToken  =  ( ( Get-Content  -Path  $env:ACCESSTOKEN_FILE  -Raw ) . Trim ( )  ` 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                    |  ConvertTo-SecureString  -AsPlainText  -Force ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                    |  ConvertTo-SecureString  -AsPlainText  -Force ) , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    [ switch ] 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    $Unencrypted  =  $false  #is alternatively set with $env:UNENCRYPTED 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				$ErrorActionPreference  =  'Stop' 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				if ( $env:UNENCRYPTED  -eq  'TRUE' )  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    $Unencrypted  =  $true 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				} 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				#used in Invoke-RestMethod 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				$authentication_headers  =  @ { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    Authentication  =  'Bearer' 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    Token  =  $AccessToken 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    ContentType  =  'application/json' 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    AllowUnencryptedAuthentication  =  $Unencrypted 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				} 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				$account_data_type_prefix  =  'de.lubiland.pingposh.' 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				$account_data_types  =  @ { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    next_batch  =  $account_data_type_prefix + 'next_batch' 
 
			
		 
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
			
			 
			 
			
				@ -44,18 +60,13 @@ function Send-MatrixEvent {
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    $uri  =  '{0}_matrix/client/r0/rooms/{1}/send/{2}/{3}'  -f  $HomeServer , $RoomId , $EventType , $txn_id 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    $header_splat  =  @ { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        Authentication  =  'Bearer' 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        Token  =  $AccessToken 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        ContentType  =  'application/json' 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    } 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    $http_splat  =  @ { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        Uri  =  $uri 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        Method  =  'Put' 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        Body  =  $Event 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    } 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    $response  =  Invoke-RestMethod  @ header_ splat  @http_splat 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    $response  =  Invoke-RestMethod  @ authentication_ headers @http_splat 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    if ( $response . event_id )  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        Write-Host  ( 'Event {0} sent to room {1}'  -f  $response . event_id , $RoomId ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    } 
 
			
		 
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
			
			 
			 
			
				@ -215,17 +226,12 @@ function Join-MatrixRoom {
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    $uri  =  '{0}_matrix/client/r0/rooms/{1}/join'  -f  $HomeServer , $RoomId 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    $header_splat  =  @ { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        Authentication  =  'Bearer' 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        Token  =  $AccessToken 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        ContentType  =  'application/json' 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    } 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    $http_splat  =  @ { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        Uri  =  $uri 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        Method  =  'Post' 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    } 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    $response  =  Invoke-RestMethod  @ header_ splat  @http_splat 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    $response  =  Invoke-RestMethod  @ authentication_ headers @http_splat 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    if ( $response . room_id )  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        Write-Host  ( 'Joined room {0}'  -f  $RoomId ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    }  else  { 
 
			
		 
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
			
			 
			 
			
				@ -241,17 +247,12 @@ function Get-MatrixAccountData {
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    $uri  =  '{0}_matrix/client/r0/user/{1}/account_data/{2}'  -f  $HomeServer , $UserId , $Type 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    $header_splat  =  @ { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        Authentication  =  'Bearer' 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        Token  =  $AccessToken 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        ContentType  =  'application/json' 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    } 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    $http_splat  =  @ { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        Uri  =  $uri 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        Method  =  'Get' 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    } 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    $response  =  Invoke-RestMethod  @ header_ splat  @http_splat 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    $response  =  Invoke-RestMethod  @ authentication_ headers @http_splat 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    return  $response 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				} 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				function   Set-MatrixAccountData  { 
 
			
		 
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
			
			 
			 
			
				@ -267,18 +268,13 @@ function Set-MatrixAccountData {
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    $uri  =  '{0}_matrix/client/r0/user/{1}/account_data/{2}'  -f  $HomeServer , $UserId , $Type 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    $header_splat  =  @ { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        Authentication  =  'Bearer' 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        Token  =  $AccessToken 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        ContentType  =  'application/json' 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    } 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    $http_splat  =  @ { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        Uri  =  $uri 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        Method  =  'Put' 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        Body  =  $Content  |  ConvertTo-Json  -Compress 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    } 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    Invoke-RestMethod  @ header_ splat  @http_splat  |  Out-Null 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    Invoke-RestMethod  @ authentication_ headers @http_splat  |  Out-Null 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				} 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				function   Get-NextBatchToken  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    $account_data  =  Get-MatrixAccountData  -Type  $account_data_types . next_batch 
 
			
		 
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
			
			 
			 
			
				@ -313,16 +309,11 @@ function Invoke-MatrixSync {
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        $uri  + =  '&filter={0}'  -f  $FilterId 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    } 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    $header_splat  =  @ { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        Authentication  =  'Bearer' 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        Token  =  $AccessToken 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        ContentType  =  'application/json' 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    } 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    $http_splat  =  @ { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        Uri  =  $uri 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    } 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    $response  =  Invoke-RestMethod  @ header_ splat  @http_splat 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    $response  =  Invoke-RestMethod  @authentication_headers  @http_splat 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    #.PSObject.Properties because the rooms under .join are [NoteProperty] 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    $room_ids  =  $response . rooms . join . PSObject . Properties . Name 
 
			
		 
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
			
			 
			 
			
				@ -352,11 +343,6 @@ function Get-MatrixFilterId {
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    $uri  =  '{0}_matrix/client/r0/user/{1}/filter'  -f  $HomeServer , $UserId 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    $header_splat  =  @ { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        Authentication  =  'Bearer' 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        Token  =  $AccessToken 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        ContentType  =  'application/json' 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    } 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    $http_splat  =  @ { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        Uri  =  $uri 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        Method  =  'Post' 
 
			
		 
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
			
			 
			 
			
				@ -365,7 +351,7 @@ function Get-MatrixFilterId {
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        Body  =  $Filter  |  ConvertTo-Json  -Compress  -Depth  3 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    } 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    $response  =  Invoke-RestMethod  @ header_ splat  @http_splat 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    $response  =  Invoke-RestMethod  @ authentication_ headers @http_splat 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    return  $response . filter_id 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				}