通过PowerShell获取Azure用户的扩展属性
我正在尝试获取Azure用户扩展属性,这些属性通过AADC(Azure AD Connect)从on prem同步到目标租户。作为预读->这里的好文章: 问题是这些扩展可能在目标用户对象上填充,也可能不填充。因此,假设通过单个REST API调用()我得到以下响应:通过PowerShell获取Azure用户的扩展属性,azure,powershell,rest,Azure,Powershell,Rest,我正在尝试获取Azure用户扩展属性,这些属性通过AADC(Azure AD Connect)从on prem同步到目标租户。作为预读->这里的好文章: 问题是这些扩展可能在目标用户对象上填充,也可能不填充。因此,假设通过单个REST API调用()我得到以下响应: $json = '{ "value": [ { "id": "91c0b90e-4ed0-4c69-8b96-b67c07bbb061
$json = '{
"value": [
{
"id": "91c0b90e-4ed0-4c69-8b96-b67c07bbb061"
},
{
"id": "fdcd34dc-e7ab-4045-881d-0fee024c2b55",
"extension_c16821412f864d419a92205ad4820f0c_something": "INXXXXXX213423"
},
{
"id": "90ebc867-6a67-4cf0-a5d9-e4c07c9d3905"
},
{
"id": "80134f5f-892f-4800-9087-924a0c69b7f1"
},
{
"id": "36fae4de-c685-4da5-9458-e165d99fe670"
}
]
}'
问题是-如何很好地记录“可选”定义的属性?
如下所示,仅提供id:
PS> ($json | ConvertFrom-Json).value
id
--
91c0b90e-4ed0-4c69-8b96-b67c07bbb061
fdcd34dc-e7ab-4045-881d-0fee024c2b55
90ebc867-6a67-4cf0-a5d9-e4c07c9d3905
80134f5f-892f-4800-9087-924a0c69b7f1
36fae4de-c685-4da5-9458-e165d99fe670
或者一般来说,使用ConvertFrom-JSON()是否可行?好的,似乎在阅读了这篇漂亮的文章之后,我们能够使用newtonsoft.JSON模块找到解决方案
PS > Import-Module newtonsoft.json
PS >
PS > $json = '{
>> "value": [
>> {
>> "id": "91c0b90e-4ed0-4c69-8b96-b67c07bbb061"
>> },
>> {
>> "id": "fdcd34dc-e7ab-4045-881d-0fee024c2b55",
>> "extension_somedata": "XXXXXX213423"
>> },
>> {
>> "id": "90ebc867-6a67-4cf0-a5d9-e4c07c9d3905"
>> },
>> {
>> "id": "80134f5f-892f-4800-9087-924a0c69b7f1"
>> },
>> {
>> "id": "36fae4de-c685-4da5-9458-e165d99fe670"
>> }
>> ]
>> }'
PS >
PS >
PS > $u = ($json |ConvertFrom-JsonNewtonsoft).value
PS > $u
Name Value
---- -----
id 91c0b90e-4ed0-4c69-8b96-b67c07bbb061
id fdcd34dc-e7ab-4045-881d-0fee024c2b55
extension_somedata XXXXXX213423
id 90ebc867-6a67-4cf0-a5d9-e4c07c9d3905
id 80134f5f-892f-4800-9087-924a0c69b7f1
id 36fae4de-c685-4da5-9458-e165d99fe670
PS > $allRows = @()
PS > foreach($o in $u){
>> $lineObject = New-Object PSObject
>> add-member -inputobject $lineObject -membertype noteproperty -name "id" -value $o.id
>> add-member -inputobject $lineObject -membertype noteproperty -name "extension_somedata" -value $o.extension_somedata
>> $allRows+=$lineObject
>> }
PS >
PS > $allRows
id extension_somedata
-- ------------------
91c0b90e-4ed0-4c69-8b96-b67c07bbb061
fdcd34dc-e7ab-4045-881d-0fee024c2b55 XXXXXX213423
90ebc867-6a67-4cf0-a5d9-e4c07c9d3905
80134f5f-892f-4800-9087-924a0c69b7f1
36fae4de-c685-4da5-9458-e165d99fe670
是的,您不需要另一个模块,因为本身可能需要另一个模块,但需要另一个参数
convertfromjson
cmdlet存在一些约束,而-AsHashtable
有助于克服其中一些约束。从文件中引用:
- 如果JSON包含一个只在大小写上不同的键的列表。如果没有开关,这些钥匙将被视为相同的钥匙和钥匙 因此,只有最后一个会被使用
- 如果JSON包含一个空字符串键。如果没有开关,cmdlet将抛出错误,因为
会抛出错误 不允许这样做,但哈希表允许这样做。一个示例用例,其中 这可能发生在PSCustomObject
文件中project.lock.json
- 对于某些数据结构,可以更快地处理哈希表
PS > $json = '{
>> "value": [
>> {
>> "id": "91c0b90e-4ed0-4c69-8b96-b67c07bbb061"
>> },
>> {
>> "id": "fdcd34dc-e7ab-4045-881d-0fee024c2b55",
>> "extension_somedata": "INXXXXXX213423"
>> },
>> {
>> "id": "90ebc867-6a67-4cf0-a5d9-e4c07c9d3905"
>> },
>> {
>> "id": "80134f5f-892f-4800-9087-924a0c69b7f1"
>> },
>> {
>> "id": "36fae4de-c685-4da5-9458-e165d99fe670"
>> }
>> ]
>> }'
PS >
PS > $u = ($json | ConvertFrom-Json -AsHashtable).value
PS >
PS > $u
Name Value
---- -----
id 91c0b90e-4ed0-4c69-8b96-b67c07bbb061
id fdcd34dc-e7ab-4045-881d-0fee024c2b55
extension_somedata INXXXXXX213423
id 90ebc867-6a67-4cf0-a5d9-e4c07c9d3905
id 80134f5f-892f-4800-9087-924a0c69b7f1
id 36fae4de-c685-4da5-9458-e165d99fe670
PS > $allRows = @()
PS >
PS > foreach($o in $u){
>> $lineObject = New-Object PSObject
>> Add-Member -InputObject $lineObject -MemberType NoteProperty -Name "id" -Value $o.id
>> Add-Member -InputObject $lineObject -MemberType NoteProperty -Name "extension_somedata" -Value $o.extension_somedata
>> $allRows+=$lineObject
>> }
PS >
PS > $allRows
id extension_somedata
-- ------------------
91c0b90e-4ed0-4c69-8b96-b67c07bbb061
fdcd34dc-e7ab-4045-881d-0fee024c2b55 INXXXXXX213423
90ebc867-6a67-4cf0-a5d9-e4c07c9d3905
80134f5f-892f-4800-9087-924a0c69b7f1
36fae4de-c685-4da5-9458-e165d99fe670
参考资料: