You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell使用Write-Host输出可读格式Azure用户MFA方法属性

问题场景

编写Azure MFA方法重置脚本时,需要以易读格式展示Azure用户对象的StrongAuthenticationMethods属性。
直接在控制台执行变量输出时,能得到格式规整的表格:

$UserPname = Read-Host "Please enter e-mail address"
$AzureUser=Get-MsolUser -UserPrincipalName "$UserPname"

$methode = $AzureUser.StrongAuthenticationMethods
$mfa = $methode | Select-Object MethodType, IsDefault
$mfa

输出效果:

MethodType           IsDefault
----------           ---------
PhoneAppOTP              False
PhoneAppNotification      True

但直接执行Write-Host $mfa时,只会得到无格式的对象拼接字符串,可读性极差:

@{MethodType=PhoneAppOTP; IsDefault=False} @{MethodType=PhoneAppNotification; IsDefault=True}
问题原因

Write-Host的设计逻辑是直接输出字符串内容,不会走PowerShell默认的对象格式化管线。当传入非字符串类型的对象时,会直接调用对象的ToString()方法做转换,因此自定义PSObject会被转成@{属性=值}格式的拼接字符串,丢失默认的表格排版。

可用解决方案

方案1:保留默认表格格式(推荐)

通过Format-Table触发默认格式化逻辑,再用Out-String将排版完成的表格转为字符串,最后传给Write-Host输出,效果和直接调用变量完全一致:

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

如果需要调整列宽,可以给Format-Table加-AutoSize参数自动适配列宽:

$mfa | Format-Table -AutoSize | Out-String | Write-Host

方案2:自定义排版输出

如果需要在输出中添加自定义标记(比如标注默认方法),可以遍历结果集手动拼接字符串输出:

Write-Host "`n当前账号绑定的MFA方法如下:"
Write-Host "========================================"
foreach ($item in $mfa) {
    $defaultMark = $item.IsDefault ? "  *默认方法" : ""
    Write-Host ("{0,-22} {1,-8}{2}" -f $item.MethodType, $item.IsDefault, $defaultMark)
}

输出示例:

当前账号绑定的MFA方法如下:
========================================
PhoneAppOTP            False   
PhoneAppNotification   True     *默认方法

方案3:调试用结构化输出

如果是脚本调试场景需要看完整属性,可以转成格式化的JSON字符串输出:

$mfa | ConvertTo-Json | Write-Host

注意:Write-Host仅适合控制台直接打印字符串内容,所有需要保留PowerShell原生格式化效果的输出,都需要先完成格式化、转字符串的步骤再传入,不要直接传递原始对象。


内容的提问来源于stack exchange,提问作者Stan Di

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 16:18:20