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

使用New-MgAgreement上传Azure Office365使用条款PDF的方法

New-MgAgreement自动上传使用条款PDF的实现说明

可行性结论

通过MgGraph模块调用New-MgAgreement完成使用条款PDF自动上传是官方支持的可行路径,也是目前替代旧AzureAD/Graph模块实现Entra ID租户配置自动化的最优方案,不需要额外引入第三方工具。

原有报错的根因

你遇到的两类报错本质是两个独立问题:

  • 报错a parameter cannot be found that matches parameter name 'source':New-MgAgreement本身就没有暴露顶层的-source参数,这个参数完全不属于cmdlet的公开参数集,传了就会直接触发参数校验失败。
  • 报错Value cannot be null. Parameter name: source:这是MgGraph模块内部解析-File参数时抛出的空值异常——你之前构建的File哈希表缺少Graph要求的嵌套FileData对象结构,模块内部找不到文件内容的数据源节点,才抛出这个参数空值错误,和顶层的source参数没有关系。

正确操作步骤

结合你已经从Graph Explorer验证过的传参逻辑,按照以下步骤调整即可正常运行:

  1. 读取本地PDF并转换为要求的格式
    Graph API要求文件内容必须以Base64字符串格式传递,不能直接传本地文件路径。选中目标PDF后,先执行文件读取转换:
    # 读取PDF字节流并转Base64
    $pdfBytes = [System.IO.File]::ReadAllBytes($FileBrowser.FileName)
    $pdfBase64 = [Convert]::ToBase64String($pdfBytes)
    
  2. 按照嵌套结构构建File参数
    你之前的哈希表缺少嵌套层结构,正确的-File参数结构应该是包含FileData子对象的嵌套哈希,注意不要传错枚举类参数的取值:
    $fileHash = @{
        Language = "en" # 需传ISO 639-1语言代码,不要传"English (Default)"这类自定义字符串
        FileName = $FileBrowser.SafeFileName
        IsDefault = $true
        IsMajorVersion = $true
        FileData = @{
            Data = $pdfBase64 # 这就是你在Graph Explorer里看到的需要放Base64文件内容的节点
        }
    }
    
  3. 执行创建命令
    移除你额外添加的不存在的-source参数,直接传递外层的DisplayName和构建好的File对象即可:
    New-MgAgreement -DisplayName "$companyName Terms of Use" -File $fileHash
    

代码优化建议

  • 连接MgGraph时,仅申请实现功能必需的权限范围即可:Agreement.ReadWrite.All,无需额外申请User.Read.All、Group.ReadWrite.All这类无关权限,降低权限过度授予的风险。
  • 查询使用条款的函数中,需要对空查询结果做判断,避免未匹配到条款时抛出空值引用的报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 16:45:01