powershell 使用Invoke-RestMethod的For Each循环问题

mrphzbgm  于 2022-11-10  发布在  Shell
关注(0)|答案(1)|浏览(155)

我目前在创建一个带有Invoke-RestMethod和循环的API的PowerShell脚本时遇到了问题,我花了一整天的时间试图找出哪里出了问题,但我还没有想出什么办法。
以下是我正在尝试编写的代码

$url = "/api/Rest/v1"

$Body = @{
    Username = ""
    Password = ""
    Privatekey = ""
}

$apikey = Invoke-RestMethod -Method 'Post' -Uri $url/Authenticate -Body $body 

$headers = @{
    'Authorization' = $apikey

}

$allusers = Invoke-RestMethod -Uri $url/Users -Method Get -Headers $headers | ft -HideTableHeaders Id

foreach ($userid in $allusers)
{
echo $userid
Invoke-RestMethod -Uri $url/Users/$userid -Method Get -Headers $headers 
echo "test"
}

我对可验证的$apiKey和$alluser没有问题,因为它们似乎输出了我需要的内容,但我认为我的问题是输出在格式表中,但我已经尝试了For Each的其他方法,我不知道我错在哪里
因此,我已经在那里测试了Invoke-RestMethod命令,它们可以正常工作,但当我尝试上面的脚本时,我得到了以下结果。

Invoke-RestMethod : {"Message":"User with specified id was not found."}

对于用户ID,$allUSERS的输出如下所示

dce502ed-e4b6-4b5e-a047-0bf3b34e98c6
dc1e60c1-99a7-479a-a7d6-0dc618c8dd5e
1bd98bb0-a9ee-46b5-8e2e-0e3146aab6b3

又名以下工作没有问题,输出什么我需要的

Invoke-RestMethod -Uri $url/Users/1bd98bb0-a9ee-46b5-8e2e-0e3146aab6b3 -Method Get -Headers $headers

我真的很感激在这方面给我一些指导。

4zcjmb1e

4zcjmb1e1#

标准建议适用于:

  • Format-* cmdlet(如Format-Table,其内置别名为ft)发出输出对象,其唯一目的是向PowerShell的For-Display输出格式化系统提供格式化指令

简而言之:**仅使用Format-* cmdlet格式化数据以供显示,绝不用于后续编程处理-有关详细信息,请参阅this answer
因此,删除| ft -HideTableHeaders Id管道段并使用member-access enumeration提取所有.Id属性值作为数据

$allusers = (Invoke-RestMethod -Uri $url/Users -Method Get -Headers $headers).Id

相关问题