У меня есть сценарий PowerShell с парой функций, которые проверяют, в порядке ли соединение с базой данных. Из одной из этих функций я хочу вызвать другую функцию или область, которая будет проверять, работаю ли я в 64-битной Powershell или 32-битной. Я хочу переключиться на 32-битную версию, прежде чем пытаться подключиться к базе данных, так как я получал сообщение об ошибке:
Exception Message: Exception calling "Open" with "0" argument(s): "Attempt to load Oracle client libraries threw
BadImageFormatException. This problem will occur when running in 64 bit mode with the 32 bit Oracle client components
installed."
Насколько я понимаю, это означает, что я использую 32-битную версию Oracle Client и я я работаю в 64-битной оболочке PowerShell.
Что я делаю:
Add-Type -AssemblyName System.Data.OracleClient
Function TestDatabaseConnection($connectString)
{
$rVal = 0
try
{
Invoke-Command $CheckPowerShellVersion
LogInfo (" Testing database connection ....")
$conOracle = New-Object System.Data.OracleClient.OracleConnection($connectString)
$conOracle.Open()
...
...
}
}
catch
{
LogError("Error in database connection test
Caught an exception:
Exception Type: $($_.Exception.GetType().FullName)
Exception Message: $($_.Exception.Message)")
$rVal = 1
}
$conOracle.Close()
return $rVal
}
И у меня есть переменная области действия CheckPowerShellVersion, например:
$CheckPowerShellVersion = {
if ([Environment]::Is64BitProcess) {
write-warning "Switching to 32-bit.
PowerShell."
if ($myInvocation.Line) {
&"$env:WINDIR\syswow64\windowspowershell\v1.0\powershell.exe" -NonInteractive -NoP -NoL $myInvocation.Line
}
else
{
&"$env:WINDIR\syswow64\windowspowershell\v1.0\powershell.exe" -NonInteractive -NoP -NoL -file "$($myInvocation.InvocationName)" $args
}
exit $lastexitcode
}
}
Я получаю результат в console «Переключение на 32-разрядную оболочку PowerShell.» , что означает, что он вызывает его, но я также получаю сообщение об ошибке: «Термин 'TestDatabaseConnection' не распознается как имя командлет. Что я здесь делаю не так?