You need to enable JavaScript to run this app. 用于MFA分析的PowerShell命令中自定义计算结构含义咨询
优惠活动
大模型
产品
解决方案
定价
更多

用于MFA分析的PowerShell命令中自定义计算结构含义咨询

PowerShell 计算属性哈希表结构 @{N="列名"; E=脚本块} 解析

你在MFA分析脚本中看到的这个结构,是PowerShell核心语法体系中通用的自定义计算属性/计算列定义格式,并非MFA场景专属,所有支持计算属性的 cmdlet(比如 Select-Object、Format-Table、Sort-Object、Group-Object)都适用同一套语法规则。

结构内部两个核心约定键的作用

这个结构的本质是一个键值对哈希表,两个键是PowerShell解析器内置的固定简写,不支持自定义替换:

  • N 键
    是Name的通用简写,PowerShell解析器可自动识别,作用是定义最终输出列的表头/自定义属性的名称。你示例中写的N="MFA Status",就是让最终输出表格的这一列表头显示为“MFA Status”。
    写全键名Name="MFA Status"和使用简写N的功能完全一致,简写仅用于减少脚本冗余代码量。

  • E 键
    是Expression的通用简写,是这个结构的核心逻辑载体,作用是定义当前列的取值计算规则。它后面必须接一个脚本块,PowerShell处理管道流中的每一个对象时,都会自动把当前正在处理的对象传入这个脚本块执行,脚本块的返回值就是当前行这一列的内容。

结合MFA场景的实际运行逻辑

你那段MFA分析脚本的完整执行流程对应这个结构的逻辑是:

  1. 管道通过Get-MsolUser -all拉取全量目录用户,拿到每一个用户的原生对象——这类对象自带DisplayName、UserPrincipalName、StrongAuthenticationMethods等固定属性,但不存在名为“MFA Status”的原生属性
  2. PowerShell解析到这个哈希表结构时,不会去用户对象里匹配同名的原生属性,而是触发自定义计算逻辑:
    • 读取N键的值作为动态生成列的表头
    • 执行E后接的脚本块:通常逻辑为判断当前用户的StrongAuthenticationMethods集合状态,返回对应的MFA判定结果(如“未启用”“已启用”“强制执行中”)
  3. 动态生成的“MFA Status”列,与提前提取的DisplayName、UserPrincipalName列一同传给Format-Table -AutoSize,最终输出自动适配列宽的结果表格。

常见使用注意事项

  • 键名必须严格匹配PowerShell的识别约定,不能随意替换:如果误把E写成Value、V等其他名称,PowerShell不会将这个哈希表识别为计算属性,最终会出现内容匹配错误的异常输出列
  • E对应的脚本块内部,使用自动变量$_指代当前管道正在处理的对象,所有针对当前用户的属性判断,都需要通过$_.属性名的方式获取,不能直接书写属性名
  • 该语法在PowerShell 5.1、PowerShell 7全版本中行为完全一致,不存在版本兼容问题

内容的提问来源于stack exchange,提问作者Malik Baker

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 05:54:09