Я думаю, что это как-то связано с тем, что он проходит через лазурную автоматизацию...
Вот что я делаю:
$tBody = @{
'caller'=$caller # this is just a string '[email protected]'
'pscustomobject' = $pscustomobject # this is a pscustom object
}
$passToAction = [pscustomobject]@{
paramblock = $paramBlock # this is a pscustom object and one of the objects is another pscustomobject called pscustomobject which is a pscustomobject that was convertto-csv -notypeinformation converted
}
$passToActionJSON = $passToAction| ConvertTo-Json -Depth 99
Короче говоря, с другой стороны... Я делаю столько преобразований из-json, сколько могу. Но в итоге я получаю строку, которая выглядит так:
$b.paramblock.pscustomobject
@{TimeGenerated=2020-12-22T23:22:17.527Z; protocol=Kerberos; AuthServer=stuff; IpAddress=suff; NonExistentUser=stuff; TargetDomainName=
stuff; vmName=stuff}
@{TimeGenerated=2020-12-22T23:22:17.527Z; protocol=Kerberos; AuthServer=stuff; IpAddress=suff; NonExistentUser=stuff; TargetDomainName=
stuff; vmName=stuff}
@{TimeGenerated=2020-12-22T23:22:17.527Z; protocol=Kerberos; AuthServer=stuff; IpAddress=suff; NonExistentUser=stuff; TargetDomainName=
stuff; vmName=stuff}
У кого-нибудь есть идея, как превратить это обратно во что-то полезное? Чего я действительно хочу, так это обратно в pscustomobject. Если у вас есть лучший способ отправить его, отлично, но я работаю в лазурной автоматизации, поэтому не обещаю, что какой-либо класс .net будет там.
В любом случае, чтобы получить представление о том, как должно выглядеть ваше выражение PowerShell для создания вашей конкретной строки json, попробуйте это $Object = ConvertFrom-Json $Json
(-AsHashTable
), а затем ConvertTo-Expression $Object
Не показывая, откуда берутся все неопределенные переменные и что они должны содержать, я очень сомневаюсь, что кто-то сможет дать вам ответ на этот вопрос.
(Согласитесь с комментариями выше) .. Что такое $caller
тип и значение переменной? Что такое тип и значение переменной $pscustomobject
? Что такое тип и значение переменной $paramBlock
? Ваша «другая сторона» выглядит как массив [PSCustomObject], но в вашем примере не показано использование назначений или объявлений свойств TimeGenerated
, protocol
, AuthServer
, IpAddress
или vmName
.
Итак, вот рабочий процесс, который у меня был
-> $pscustomobject =
--> something = something
--> something2 = ($pscustomobject | convertto-json)
--> something3 = something3
-> $newpscustomobject =
--> paramblock = $pscustomobject
-> $newpscustomobject | convertto-json -depth 99
это превратило его в обычный хлам
Короче говоря, держите каждый pscustomobject на двух уровнях, иначе powershell его поднимет
$paramBlock = @()
$paramBlock = [pscustomobject]@{
ticket_body = $ticket_body
ticket_short_description = $subject
category = 'stuff'
subcategory = 'Other'
assignment_group = 'stuff'
csvname = 'stuff.csv'
location = 'waco'
}
$passToAction = [pscustomobject]@{
paramblock = $paramBlock # pscustomobject
csvattachment = $eventsQueryResults #pscustomobject
}
$passToActionJson = $passToAction | ConvertTo-Json -Depth 99
Invoke-AutomationWatcherAction -Message $subject -Data $passToActionJson
Довольно запутанно... Что такое
$b
? Куда уходит$tbody
?. Попробуйте построить минимальный воспроизводимый пример в своем вопросе. Смотрите также: как задать хороший вопрос