我有一个 Office 365 租户,我在其上执行以下命令
Get-MsolUser -All
在服务器AI上获得
get-msoluser : The formatter threw an exception while trying to deserialize the message: There was an error while
trying to deserialize parameter http://provisioning.microsoftonline.com/:ListUsersResult. The InnerException message
was 'Maximum number of items that can be serialized or deserialized in an object graph is '65536'. Change the object
graph or increase the MaxItemsInObjectGraph quota. '. Please see InnerException for more details.
At line:1 char:1
+ get-msoluser -All
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : OperationStopped: (:) [Get-MsolUser], NetDispatcherFaultException
+ FullyQualifiedErrorId : System.ServiceModel.Dispatcher.NetDispatcherFaultException,Microsoft.Online.Administrati
on.Automation.GetUser
在与同一租户通信的服务器 b 上,它工作正常。两者都具有相同版本的 Azure Active Directory Powershell 命令行。
通过谷歌搜索,我发现你可以将设置MaxItemsInObjectGraph
为更高的值,但我不知道在哪里可以找到正确的配置文件来为 powershell 执行此操作。或者甚至不知道是什么更改导致了这种情况,因为几周前问题服务器还运行正常。
答案1
添加
<dataContractSerializer maxItemsInObjectGraph="2147483646" />
你的机器配置在
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\配置
或者对于较旧的 .NET,使用以下路径:
目录:\Windows\Microsoft.NET\Framework64\v2.0.50727\CONFIG
(使用框架6464 位文件夹,否则使用框架文件夹)
必须添加文本端点行为元素。所以我的看起来像这样:
<endpointBehaviors>
<dataContractSerializer maxItemsInObjectGraph="2147483646" />
<Microsoft.VisualStudio.Diagnostics.ServiceModelSink.Behavior/>
</endpointBehaviors>
答案2
对于那些使用未修改的 machine.config 文件的人来说,这是一个更完整的答案。
1)使用以下命令检查你的 powershell 版本 $psversiontable.psversion.tostring()
2)移动到与你的 powershell 版本对应的文件夹 C:\Windows\Microsoft.NET\Framework*\*\CONFIG
3)修改machine.config。
下列各行之间:
</configSections>
<configProtectedData defaultProvider="RsaProtectedConfigurationProvider">
添加:
<system.serviceModel>
<commonBehaviors>
<endpointBehaviors>
<dataContractSerializer maxItemsInObjectGraph="2147483647"/>
</endpointBehaviors>
</commonBehaviors>
</system.serviceModel>