能否借助Excel已认证凭据运行PSDataverse脚本导入CSV至Dataverse?
可行,但需调整认证方式与脚本逻辑
核心结论
可以借助当前Windows用户已登录Excel的Office 365身份完成PowerShell脚本的Dataverse认证,无需硬编码客户端ID/密钥这类敏感信息,但不能直接"复用"Excel进程内的凭据,而是通过**Windows集成身份验证(SSO)**共享同一用户会话。
具体实现方案
替换认证方式
放弃原脚本里的客户端密钥认证,改用基于当前用户的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登录会话,无需再次输入密码。修正脚本逻辑问题
原脚本中使用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
相关产品推荐
相关产品推荐

