Powershell - 输出管道中对象数组的各个成员

时间:2017-12-06 21:05:13

标签: arrays powershell

我不确定标题是否正确。我知道这很容易回答,可能都在互联网上。但是,我需要你的帮助。

如果我运行一个返回多个对象的powershell命令,并且每个对象都有自己的成员,其中一个成员是另一个多个对象的列表,那么将它干净地输出到屏幕的最有效方法是什么?

例如,请参阅以下命令以查询用户在Office 365中选择的MFA身份验证方法:

Get-MsolUser -All | where {$_.StrongAuthenticationMethods -ne $null} | Select-Object -Property UserPrincipalName, StrongAuthenticationMethods

输出结果为:

UserPrincipalName                  StrongAuthenticationMethods
-----------------                  ---------------------------
user1@domain.com       {Microsoft.Online.Administration.StrongAuthenticationMethod, Microsoft.Online.Adm...
user2@domain.com       {Microsoft.Online.Administration.StrongAuthenticationMethod, Microsoft.Online.Adm...
user3@domain.com       {Microsoft.Online.Administration.StrongAuthenticationMethod, Microsoft.Online.Adm...

我想在一行代码中列出UserPrincipalName,后跟每个StrongAuthenticationMethods对象的MethodType成员的值。

请放轻松,我知道这有明显的答案。

1 个答案:

答案 0 :(得分:0)

执行此操作的一种方法是展开内部集合,并为外部集合中的每个对象输出一个;示例(未测试):

Get-MsolUser -All | Where-Object { $_.StrongAuthenticationMethods } | ForEach-Object {
  $upn = $_.UserPrincipalName
  $_.StrongAuthenticationMethods | ForEach-Object {
    [PSCustomObject] @{
      "UserPrincpalName"            = $upn
      "StrongAuthenticationMethods" = $_
    }
  }