在 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
返回的对象具有属性(id
、status
、created
等),每个属性的 value 本身可以是具有 1 个或多个属性的复杂对象 - 例如示例中的 type
和 profile
属性。
因此,当您在格式化输出中看到 @{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
我正在尝试了解如何解析通过 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
返回的对象具有属性(id
、status
、created
等),每个属性的 value 本身可以是具有 1 个或多个属性的复杂对象 - 例如示例中的 type
和 profile
属性。
因此,当您在格式化输出中看到 @{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