Как вызвать переменную области видимости изнутри функции Power-Shell? - PullRequest
0 голосов
/ 13 июля 2020

У меня есть сценарий 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' не распознается как имя командлет. Что я здесь делаю не так?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...