0

我有一个 PowerShell 脚本,其中包含使用批量复制命令将数据从 1 个 SQL Server 传输到另一个 SQL Server 的逻辑。

在 Powershell版本 5中,我安装了 SQLServer 模块来执行上述活动。

当我通过 PowerShell 工具从本地计算机执行 Powershell 脚本时,它是成功的。同样,当我通过我的帐户具有管理员访问权限的 PowerShell 工具再次从远程服务器(Windows 2012 R2)执行相同的命令时,它成功了。

但是,当我从指向使用服务帐户的上述远程服务器的 Jitterbit (ETL) 工具调用相同的命令时,它失败并出现以下错误

 Could not load file or assembly 'Microsoft.SqlServer.BatchParser, Version=15.100.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91' or one of its dependencies

我确实检查了几个站点是否存在上述错误,几乎所有地方都建议安装 SharedManagementObjects.msi 和 SQLSysClrTypes.msi所以我确实将它安装在远程服务器上,其版本特定于我的 MSSQL 2016,但仍然是同样的问题。

还检查了目录(C:\Program Files\WindowsPowerShell\Modules\SqlServer\21.1.18230),我还可以看到 Microsoft.SqlServer.BatchParser.dll 文件存在。

所以现在我不确定为什么会出现这个问题,它似乎是服务帐户的权限问题,所以基于我对 PowerShell 的有限知识,我设置了以下权限但仍然没有用,有人可以帮我解决这个问题。

在此处输入图像描述

更新

上述错误已解决,但从 Jitterbit 执行时脚本未执行,没有错误但只是未执行,但是,如果我使用我的登录名登录到远程服务器并从 PowerShell 工具本身执行它,它正在执行。我的猜测仍然是相同的,它必须对阻止脚本执行的服务帐户的权限做一些事情。

4

1 回答 1

0

尝试两个建议:作为脚本的第一步加载依赖项,或者,如果它确实是您认为的权限问题,请检查您的服务帐户的权限。

首先,您可以使用Add-Type. 如果您想以 C# 风格的方式使用 .NET 类,或者对于它抱怨找不到依赖项的罕见问题(特别是如果它不在您$ENV:Path或当前工作目录中的任何目录中) ,这可能很有用.

其次,您可以检查您的权限。这取决于您的连接方式。如果它是一个独立的脚本,我希望您使用Invoke-Command它来检查Authentication您正在使用的方法。PowerShellCredSSP默认自带,但必须打开(有很多地方可以找到帮助,包括Microsoft 的文档)。其他需要注意的支持是Kerberosssh

我不熟悉,Jitterbit所以最好检查他们的文档以了解他们是如何远程处理的。我希望它可能会远程进入,然后执行 PowerShell,以便您可以通过运行一个简单的脚本来检查以确保其权限

Write-Host "Environment Path:" -ForegroundColor Green
Write-Host $ENV:Path
Write-Host "Current Working Directory Contents:" -ForegroundColor Green
Get-ChildItem | Write-Host

您可能还想调查脚本执行的位置,无论是在远程机器上还是在执行机器上并通过网络编组。

于 2021-01-13T19:12:26.790 回答