Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 意外的';原始值';从JSON读取器读取时发现节点。A';星光&x27;应为节点_Powershell_Graph - Fatal编程技术网

Powershell 意外的';原始值';从JSON读取器读取时发现节点。A';星光&x27;应为节点

Powershell 意外的';原始值';从JSON读取器读取时发现节点。A';星光&x27;应为节点,powershell,graph,Powershell,Graph,我有一个Azure AD应用程序,需要在Powershell服务主体的appRoles部分中添加一个额外的appRole。我使用Invoke rest方法调用具有以下API Url的图形API: Invoke rest方法返回一个PSCustomObject,然后我在appRoles部分添加另一个PSCustomObject。然后,我将PSCustomObject转换为JSON,并希望将JSON写回服务主体。问题是,当我想将JSON写回服务主体时,会收到错误消息: 调用RestMethod:远程

我有一个Azure AD应用程序,需要在Powershell服务主体的appRoles部分中添加一个额外的appRole。我使用Invoke rest方法调用具有以下API Url的图形API:

Invoke rest方法返回一个PSCustomObject,然后我在appRoles部分添加另一个PSCustomObject。然后,我将PSCustomObject转换为JSON,并希望将JSON写回服务主体。问题是,当我想将JSON写回服务主体时,会收到错误消息:

调用RestMethod:远程服务器返回错误:(400)请求错误

我也尝试使用图形浏览器执行此操作,然后收到错误消息:

“从JSON读取器读取时发现意外的‘PrimitiveValue’节点。应为‘StartArray’节点。”

我认为同样的问题也存在于C#:

当我在图形资源管理器中执行“获取”操作时,每个程序都会显示如下所示:

{
  "allowedMemberTypes": [
    "User"
  ],
  "description": "TEST-ALLOWALL",
  "displayName": "TEST-ALLOWALL",
  "id": "00000000-0000-0000-0000-00000000",
  "isEnabled": true,
  "origin": "ServicePrincipal",
  "value": "ARNROLEVALUE"
},
当我执行Invoke RestMethod,然后转换为Json时,每个Approvle都会显示如下:

{
  "allowedMemberTypes":  "User",
  "description":  "TEST-ALLOWALL",
  "displayName":  "TEST-ALLOWALL",
  "id":  "00000000-0000-0000-0000-00000000",
  "isEnabled":  true,
  "origin":  "ServicePrincipal",
  "value":  "ARNROLEVALUE"
},
如何确保Invoke RestMethod将allowedMemberTypes值类型保留为类似[“User”]的数组/列表,而不是值“User”

我如何使我自己的PSCustomObject allowedMembertypes值和arraylist,以便将其添加到服务主体中

这是我正在使用的代码

$apiUrl = 'https://graph.microsoft.com/beta/servicePrincipals/000000-0000-0000-0000-00000000000'
$Data = Invoke-RestMethod -Headers $graphAPIReqHeader -Uri $apiUrl -Method Get

$obj = New-Object -TypeName PSObject
$obj | Add-Member -MemberType NoteProperty -Name allowedMemberTypes -Value "User"
$obj | Add-Member -MemberType NoteProperty -Name description -Value $RoleName
$obj | Add-Member -MemberType NoteProperty -Name displayName -value $RoleName
$obj | Add-Member -MemberType NoteProperty -Name id -value $Id
$obj | Add-Member -MemberType NoteProperty -Name isEnabled -value "true"
$obj | Add-Member -MemberType NoteProperty -Name origin -value "ServicePrincipal"
$obj | Add-Member -MemberType NoteProperty -Name value -value $Value

$Data.appRoles += $obj
$NewJson = $Data | ConvertTo-Json
$NewData = Invoke-RestMethod -Headers $graphAPIReqHeader -Uri $apiUrl -Body $NewJson -Method Patch -ContentType 'application/json' 

$psObj.AllowedMemberTypes.Gettype()
显示
AllowedMemberTypes
是数组类型

您可以找到代码,并使用它

希望有帮助

$psObj.AllowedMemberTypes.Gettype()
显示
AllowedMemberTypes
是数组类型

您可以找到代码,并使用它


希望有帮助

签出convert json的
-depth
参数。谢谢Moerwald!它适用于我使用Invoke RestMethod和ConvertTo Json-Depth 4收到的PsCustomObject。但是,如何为要添加的PSCustomObject创建字符串数组呢$obj | Add Member-MemberType NoteProperty-Name allowedMemberTypes-Value“User”签出convert json的
-depth
参数。谢谢Moerwald!它适用于我使用Invoke RestMethod和ConvertTo Json-Depth 4收到的PsCustomObject。但是,如何为要添加的PSCustomObject创建字符串数组呢$obj | Add Member-MemberType NoteProperty-Name allowedMemberTypes-Value“User”谢谢您的回答!我现在工作很好。我唯一要做的就是移除深度10。似乎ConvertFrom Json不需要深度参数,只需要ConvertTo JSONTANK您的答案!我现在工作很好。我唯一要做的就是移除深度10。似乎ConvertFrom Json不需要深度参数,只需要ConvertTo Json
$input = @"
{
  "allowedMemberTypes": [
    "User"
  ],
   "description": "TEST-ALLOWALL",
   "displayName": "TEST-ALLOWALL",
  "id": "00000000-0000-0000-0000-00000000",
  "isEnabled": true,
  "origin": "ServicePrincipal",
  "value": "ARNROLEVALUE"
}
"@

$jObject = $input | convertfrom-json

$psObj = [Pscustomobject] @{
   AllowedMemberTypes = $jObject.allowedMemberTypes 
}
 $psObj.AllowedMemberTypes.Gettype()