New-MgEntitlementManagementAccessPackageAssignmentPolicy - Can't Set LocalizedText for Choices
Can't get New-MgEntitlementManagementAccessPackageAssignmentPolicy to populate the localizedTexts within Choices. Successfully working with JSON via Invoke-MgGraphRequest. Looks like the command does not include the localizedTexts within the body of the request. Have tried both the Text property detailed in the PowerShell documentation as well as the displayValue used in the JSON payload.
$body = @{
AccessPackageId = "xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx"
DisplayName = "Test Policy"
Description = "This is a test policy"
CanExtend = $false
DurationInDays = 0
ExpirationDateTime = $null
RequestorSettings = @{
ScopeType = "AllExistingDirectorySubjects"
AcceptRequests = $true
}
RequestApprovalSettings = @{
IsApprovalRequired = $false
IsApprovalRequiredForExtension = $false
IsRequestorJustificationRequired = $false
ApprovalMode = "NoApproval"
}
Questions = @(
@{
IsRequired = $true
Text = @{
"@odata.type" = "#microsoft.graph.accessPackageLocalizedContent"
DefaultText = "Are you good?"
LocalizedTexts = @(
@{
Text = "Are you good?"
LanguageCode = "en-GB"
},
@{
Text = "¿Eres bueno?"
LanguageCode = "es-SP"
}
)
}
Sequence = 0
"@odata.type" = "#microsoft.graph.accessPackageMultipleChoiceQuestion"
allowsMultipleSelection = $false
choices = @(
@{
actualValue = "Yes"
Text = @{
DefaultText = "Yes"
LocalizedTexts = @(
@{
Text = "Yes"
LanguageCode = "en-GB"
},
@{
Text = "Sí"
LanguageCode = "es-ES"
}
)
}
}
@{
actualValue = "No"
displayValue = @{
defaultText = "No"
localizedTexts = @(
@{
text = "No"
languageCode = "en-GB"
},
@{
text = "Not"
languageCode = "es-SP"
}
)
}
}
)
}
)
}
New-MgEntitlementManagementAccessPackageAssignmentPolicy -BodyParameter $body -Debug
Output - note the choices property missing the localizedTexts:
DEBUG: ============================ HTTP REQUEST ============================
HTTP Method:
POST
Absolute Uri:
https://graph.microsoft.com/beta/identityGovernance/entitlementManagement/accessPackageAssignmentPolicies
Headers:
SdkVersion : graph-powershell/1.10.0,Graph-dotnet-1.25.1
FeatureFlag : 00000047
Cache-Control : no-store, no-cache
User-Agent : Mozilla/5.0,(Linux; Linux 5.4.0-1085-azure #90~18.04.1-Ubuntu SMP Fri Jun 10 18:32:22 UTC 2022; en-US),PowerShell/7.2.5,New-MgEntitlementManagementAccessPackageAssignmentPolicy_Create
Accept-Encoding : gzi
Body:
{
"description": "This is a test policy",
"accessPackageId": "xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx",
"canExtend": false,
"displayName": "Test Policy",
"durationInDays": 0,
"questions": [
{
"choices": [
{
"actualValue": "Yes"
},
{
"actualValue": "No"
}
],
"allowsMultipleSelection": false,
"@odata.type": "#microsoft.graph.accessPackageMultipleChoiceQuestion",
"isRequired": true,
"sequence": 0,
"text": {
"@odata.type": "#microsoft.graph.accessPackageLocalizedContent",
"defaultText": "Are you good?",
"localizedTexts": [
{
"languageCode": "en-GB",
"text": "Are you good?"
},
{
"languageCode": "es-SP",
"text": "¿Eres bueno?"
}
]
}
}
],
"requestApprovalSettings": {
"approvalMode": "NoApproval",
"isApprovalRequired": false,
"isApprovalRequiredForExtension": false,
"isRequestorJustificationRequired": false
},
"requestorSettings": {
"acceptRequests": true,
"scopeType": "AllExistingDirectorySubjects"
}
}
DEBUG: ============================ HTTP RESPONSE ============================
Status Code:
Created
Headers:
Cache-Control : private
Transfer-Encoding : chunked
Location : https://igaelm-asev3-ecapi-neu.igaelm-asev3-environment-neu.p.azurewebsites.net/api/v1/accessPackageAssignmentPolicies('xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx')
Vary : Accept-Encoding
Strict-Transport-Security : max-age=31536000
request-id : xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx
client-request-id : xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx
x-ms-ags-diagnostic : {"ServerInfo":{"DataCenter":"West Europe","Slice":"E","Ring":"5","ScaleUnit":"003","RoleInstance":"AM1PEPF000105CC"}}
OData-Version : 4.0
Date : Thu, 07 Jul 2022 17:17:28 GM
Body:
{
"@odata.context": "https://graph.microsoft.com/beta/$metadata#identityGovernance/entitlementManagement/accessPackageAssignmentPolicies/$entity",
"id": "xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx",
"displayName": "Test Policy",
"description": "This is a test policy",
"createdDateTime": "2022-07-07T17:17:29.3066353Z",
"createdBy": "[email protected]",
"modifiedBy": "[email protected]",
"canExtend": false,
"durationInDays": 0,
"expirationDateTime": null,
"accessPackageId": "xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx",
"modifiedDateTime": "2022-07-07T17:17:29.3223194Z",
"accessReviewSettings": null,
"questions": [
{
"@odata.type": "#microsoft.graph.accessPackageMultipleChoiceQuestion",
"id": "xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx",
"isRequired": true,
"isAnswerEditable": null,
"sequence": 0,
"allowsMultipleSelection": false,
"text": {
"defaultText": "Are you good?",
"localizedTexts": [
{
"text": "Are you good?",
"languageCode": "en-GB"
},
{
"text": "¿Eres bueno?",
"languageCode": "es-SP"
}
]
},
"choices": [
{
"actualValue": "Yes",
"displayValue": {
"defaultText": "Yes",
"localizedTexts": []
}
},
{
"actualValue": "No",
"displayValue": {
"defaultText": "No",
"localizedTexts": []
}
}
]
}
],
"requestorSettings": {
"scopeType": "AllExistingDirectorySubjects",
"acceptRequests": true,
"allowedRequestors": []
},
"requestApprovalSettings": {
"isApprovalRequired": false,
"isApprovalRequiredForExtension": false,
"isRequestorJustificationRequired": false,
"approvalMode": "NoApproval",
"approvalStages": []
}
}
DEBUG: [CmdletEndProcessing]: - New-MgEntitlementManagementAccessPackageAssignmentPolicy end processing.
Thanks for bringing this to our attention.
This is due to a serialization bug in the code generator that's also affecting https://github.com/Azure/azure-powershell/issues/12267.
As a workaround, you can create the choices objects that are not being serialized as a dictionary and set them on the body object:
$LocalizedYes = @{
defaultText = "Yes"
localizedTexts = @(
@{
text = "Yes"
languageCode = "en-GB"
},
@{
text = "Sí"
languageCode = "es-ES"
}
)
}
$ChoiceYes = [System.Collections.Generic.Dictionary[System.String, System.Object]]::new()
$ChoiceYes.Add("actualValue", "Yes")
$ChoiceYes.Add("displayValue", $LocalizedYes)
$LocalizedNo = @{
defaultText = "No"
localizedTexts = @(
@{
text = "No"
languageCode = "en-GB"
},
@{
text = "Not"
languageCode = "es-SP"
}
)
}
$ChoiceNo = [System.Collections.Generic.Dictionary[System.String, System.Object]]::new()
$ChoiceNo.Add("actualValue", "No")
$ChoiceNo.Add("displayValue", $LocalizedNo)
$body = @{
AccessPackageId = "xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx"
DisplayName = "Test Policy"
Description = "This is a test policy"
CanExtend = $false
DurationInDays = 0
ExpirationDateTime = $null
RequestorSettings = @{
ScopeType = "AllExistingDirectorySubjects"
AcceptRequests = $true
}
RequestApprovalSettings = @{
IsApprovalRequired = $false
IsApprovalRequiredForExtension = $false
IsRequestorJustificationRequired = $false
ApprovalMode = "NoApproval"
}
Questions = @(
@{
IsRequired = $true
Text = @{
"@odata.type" = "#microsoft.graph.accessPackageLocalizedContent"
DefaultText = "Are you good?"
LocalizedTexts = @(
@{
Text = "Are you good?"
LanguageCode = "en-GB"
},
@{
Text = "¿Eres bueno?"
LanguageCode = "es-SP"
}
)
}
Sequence = 0
"@odata.type" = "#microsoft.graph.accessPackageMultipleChoiceQuestion"
allowsMultipleSelection = $false
choices = @($ChoiceYes, $ChoiceNo)
}
)
}
New-MgEntitlementManagementAccessPackageAssignmentPolicy -BodyParameter $body -Debug
I'll escalate this to the code generator team.
The issue has been fixed as of the latest version of the module (1.18.0). See debug output:
DEBUG: ============================ HTTP REQUEST ============================
HTTP Method:
POST
Absolute Uri:
https://graph.microsoft.com/beta/identityGovernance/entitlementManagement/accessPackageAssignmentPolicies
Headers:
FeatureFlag : 00000047
Cache-Control : no-store, no-cache
SdkVersion : graph-powershell/1.18.0,Graph-dotnet-1.25.1
User-Agent : Mozilla/5.0,(Windows NT 10.0; Microsoft Windows 10.0.22621; en-US),PowerShell/7.3.1
Accept-Encoding : gzip
Body:
{
"description": "This is a test policy",
"accessPackageId": "xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx",
"canExtend": false,
"displayName": "Test Policy",
"durationInDays": 0,
"questions": [
{
"choices": [
{
"actualValue": "Yes",
"Text": {
"DefaultText": "Yes",
"LocalizedTexts": [
{
"LanguageCode": "en-GB",
"Text": "Yes"
},
{
"LanguageCode": "es-ES",
"Text": "Sí"
}
]
}
},
{
"actualValue": "No",
"displayValue": {
"defaultText": "No",
"localizedTexts": [
{
"languageCode": "en-GB",
"text": "No"
},
{
"languageCode": "es-SP",
"text": "Not"
}
]
}
}
],
"allowsMultipleSelection": false,
"@odata.type": "#microsoft.graph.accessPackageMultipleChoiceQuestion",
"isRequired": true,
"sequence": 0,
"text": {
"@odata.type": "#microsoft.graph.accessPackageLocalizedContent",
"defaultText": "Are you good?",
"localizedTexts": [
{
"languageCode": "en-GB",
"text": "Are you good?"
},
{
"languageCode": "es-SP",
"text": "¿Eres bueno?"
}
]
}
}
],
"requestApprovalSettings": {
"approvalMode": "NoApproval",
"isApprovalRequired": false,
"isApprovalRequiredForExtension": false,
"isRequestorJustificationRequired": false
},
"requestorSettings": {
"acceptRequests": true,
"scopeType": "AllExistingDirectorySubjects"
}
}
Please open a new issue with repro steps if the issue still exists.