远程服务器上的 Powershell 脚本失败

问题描述

我有一个 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 的有限了解,我设置了以下权限但仍然没有用,有人可以帮我解决这个问题吗.

enter image description here

更新

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

解决方法

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

首先,您可以使用 Add-Type 加载任何程序集。如果您想以 C# 风格的方式使用 .NET 类,或者解决它抱怨找不到依赖项的罕见问题(特别是如果它不在您的 $ENV:Path 上的任何目录中或当前工作目录)。

其次,您可以检查您的权限。这取决于您的连接方式。如果它是一个独立的脚本,我希望您使用 Invoke-Command 来检查您正在使用的 Authentication 方法。默认情况下,PowerShell 带有 CredSSP,但必须将其打开(有很多地方可以找到帮助,包括 Microsoft's documentation)。其他支持注意的是 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

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