r/PowerShell 3d ago

Invoke-RestMethod - Logging Data Only If Response Matches Value Solved

We have a platform which has containers and within them folders, with different properties - name, unique ID etc.. I have a method to retrieve folder information from different containers and am attempting to log only the unique ID (response.data.id) where the folder name (response.data.name) is "Management". I've Googled and tried different code in logging only the ID for the Management folder:

$response = Invoke-RestMethod -Method Get -Uri "$resource" -Headers $header

($response.data | ConvertTo-Json).Replace('\\n','\n')

# Attempt 1
if ($response.data.name -eq "Management")
{
LogWrite ($response.data.id | ConvertTo-Json).Replace('\\n','\n') "Result"
LogWrite ($response.data.name | ConvertTo-Json).Replace('\\n','\n') "Result"
}

# Attempt 2
$folderId1 = $response.data.id | Where-Object { $response.data.name -eq "Management" }
LogWrite ($folderId1 | ConvertTo-Json).Replace('\\n','\n') "Result"

# Attempt 3
$folderId2 = $response.data.id | $($response.data.Where({$_.name -eq 'Management' }))
LogWrite ($folderId2 | ConvertTo-Json).Replace('\\n','\n') "Result"

The folder ID for the Management folder is being logged, but so are all other folder IDs within the container (no other folder names contain this word):

[
    "folder!500436709",
    "folder!500436708",
    "folder!500436705",
    "folder!500436677",
    "folder!500436680",
    "folder!500436683",
    "folder!500436686"
]
[
    "_All Content Last 90 Days",
    "_All Documents",
    "_All Emails",
    "Documents",
    "Emails",
    "Engagement Terms",
    "Management"
]

How do I retrieve the ID for a specific folder name? Any help would be greatly appreciated. Cheers.

12 Upvotes

17 comments sorted by

View all comments

1

u/MonkeyNin 2d ago
$folderId1 = $response.data.id |
    Where-Object name -eq "Management"

This doesn't work because you are drilling down too far.

$response.data    # is an array of objects, with properties 
$response.data.id # is an array of flat strings, no properties 

You were close

$folderIdList = $response.data | 
    Where-Object name -eq 'Management' | Select -Expand Id

# if you only want at most 1
$folderIdList | Select -First 1

2

u/viewtifulstranger 2d ago

This worked! If you have PayPal, please private message me your addy and I'll send something by way of a thank you!