powershell - 在一个会话中以 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函数。
你知道我该如何解决这个问题吗?
谢谢
解决方案
推荐阅读
- react-native - 如何在 createBottomTabNavigator 中获取背景图像?
- node.js - 如何在 express.js 中模拟流量
- sql - 选择总和
- cassandra - Cassandra TTL 数据不工作
- javascript - 如何在 ETL 中处理无效的 Mongo/Mongoose ObjectId 分配
- angular - Angular ui网格恢复状态不起作用
- google-chrome - Webpack 不断断开连接。铬问题?
- reactjs - 如何在反应路由器重定向期间管理反应状态
- javascript - 引导多个下拉问题
- angular - Angular 2 路由问题,无输出