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

能否借助Excel已认证凭据运行PSDataverse脚本导入CSV至Dataverse?

可行,但需调整认证方式与脚本逻辑

核心结论

可以借助当前Windows用户已登录Excel的Office 365身份完成PowerShell脚本的Dataverse认证,无需硬编码客户端ID/密钥这类敏感信息,但不能直接"复用"Excel进程内的凭据,而是通过**Windows集成身份验证(SSO)**共享同一用户会话。

具体实现方案

  1. 替换认证方式
    放弃原脚本里的客户端密钥认证,改用基于当前用户的SSO认证。如果使用PSDataverse模块,可通过以下方式连接:

    # 利用当前登录的Office用户身份连接Dataverse
    Connect-Dataverse -EnvironmentUrl "https://<environment>.crm4.dynamics.com/" -UseDefaultCredentials
    

    或者使用更通用的Microsoft.Xrm.Tooling模块(稳定性更强):

    Install-Module -Name Microsoft.Xrm.Tooling.CrmConnector.PowerShell -Force
    $conn = Get-CrmConnection -ConnectionString "AuthType=OAuth;Url=https://<environment>.crm4.dynamics.com/;LoginPrompt=Never"
    

    其中LoginPrompt=Never会自动复用当前用户的Office登录会话,无需再次输入密码。

  2. 修正脚本逻辑问题
    原脚本中使用PATCH方法,这是用于更新已有记录的操作。如果是导入新账户记录,应改用POST方法,同时注意字段格式转换(比如日期字段需要转为Dataverse支持的ISO格式):

    # 导入CSV并创建新账户
    Import-Csv "Account.csv" | ForEach-Object {
        # 处理日期格式(假设CSV里的CreationDate为常规日期格式)
        $formattedDate = Get-Date $_.CreationDate -Format "yyyy-MM-ddTHH:mm:ssZ"
        
        @{
            Uri = "accounts"  # Dataverse实体集名称通常为复数形式
            Method = "POST"
            Value = @{
                name = $_.AccountName
                overridencreatedon = $formattedDate
                # 其他需要导入的字段...
            }
        } | ConvertTo-Json -Depth 3 | Send-DataverseOperation
    }
    

注意事项

  • 确保当前Windows用户拥有Dataverse的创建账户记录权限,需与Excel中使用的权限一致。
  • 若开启了MFA,可能需要使用DeviceCode认证方式(会弹出验证窗口,但仍复用同一用户身份)。
  • Dataverse的实体集名称通常为复数形式(如accounts而非account),需确认实体的正确Web API名称。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 23:45:34