почему в моем скрипте PowerShell данные не возвращаются - PullRequest
0 голосов
/ 22 мая 2019
add-type -AssemblyName System.Data.OracleClient
$username = "SYSTEM"
$password = "password"
$data_source = "production"
$connection_string = "User Id=$username;Password=$password;Data Source=$data_source"

try{
$statement = "SELECT SYSDATE FROM DUAL"
$con = New-Object System.Data.OracleClient.OracleConnection($connection_string)

$con.Open()

$cmd = $con.CreateCommand()
$cmd.CommandText = $statement

$result = $cmd.ExecuteReader()
# Do something with the results...
Write-Host $result + "data"
If($result.HasRows) {
    try {
    while ($result.Read())
        {
            "[0] : " + $result.GetValue(0)
        }
    }
    catch
    {
        #log error
    }
    finally
    {
        $con.Close() 
    }
}

} catch {
    Write-Error (“Database Exception: {0}`n{1}” -f `
        $con.ConnectionString, $_.Exception.ToString())
} finally{
    if ($con.State -eq ‘Open’) { $con.close() }
}

Я выполняю SELECT SYSDATE FROM DUAL

Я ожидаю 21 мая 19

Однако данные не возвращаются. (ошибки не отображаются)

1 Ответ

1 голос
/ 22 мая 2019

Как уже упоминалось в приведенных выше комментариях, вы должны отправить содержимое $result в поток вывода PowerShells.Выходной поток используется для реализации функции конвейера в Powershell.Если вы оберните свой код, например, в «myCode.ps1», и вызовете его с помощью:

.\myCode.ps1

Содержимое $result помещается в выходной поток (конвейер).Поскольку никакой другой командлет не подключен к вызову myCode.ps1, хост Powershell (= ваша командная строка) получит содержимое.Поведение хоста по умолчанию - выгрузить содержимое.

Поэтому добавьте следующее в ваш код:

$result = $cmd.ExecuteReader()
# Return $result to the pipeline
$result

Подробнее о конвейерах здесь и больше о потоках здесь .

ОБНОВЛЕНИЕ 1: Эта ссылка описывает более или менее пример кода вопроса.Возможно, отсутствует поставщик данных Orcale .NET.Добавьте его через:

 Add-Type -Path "PathToDll\Oracle.ManagedDataAccess.dll" 

Надеюсь, что поможет.

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