PowerShell:获取可读表中的对象属性



我正试图从azure对象(用户)中以更可读的方式显示StrongAuthenticationMethods,该脚本将重置MFA方法。

调用变量$mfa

$UserPname = Read-Host "Please enter e-mail address"
$AzureUser=Get-MsolUser -UserPrincipalName "$UserPname"
$methode = $AzureUser.StrongAuthenticationMethods
$mfa = $methode | Select-Object MethodType, IsDefault
$mfa

它给了我一个漂亮的表:

----------           ---------
PhoneAppOTP              False
PhoneAppNotification      True

当我尝试写host这个变量时:

Write-Host $mfa

它给了我:

Write-Host $mfa
@{MethodType=PhoneAppOTP; IsDefault=False} @{MethodType=PhoneAppNotification; IsDefault=
True}

如何以最好的可读方式显示这个MethodType和IsDefault属性write-host吗?

提前谢谢你的信息!

Write-Host ($mfa | Format-Table | Out-String)

同步,格式丰富的输出到主机(显示),使用Out-Hostcmdlet而不是Write-Host:Out-Host使用PowerShell的丰富格式化系统,而Write-Host基本上执行.ToString()的字符串化,这经常导致无用的输出。

# Forces instant output to the display, 
# but note that such output *cannot be captured*.
# Use ... | Format-Table | Out-Host to force tabular formatting,
# but with a custom object with 4 or fewer properties that isn't necessary.
$mfa | Out-Host
从你后来的评论来看,你想要这个的原因是众所周知的问题情景管道输出和到主机输出之间缺乏同步(以及输出到其他流),会导致显示的输出将乱序打印.
# !! Read-Host executes FIRST
[pscustomobject] @{ print='me' }
Read-Host 'Press ENTER to continue'
# Workaround: Out-Host forces instant printing to the display,
#             but note that such output then cannot be captured. 
[pscustomobject] @{ print='me' } | Out-Host
Read-Host 'Press ENTER to continue'

这个问题仅限于一个非常具体的——尽管很常见的——场景:隐式格式化的输出,对于那些不是有格式化数据定义的类型。

  • 详细解释请参见此回答

  • 有关此问题行为的讨论,请参阅GitHub issue #4594。

相关内容

  • 没有找到相关文章

最新更新