首页 > 解决方案 > 在一个会话中以 32 位执行部分代码,而从 64 位 power-shell 执行另一部分代码

问题描述

我正在启动到远程计算机(oracle db 服务器)的 powershell 会话,以执行一些查询。在实际部署之前,执行了一些部署前测试,例如检查与数据库的连接是否正常,ssh 连接是否正常, sftp .. 在那个会话中,许多 powershell 脚本被调用。我会尽量解释流程。首先,我们正在加载我们稍后使用的那些 PS 脚本,如下所示:

LogInfo("Load DatabaseActions")
$incFile = Resolve-Path .\deployment\DatabaseActions.ps1
. $incFile
                    
Write-Host "Setup Environment"
LogInfo("Load SSH")
$incFile = Resolve-Path .\deployment\SSH.ps1

这是来自DatabaseActions.ps1的代码的一部分:

Add-Type -Path "C:\somePath\Oracle.DataAccess.dll" 
Function TestDBConnection($connectString)
{
  //Code for opening a connection to the database
}

加载脚本后,测试将被一一执行。每个测试(数据库连接、ssh、sftp)都有一个单独的脚本。第一个测试是连接到数据库。有一个名为DatabaseConnectionTest.ps1的脚本,我只是从DatabaseActions.ps1调用一个函数:

$Result = TestDBConnection $RunSettings.ConnectionString

这里的问题是Oracle-Client.dll需要在 32 位 powershell 中执行,而其他测试需要在 64 位 powershell 中执行。当我启动 64 位会话时,Oracle dll 未正确加载。当我启动 32 位 powershell 时,Oracle dll 很好,但由于我使用的是 64 位 ssh 客户端,所以它落在 ssh 测试中。我需要在 32 位和 64 位 powershell 之间切换,但不会破坏任何东西。:) 我不知道这是否可能。

我尝试在启动 64 位会话时创建一个别名,如下所示:

Set-Alias Start-PowerShell32 "$env:windir\syswow64\WindowsPowerShell\v1.0\powershell.exe"

然后将代码包装在 DatabaseActions.ps1中,如下所示:

Start-PowerShell32 { 
Add-Type -Path "C:\somePath\Oracle.DataAccess.dll" 
Function TestDBConnection($connectString)
{
  //Code for opening a connection to the database
} }

它不起作用,因为它是一个新会话并且它不知道TestDBConnection函数。

你知道我该如何解决这个问题吗?

谢谢

标签: powershell

解决方案


推荐阅读