解析Powershell中的数组时出错



我正试图弄清楚如何解析通过PowerShell查询的数据。我们使用Okta作为我们的IdP,我想得到一个用户经理的名字。

我确实想好了如何获得价值,但它附带了一堆我不需要的其他价值。我试图只放大一个属性,但不知道如何表达查询。

PS V:> Get-OktaUser JohnDoe

返回大量信息,包括经理的姓名:

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

我能够用";选择对象;。我不知道输出格式的正确术语(hashtable?array?(,但它看起来是这样的:

PS V:> Get-OktaUser JohnDoe | Select-Object profile
profile
-------
@{lastName=Doe; zipCode=10006; ChildDepartment=Technology; manager=Mary Jane; city=New York; displayName... 

在试图以一种我只得到";经理";,我尝试了一些方法来看看如何操纵它,但运气不好。

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等(一样,每个属性的本身也可以是具有1个或多个属性的复杂对象,如示例中的typeprofile属性。

因此,当您在格式化输出中看到@{propertyName=value;...}语法时,PowerShell可能会向您显示一个嵌套对象。另一方面,如果属性的值是数组,则不会出现@,即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

最新更新