@@ -6,52 +6,49 @@ function New-TeamsAPIGetRequest($Uri, $tenantID, $Method = 'GET', $Resource = '4
66
77 if ((Get-AuthorisedRequest - Uri $uri - TenantID $tenantid )) {
88 $token = Get-GraphToken - TenantID $tenantID - Scope " $Resource /.default"
9-
109 $NextURL = $Uri
1110 $ReturnedData = do {
11+ $handler = $null
12+ $httpClient = $null
13+ $response = $null
1214 try {
13- # Use .NET HttpClient directly to bypass PowerShell HTTP handling issues
14- $httpClient = New-Object System.Net.Http.HttpClient
15- $httpClient.DefaultRequestHeaders.Add (' Authorization' , $token.Authorization )
16- $httpClient.DefaultRequestHeaders.Add (' x-ms-client-request-id' , [guid ]::NewGuid().ToString())
17- $httpClient.DefaultRequestHeaders.Add (' x-ms-client-session-id' , [guid ]::NewGuid().ToString())
18- $httpClient.DefaultRequestHeaders.Add (' x-ms-correlation-id' , [guid ]::NewGuid().ToString())
19- $httpClient.DefaultRequestHeaders.Add (' X-Requested-With' , ' XMLHttpRequest' )
20- $httpClient.DefaultRequestHeaders.Add (' x-ms-tnm-applicationid' , ' 045268c0-445e-4ac1-9157-d58f67b167d9' )
21- $httpClient.DefaultRequestHeaders.Add (' Accept' , ' application/json' )
22- $httpClient.DefaultRequestHeaders.Add (' Accept-Encoding' , ' identity' )
23- $httpClient.DefaultRequestHeaders.Add (' User-Agent' , ' Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36' )
24-
25- # Disable automatic decompression to prevent .NET compression issues
15+ # Create handler and client with compression disabled
2616 $handler = New-Object System.Net.Http.HttpClientHandler
2717 $handler.AutomaticDecompression = [System.Net.DecompressionMethods ]::None
28- $httpClient.Dispose ()
2918 $httpClient = New-Object System.Net.Http.HttpClient($handler )
3019
31- # Re-add headers after creating new client with handler
32- $httpClient.DefaultRequestHeaders.Add (' Authorization' , $token.Authorization )
33- $httpClient.DefaultRequestHeaders.Add (' x-ms-client-request-id' , [guid ]::NewGuid().ToString())
34- $httpClient.DefaultRequestHeaders.Add (' x-ms-client-session-id' , [guid ]::NewGuid().ToString())
35- $httpClient.DefaultRequestHeaders.Add (' x-ms-correlation-id' , [guid ]::NewGuid().ToString())
36- $httpClient.DefaultRequestHeaders.Add (' X-Requested-With' , ' XMLHttpRequest' )
37- $httpClient.DefaultRequestHeaders.Add (' x-ms-tnm-applicationid' , ' 045268c0-445e-4ac1-9157-d58f67b167d9' )
38- $httpClient.DefaultRequestHeaders.Add (' Accept' , ' application/json' )
39- $httpClient.DefaultRequestHeaders.Add (' Accept-Encoding' , ' identity' )
40- $httpClient.DefaultRequestHeaders.Add (' User-Agent' , ' Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36' )
20+ # Add all required headers
21+ $headers = @ {
22+ ' Authorization' = $token.Authorization
23+ ' x-ms-client-request-id' = [guid ]::NewGuid().ToString()
24+ ' x-ms-client-session-id' = [guid ]::NewGuid().ToString()
25+ ' x-ms-correlation-id' = [guid ]::NewGuid().ToString()
26+ ' X-Requested-With' = ' XMLHttpRequest'
27+ ' x-ms-tnm-applicationid' = ' 045268c0-445e-4ac1-9157-d58f67b167d9'
28+ ' Accept' = ' application/json'
29+ ' Accept-Encoding' = ' identity'
30+ ' User-Agent' = ' Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36'
31+ }
32+
33+ foreach ($header in $headers.GetEnumerator ()) {
34+ $httpClient.DefaultRequestHeaders.Add ($header.Key , $header.Value )
35+ }
4136
4237 $response = $httpClient.GetAsync ($NextURL ).Result
4338 $contentString = $response.Content.ReadAsStringAsync ().Result
4439
45- # Clean up
46- $httpClient.Dispose () | Out-Null
47- $handler.Dispose () | Out-Null
48-
49- # Parse JSON
40+ # Parse JSON and return data
5041 $Data = $contentString | ConvertFrom-Json
42+
5143 $Data
5244 if ($noPagination ) { $nextURL = $null } else { $nextURL = $data.NextLink }
5345 } catch {
5446 throw " Failed to make Teams API Get Request $_ "
47+ } finally {
48+ # Proper cleanup in finally block to ensure disposal even on exceptions
49+ if ($response ) { $response.Dispose () }
50+ if ($httpClient ) { $httpClient.Dispose () }
51+ if ($handler ) { $handler.Dispose () }
5552 }
5653 } until ($null -eq $NextURL )
5754 return $ReturnedData
0 commit comments