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

编写PowerShell脚本部署阻止旧版认证的Conditional Access策略遇阻

问题分析与修复方案

核心错误点

  • 错误覆盖$conditions.Users对象
    你先正确创建了ConditionalAccessUserCondition类型的$conditions.Users,但后续执行的$conditions.Users = New-Object -TypeName Microsoft.Open.MSGraph.Model.ConditionalAccessClientApp,把原本存储用户条件的属性错误替换成了客户端应用类型对象,直接破坏了条件集的结构,这是脚本失败的关键原因。
  • ClientAppTypes赋值存在冗余与格式问题
    • ClientAppTypes本身是字符串数组,无需提前创建ConditionalAccessClientApp对象,直接赋值数组即可。
    • 代码中使用了中文引号“”,PowerShell仅识别英文半角引号"",这会引发语法解析错误。

修复后的完整代码

# 创建条件集对象
$conditions = New-Object -TypeName Microsoft.Open.MSGraph.Model.ConditionalAccessConditionSet

# 配置应用条件
$conditions.Applications = New-Object -TypeName Microsoft.Open.MSGraph.Model.ConditionalAccessApplicationCondition
$conditions.Applications.IncludeApplications = "All"
$conditions.Applications.ExcludeApplications = @(
    ""
    ""# 填写需要排除的应用ID
)

# 配置用户条件(保留正确对象类型,禁止覆盖)
$conditions.Users = New-Object -TypeName Microsoft.Open.MSGraph.Model.ConditionalAccessUserCondition
$conditions.Users.IncludeUsers = "All"
$conditions.Users.ExcludeUsers = @(
    "" # 管理员用户ID
    "GuestsOrExternalUsers"
)
$conditions.Users.ExcludeGroups = "" # 管理员组ID
$conditions.Users.ExcludeRoles = @(
    # "" 
    # ""
)

# 配置客户端应用类型(直接赋值英文引号数组)
$conditions.ClientAppTypes = @("ExchangeActiveSync", "Other")

# 配置授权控制
$controls = New-Object -TypeName Microsoft.Open.MSGraph.Model.ConditionalAccessGrantControls
$controls._Operator = "OR"
$controls.BuiltInControls = "block"

# 创建条件访问策略
New-AzureADMSConditionalAccessPolicy -DisplayName "Block Legacy Authentication" -State "Disabled" -Conditions $conditions -GrantControls $controls

额外注意事项

  • 确保所有引号均为英文半角格式,避免语法错误。
  • 补充代码中留空的管理员ID、排除应用ID等实际值,否则策略无法匹配你的实际需求。
  • 执行脚本前需确认已通过Connect-AzureAD或Connect-MgGraph正确连接到Azure AD(根据使用的模块版本选择对应命令)。

内容的提问来源于stack exchange,提问作者Achref Buster

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 00:33:15