Возникла проблема с запуском скрипта powershell для обновления таблицы mysql в лямбда-AWS - PullRequest
0 голосов
/ 09 ноября 2019

Я пытался написать сценарий powershell, который будет проверять состояние входа на сервер Windows и обновлять таблицу mysql. Код работает нормально на локальной машине. Но когда я публикую его в AWS lambda, он выдает ошибку.

На моем локальном компьютере перед запуском кода я установил mysql-connector-net-8.0.18.msi, чтобы я мог подключиться кMySQL базы данных. Но когда я публикую код в AWS lambda, у меня нет возможности сделать это. Поэтому я получаю следующую ошибку:

{
    errorType: ParentContainsErrorRecordException,
    errorMessage: You cannot call a method on a null-valued expression.,
    stackTrace: [
        at Amazon.Lambda.PowerShellHost.PowerShellFunctionHost.ExecuteFunction(Stream inputStream, ILambdaContext context),
        at lambda_method(Closure , Stream , Stream , LambdaContextInternal )
    ]
}   

Может ли кто-нибудь помочь мне в этом.

Код выглядит следующим образом:

'' '

$MySQLAdminUserName = 'user'
$MySQLAdminPassword = 'Cal'
$MySQLDatabase = 'cal'
$MySQLHost = '10.22.115.111'

$servers = @(10.22.32.163)
$ConnectionString = server= + $MySQLHost + ;port=3306;uid= + $MySQLAdminUserName + ;pwd= + $MySQLAdminPassword + ;database=+$MySQLDatabase
Try
{
    [void][System.Reflection.Assembly]::LoadWithPartialName(MySql.Data)
    $Connection = New-Object MySql.Data.MySqlClient.MySqlConnection
    $Connection.ConnectionString = $ConnectionString
    $Connection.Open()
    foreach ($s in $servers) #For Each Server
    {
        $count = 0
        foreach($ServerLine in @(query user /server:$s) -split \n) #Each Server Line
        {
            #USERNAME SESSIONNAME ID STATE IDLE TIME LOGON TIME
            $Parsed_Server = $ServerLine -split '\s+'
            if($count -ne 0)
            {
                $username = $Parsed_Server[1] #USERNAME
                $state = $Parsed_Server[4] #STATE
                if($state -eq 'Active')
                {
                    $Query = update ng_work set state = 'AVAILABLE' where ipAddress = '$s'
                    $Command = New-Object MySql.Data.MySqlClient.MySqlCommand($Query, $Connection)
                    $DataAdapter = New-Object MySql.Data.MySqlClient.MySqlDataAdapter($Command)
                    $DataSet = New-Object System.Data.DataSet
                    $RecordCount = $dataAdapter.Fill($dataSet, data)
                    $DataSet.Tables[0]
                }
            }
        $count = $count+1
        }
        if($count -eq 0)
        {
            $Query = update ng_works set state = 'STOPPED' where ipAddress = '$s'
            $Command = New-Object MySql.Data.MySqlClient.MySqlCommand($Query, $Connection)
            $DataAdapter = New-Object MySql.Data.MySqlClient.MySqlDataAdapter($Command)
            $DataSet = New-Object System.Data.DataSet
            $RecordCount = $dataAdapter.Fill($dataSet, data)
            $DataSet.Tables[0]
        }
    }
    $Query = select * from ng_workspaces
    $Command = New-Object MySql.Data.MySqlClient.MySqlCommand($Query, $Connection)
    $DataAdapter = New-Object MySql.Data.MySqlClient.MySqlDataAdapter($Command)
    $DataSet = New-Object System.Data.DataSet
    $RecordCount = $dataAdapter.Fill($dataSet, data)
    $DataSet.Tables[0]
}
Catch 
{
    Write-Host ERROR : Unable to run query : $query `n$Error[0]
}
Finally 
{
$Connection.Close()
}

'' '

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