【问题标题】:Unable to Process Partition in Power BI Premium Model Using SQL Server Agent Powershell CmdExec Step无法使用 SQL Server 代理 Powershell CmdExec 步骤处理 Power BI Premium 模型中的分区
【发布时间】: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


【解决方案1】:

我已经找到了解决这个问题的方法。决议是双重的。

第一个问题是,当从 SQL Server 代理运行 PowerShell 时,SqlServer 模块的版本是较旧的过时版本。我通过使用以下代码从 SQL Server 代理作业执行 ps1 文件并查看作业历史记录结果发现了这一点。

Get-Command -module sqlserver invoke*

我试过跑步

Install-Module sqlserver -AllowClobber -Scope AllUsers  

作为管理员,但它没有更新 SQL 代理正在运行的 SqlServer 模块。相反,我创建了一个简单运行的 ps1 文件

 Install-Module sqlserver -AllowClobber -Scope CurrentUser -Force 

并使用 SQL 代理 CMD 任务调用脚本,这更新了 SqlServer 模块版本。在此之后,我开始收到更有用的错误消息:

无法使用提供的凭据获取身份验证令牌。 如果您的 Active Directory 租户管理员已配置 多重身份验证,或者如果您的帐户是 Microsoft 帐户, 请从连接字符串中删除用户名和密码, 然后重试。然后应该提示您输入您的 凭据

有了这条新的错误消息,我决定尝试使用 Azure 服务主体提供凭据的替代方法。这种新方法使所有 PowerShell 方法(包括 SQL Server 代理作业)都取得了成功。此Power BI Documentation 中概述了实施的步骤。

最终的 PS 代码如下所示。

$ErrorActionPreference=”Stop”
Import-Module "SqlServer"
$AppId = "AAD_App_Registration_Application_Client_Id"
$TenantId = "AAD_App_Registration_Directory_Tenant_Id"
$AppSecret = "AAD_App_Registration_CertificatesAndSecrets_ClientSecret"
$PWord = ConvertTo-SecureString -String $AppSecret -AsPlainText -Force
$Credential = New-Object -TypeName "System.Management.Automation.PSCredential" -ArgumentList $AppId, $PWord

Invoke-ProcessPartition -Server "powerbi://api.powerbi.com/v1.0/myorg/MyModel" -PartitionName "DimDate" -TableName "DimDate" -Database "MyModel" -RefreshType "Full" -ServicePrincipal -ApplicationId $AppId -TenantId $TenantId -Credential $Credential

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    相关资源
    最近更新 更多