在 Powershell 中解析数组时遇到问题

Trouble parsing an array in Powershell

我正在尝试了解如何解析通过 PowerShell 查询的数据。我们使用 Okta 作为我们的 IdP,我想获取用户经理的姓名。

我确实弄清楚了如何获取该值,但它附带了一堆我不需要的其他值。我试图只放大一个属性,但不知道如何用短语表达查询。

PS V:> Get-OktaUser JohnDoe

Returns很多信息,包括经理姓名:

id              : 00u8u5st55ZLO81uX2p7
status          : ACTIVE
created         : 2020-10-11T22:25:01.000Z
lastLogin       : 2022-05-30T13:29:57.000Z
type            : @{id=xxxxxxxxxxxxxxxxxx}
profile         : @{lastName=Doe; zipCode=10006; ChildDepartment=Technology; manager=Marey Jane; city=New York; displayName=John Doe; title=Test Account

我可以使用“Select-Object”进一步缩小范围。我不知道输出格式的正确术语(哈希表?数组?),但它看起来像这样:

PS V:\> Get-OktaUser JohnDoe | Select-Object profile

profile
-------
@{lastName=Doe; zipCode=10006; ChildDepartment=Technology; manager=Mary Jane; city=New York; displayName... 

在尝试以一种我只获得“manager”值的方式解析它时,我尝试了一些方法来了解如何操纵它,但运气不佳。

PS V:\\> $test1 = Get-OktaUser johndoe | Select-Object profile
PS V:\\> $test1.profile

lastName              : Doe
zipCode               : 10006
ChildDepartment       : Corporate Technology
manager               : Mary Jane
city                  : New York
displayName           : John Doe

相同的信息,更简洁的格式。也试过$test1[0], $test1.profile[0], foreach $test in $test1 write-host $_.manager

所以基本上,我看到了我想要的值。我可以对查询进行某种程度的操作,但是我如何梳理出一个属性和值呢?答案当然很好,但如果你能帮助我理解原因,那将非常有帮助(我认为在学习基本的 PowerShell 方面)。

总之,多谢指教!

正如您所猜测的,就像 Get-OktaUser 返回的对象具有属性(idstatuscreated 等),每个属性的 value 本身可以是具有 1 个或多个属性的复杂对象 - 例如示例中的 typeprofile 属性。

因此,当您在格式化输出中看到 @{propertyName=value;...} 语法时,PowerShell 可能会向您显示一个 嵌套对象 。另一方面,如果 属性 的值是 array,则 @ 不会存在,即。 profile : {value value2 value3 ...}.

要访问嵌套对象的属性,只需继续使用成员访问运算符 .:

PS ~> $user = Get-OktaUser JohnDoe
PS ~> $user 

id              : 00u8u5st55ZLO81uX2p7
status          : ACTIVE
created         : 2020-10-11T22:25:01.000Z
lastLogin       : 2022-05-30T13:29:57.000Z
type            : @{id=xxxxxxxxxxxxxxxxxx}
profile         : @{lastName=Doe; zipCode=10006; ChildDepartment=Technology; manager=Marey Jane; city=New York; displayName=John Doe; title=Test Account

PS ~> $user.profile

lastName              : Doe
zipCode               : 10006
ChildDepartment       : Corporate Technology
manager               : Mary Jane
city                  : New York
displayName           : John Doe

PS ~> $user.profile.manager
Mary Jane