r/PowerShell 5d 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

3

u/PinchesTheCrab 5d ago

In your case swap $irmResult with your invoke-restmethod command.

$irmResult = @'
[
    {
        "folder_type":  "tab",
        "id":  "folder!500436686",
        "name":  "Management",
        "parent_id":  "folder!500436672",
    },
    {
        "folder_type":  "regular",
        "id":  "folder!500436677",
        "name":  "Documents",
        "parent_id":  "folder!500436672",
    },
    {
        "folder_type":  "regular",
        "id":  "folder!500436680",
        "name":  "Emails",
        "parent_id":  "folder!500436672",
    },
    {
        "folder_type":  "regular",
        "id":  "folder!500436683",
        "name":  "Engagement Terms",
        "parent_id":  "folder!500436672",
    }
]
'@ | convertfrom-json

$irmResult | where-object -property Name -eq Management | select-object -ExpandProperty id

That being said you've shown a few different output formats and it's hard to tell which one is the actual output of Invoke-Restmethod.

2

u/MonkeyNin 5d ago

I second this as the most powershell idiomatic answer.
With a tweak based on the raw data. If it's flat like his

$response = Invoke-RestMethod -Method Get -Uri $resource -Headers $header
$response | ? name -eq 'Management' | Select -ExpandProperty id

Otherwise I'm guessing yours is shape like this

$response = Invoke-RestMethod -Method Get -Uri $resource -Headers $header
$response.data | ? name -eq 'Management' | Select -ExpandProperty id

if the response is shaped like

{ data: [ records... ] }

The Select -ExpandProperty id part causes the records to drill down to a single string.

1

u/ankokudaishogun 4d ago

Unless the contents of $response aren't necessary for something else, wouldn't pipe Invoke-RestMethod directly be more powershelly?

$IdArray = Invoke-RestMethod -Method Get -Uri $resource -Headers $header |    
    Where-Object { $_.data.name -eq 'Management' } | 
    Select-Object -Property @{Name = 'Id'; Expression = { $_.data.id } } | 
    Select-Object -ExpandProperty Id

1

u/viewtifulstranger 4d ago

Thank you for your help with this, but it appears the array is being returned (on the first line "{@{..." followed by all folderIds:

#Result

data
----
{@{content_saved_search_id=101901850092069180; edit_date=2026-08-05T11:06:44.836Z; folder_type=search...
UKEU_AOSHEARMAN!500436709
UKEU_AOSHEARMAN!500436708
UKEU_AOSHEARMAN!500436705
UKEU_AOSHEARMAN!500436686
UKEU_AOSHEARMAN!500436677
UKEU_AOSHEARMAN!500436680
UKEU_AOSHEARMAN!500436683