我正在 PowerShell 中编写一个 Azure Function App 来管理 Exchange Online 用户的邮箱设置。 (否 不可用 vs MS Graph) 我想看看有哪些小组成员。当我发出命令时
$getDistListOutput = Get-DistributionGroupMember @getDistListparms | Where-Object {$_.alias -ne $SelfIdentity} | Select-Object Identity
我可以在
$getDistListOutput
、空、一个用户或多个用户中获得三种类型的结果之一。当我获取输出 $getDistListOutput
并将其转换为 JSON 并添加到现有 JSON 结构时,我会遇到以下三种情况之一:
//没有群成员
{
"ForwardingAddressID": "{\"Identity\":\"smtp:[email protected]\"}",
"GroupMembers": null
}
//单个组成员
{
"ForwardingAddressID": "{\"Identity\":\"smtp:[email protected]\"}",
"GroupMembers": "{\"Identity\":\"smtp:[email protected]\"}",
}
//多个群组成员
{
"ForwardingAddressID": "{\"Identity\":\"smtp:[email protected]\"}",
"GroupMembers": ["{\"Identity\":\"smtp:[email protected]\"}","{\"Identity\":\"smtp:[email protected]\"}"]
}
不,我正在尝试将返回的数据映射到 C# 类中。以下内容适用于
ForwardingAddressID
,尽管我似乎无法想出使用其 3 个变体解码 GroupMembers 的正确方法。
ExchPS_GetUserMailData_Reply getUserMailDataReplyDeserialized = JsonConvert.DeserializeObject<ExchPS_GetUserMailData_Reply>(AzureResponseDeserialized.OutputData);
if (!(string.IsNullOrWhiteSpace(getUserMailDataReplyDeserialized.ForwardingAddressID)))
{
ExchPS_UserIdentity_Data forwardingAddressIDSerializedReply = JsonConvert.DeserializeObject<ExchPS_UserIdentity_Data>(getUserMailDataReplyDeserialized.ForwardingAddressID);
if ((forwardingAddressIDSerializedReply != null) )
{
if (forwardingAddressIDSerializedReply.Identity != null)
{
ForwardMbx = true;
ForwardMbxTo = forwardingAddressIDSerializedReply.Identity;
}
else
{
ForwardMbx = false;
ForwardMbxTo = "";
}
}
}
如果 GroupMembers 的值中没有设置任何内容,则不要执行任何操作。 如果第一个有 [,则它是一个数组。 如果第一个有 {,则它是单个。
if (!(string.IsNullOrWhiteSpace(getUserMailDataReplyDeserialized.GroupMembers)))
{
if (getUserMailDataReplyDeserialized.GroupMembers[0] == '[')
{
ExchPS_GroupMembers_Reply[] getGroupMembersSerializedReply = JsonConvert.DeserializeObject<ExchPS_GroupMembers_Reply[]>(getUserMailDataReplyDeserialized.GroupMembers);
if ((getGroupMembersSerializedReply != null))
{
if (getGroupMembersSerializedReply.First != null)
{
ForwardMbx = true;
//ForwardMbxTo = getGroupMembersSerializedReply.Identity[0].Identity;
}
else
{
ForwardMbx = false;
}
}
} else if (getUserMailDataReplyDeserialized.GroupMembers[0] == '{')
{
ExchPS_UserIdentity_Data getGroupMembersSerializedReply = JsonConvert.DeserializeObject<ExchPS_UserIdentity_Data>(getUserMailDataReplyDeserialized.GroupMembers);
if (getGroupMembersSerializedReply != null)
{
if (getGroupMembersSerializedReply.Identity != null)
{
ForwardMbx = true;
ForwardMbxTo = getGroupMembersSerializedReply.Identity;
}
else
{
ForwardMbx = false;
}
}
}
}
定义的类:
// Single User Identity
class ExchPS_UserIdentity_Data
{
[JsonProperty(nameof(Identity))]
public string Identity { get; set; } = string.Empty;
}
// Array of User Identities
[JsonArray]
class ExchPS_GroupMembers_Reply
{
[JsonProperty(nameof(Identity))]
public string Identity { get; set; } = string.Empty;
}
class ExchPS_GetUserMailData_Reply
{
[JsonProperty(nameof(GroupMembers))]
public string GroupMembers { get; set; } = string.Empty;
[JsonProperty(nameof(ForwardingAddressID))]
public string ForwardingAddressID { get; set; } = string.Empty;
}
因此,在 PowerShell JSON 创建方面,我将
-AsArray
添加到哈希表的 ConvertTo-Json 中。这允许 One 或 >One 的情况全部为 Array(List) 类型
$getDistListOutput = Get-DistributionGroupMember @getDistListparms | Where-Object {$_.alias -ne $DLIdentity} | Select-Object Identity
$PSCmdOutput = @{
ForwardingAddressID = $getForwardingAddressIDOutput | ConvertTo-Json -Compress -Depth 10
GroupMembers = $getDistListOutput | ConvertTo-Json -AsArray -Compress -Depth 10
AutoReplyConfig = $getMbcAutoReplytConfigOutput | ConvertTo-Json -Compress -Depth 10
}
在C#接收端。我将 GroupMembers 类设置为
[JsonArray]
,将成员设置为 List<ExchPS_UserIdentity_Data>
类型
// Single User Identity
class ExchPS_UserIdentity_Data
{
[JsonProperty(nameof(Identity))]
public string Identity { get; set; } = string.Empty;
}
// Array of User Identities
[JsonArray]
class ExchPS_GroupMembers_Reply
{
[JsonProperty(nameof(GroupMembers))]
public List<ExchPS_UserIdentity_Data>? GroupMembers { get; set; }
}
//Reply from Azure Function
class AzureReply
{
[JsonProperty("OutputData")]
public string OutputData { get; set; } = string.Empty;
[JsonProperty("PSCommandOutput")]
public string PSCommandOutput { get; set; } = string.Empty;
[JsonProperty("Error")]
public string Error { get; set; } = string.Empty;
[JsonProperty("Exception")]
public string Exception { get; set; } = string.Empty;
}
从返回的 JSON 成员中获取数据的代码。
//Get the reply from Azure and get the members
AzureReply AzureResponseDeserialized = JsonConvert.DeserializeObject<AzureReply>(AzureResponse);
[...snip...]
//Get the OutputData member
ExchPS_GetUserMailData_Reply getUserMailDataReplyDeserialized = JsonConvert.DeserializeObject<ExchPS_GetUserMailData_Reply>(AzureResponseDeserialized.OutputData);
//If the GroupMembers is NULL we didn't get a member
if (!(string.IsNullOrWhiteSpace(getUserMailDataReplyDeserialized.GroupMembers)))
{
List<ExchPS_UserIdentity_Data> getGroupMembersDeserializedReply = JsonConvert.DeserializeObject<List<ExchPS_UserIdentity_Data>>(getUserMailDataReplyDeserialized.GroupMembers);
if ((getGroupMembersDEserializedReply != null))
{
//Just deal with the First Member at this point.
ExchPS_UserIdentity_Data firstgroupmember = getGroupMembersDeserializedReply.First();
if (!(string.IsNullOrWhiteSpace(firstgroupmember.Identity)))
{
ForwardSendAs = true;
ForwardSendAs1 = true;
ForwardTo = firstgroupmember.Identity;
}
else
{
ForwardSendAs = false;
}
}
}