【发布时间】:2020-09-06 19:32:11
【问题描述】:
我正在尝试使用 Analysis Services Cmdlets 处理 Power BI Premium 模型上的分区。当从 ISE、命令行运行以及使用 Windows 任务调度程序进行调度时,我的 PowerShell 脚本工作正常;但是,当我尝试使用 SQL Server 2019 代理作业使用步骤类型来安排 PowerShell 脚本时 操作系统 (CmdExec)”遇到以下错误消息。
消息以用户身份执行:MyDomain\MyUser。调用进程分区: 连接字符串无效。在 C:\Users\MyUser\Desktop\PS1\SSAS\wtf.ps1:15 char:11 + $asResult = 调用-ProcessPartition -Credential $UserCredential -Server...+
CategoryInfo : NotSpecified: (:) [Invoke-ProcessPartition], ConnectionException + FullyQualifiedErrorId : Microsoft.AnalysisServices.ConnectionException,Microsoft.AnalysisServices.PowerShell.Cmd let.ProcessPartition.
我已按照blog article 中的步骤设置作业。在所有三个运行方案中都使用相同的 windows 用户。 SQL server 是我的本地开发 SQL server,其 windows 用户是 SQL Server 和 Windows Admin 上的 SA。 SQL 实例所在的同一台机器正在用于成功执行其他三种运行 PS 脚本的方式(ISE、命令行和 Windows 任务计划程序)
如果我在与 SQL 服务器(我的本地主机)相同的机器上从命令行运行以下命令,则 PowerShell 脚本将成功运行。
PowerShell -File "C\Users\MyUser\Desktop\PS1\SSAS\wtf.ps1"
以下是将我的 PowerShell 脚本修改为尽可能小以演示问题,当然敏感信息也已编辑。在此先感谢您的帮助,我不知道如何继续。我真的需要这个从 SQL 代理工作,所以我不必猜测处理所依赖的步骤何时完成。
$ErrorActionPreference=”Stop”
Import-Module "SqlServer"
$User = "MyUser@MyDomain.com"
$PWord = ConvertTo-SecureString -String "MyPassword" -AsPlainText -Force
$UserCredential = New-Object -TypeName "System.Management.Automation.PSCredential" -ArgumentList $User, $PWord
$server = "powerbi://api.powerbi.com/v1.0/myorg/MyWorkspace"
$db = "MyModel"
$asResult = Invoke-ProcessPartition -Credential $UserCredential -Server $server -PartitionName "DimDate" -TableName "DimDate" -Database $db -RefreshType "Full"
我工作中的步骤代码是:
powershell -File "C:\Users\MyUser\Desktop\PS1\SSAS\wtf.ps1"
更新: 我发现,如果我以本地 SSAS 服务器为目标,除了服务器变量之外,完全相同的代码确实可以使用 SQL 代理方法工作,但当然切换到本地不是我想要的。
更新 2: 当我右键单击 SSMS 中的作业并单击“启动 PowerShell”时,这将打开一个 SQL Server PowerShell 窗口。如果我尝试以这种方式执行脚本,我会收到以下错误消息。正在使用的帐户未启用 MFA。
无法使用提供的凭据获取身份验证令牌。 如果您的 Active Directory 租户管理员已配置 多重身份验证,或者如果您的帐户是 Microsoft 帐户, 请从连接字符串中删除用户名和密码, 然后重试。然后应该会提示您输入您的凭据。
如果我没有使用 SQL Server PowerShell 窗口将凭据传递给 Invoke-ProcessPartition 命令,则会提示我输入凭据,并且调用会正常工作。当然,我不能将其用作解决方法,因为我需要它在无人值守的情况下运行。
我还尝试在 PS 脚本中打开 PowerShell ISE 作为用于对工作区进行身份验证的帐户,它也给出了与 SQL Server 代理作业相同的错误。
连接字符串无效。
【问题讨论】:
-
脚本会从
PowerShell_ISE.exe -NoProfile运行吗?从powershell -File "C:\Users\MyUser\Desktop\PS1\SSAS\wtf.ps1"输入cmd提示? -
我不知道如何为您提供详细信息的过程......但这里是我要检查的事情 - [1] 位 - 一些对 PoSh 的调用甚至会触发 32 位版本64位操作系统。使用
[System.Environment]::Is64BitProcess进行检查。 [2] 权限 - 仔细检查正在使用的帐户是否具有所需的权限。 -
@JosefZ,是的,这两种运行脚本的方法都可以成功执行。我更新了帖子以更明确地表明命令行方法有效。
标签: sql-server powershell powerbi sql-agent