Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过PowerShell获取Azure用户的扩展属性_Azure_Powershell_Rest - Fatal编程技术网

通过PowerShell获取Azure用户的扩展属性

通过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

我正在尝试获取Azure用户扩展属性,这些属性通过AADC(Azure AD Connect)从on prem同步到目标租户。作为预读->这里的好文章:

问题是这些扩展可能在目标用户对象上填充,也可能不填充。因此,假设通过单个REST API调用()我得到以下响应:

$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
    文件中
  • 对于某些数据结构,可以更快地处理哈希表
请注意,此开关是在PowerShell 6.0中引入的

将此应用于指定的同一示例:

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
参考资料:


您期望的输出格式是什么?可能是具有所有属性的新PSobject-这真的不重要。问题是-Convertfrom-json()是否会修剪返回的json响应的每个实例上都不可见的属性?您好,Bhargavi。事实上,我在后面的阶段也发现了同样的问题,AshTable提供了相同的结果,但我不必使用外部模块。但真的很感谢上面@彼得斯。谢谢!:)请确认它是否有助于使社区中有类似要求的其他人受益。