Powershell x86:无法加载文件或程序集 Microsoft.SqlServer.BatchParser

use*_*720 6 sql-server powershell x86 windows-server-2016

当我尝试invoke-sql从 Powershell X86执行命令时出现错误

invoke-sqlcmd -Query "SELECT 'HELLO!'" -ServerInstance Server -Database DB
Run Code Online (Sandbox Code Playgroud)

invoke-sqlcmd :无法加载文件或程序集“Microsoft.SqlServer.BatchParser,版本=15.100.0.0,文化=中性,PublicKeyToken=89845dcd8080cc91”或其依赖项之一。该系统找不到指定的文件。

如果我从常规 x64 Powershell 提示符运行完全相同的命令,我不会收到错误

invoke-sqlcmd -Query "SELECT 'HELLO!'" -ServerInstance Server -Database DB
Run Code Online (Sandbox Code Playgroud)
Column1
-------
HELLO!
Run Code Online (Sandbox Code Playgroud)

这是在新建的 Windows 2016 x64 位服务器上:

操作系统名称 Microsoft Windows Server 2016 数据中心版本 10.0.14393 内部版本 14393

我需要 x86 powershell 来运行使用旧版 32 位 ODBC 驱动程序的脚本,它还使用invoke-sql命令。

小智 1

正如其他一些评论中提到的,这可能与位版本有关。如果是这种情况,您可以使用 -RunAs32 标志启动作业,使其像 32 位命名空间一样运行,然后通过 Receive-Job CMDlet 返回任何数据

# I am 64-bit land
$job_handle = Start-Job -RunAs32 -ArgumentList "Relevant Data" -ScriptBlock {
    Param ( [string]$stuff_i_need )

    # I am 32-bit land

    return "Complete"
}

# I am 64-bit land (again)
$result = $job_handle | Wait-Job | Receive-Job
Run Code Online (Sandbox Code Playgroud)

请注意,它将被迫使用名称空间,因此需要传入任何相关数据