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