Мне нужно периодически запрашивать журналы событий на нескольких серверах и вставлять определенные события в таблицу Postgres.
Мне трудно понять, как вставить данные в таблицу через ODBC с помощью PowerShell и/или VBScript. Я неплохо знаком как с VBScript, так и с PowerShell в целом, и я могу создать оператор SQL UPDATE, который работает, я просто пытаюсь связать их вместе, чего я никогда раньше не делал.
У меня установлен драйвер Postgres ODBC, я настроил источник данных, который тестирует нормально.
Google пока мне не помогает, может кто-нибудь подсказать?
Ответ 1 · рейтинг 1 · Cheeso
С какой частью у вас проблемы? Как далеко вы продвинулись? У вас открыто соединение? Знаете ли вы синтаксис строки подключения?
Подготовьте соединение:
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open dsn, dbuser, dbpass
вставлять:
insert = "insert into table (col1, col2) values (12, 'Example Record')"
conn.Execute insert
If conn.errors.Count > 0 Then
Dim counter
WScript.echo "Error during insert"
For counter = 0 To conn.errors.Count
WScript.echo "Error #" & DataConn.errors(counter).Number
WScript.echo " Description(" & DataConn.errors(counter).Description & ")"
Next
Else
WScript.echo "insert: ok"
End If
для полноты, запрос:
query = "select * from table where col1 = 7"
Set recordSet = conn.execute(query)
' result is an object of type ADODB.RecordSet
Если вам нужен powershell, попробуйте это сообщение.
Если вам нужно узнать строку подключения, попробуйте connectionstrings. ком.
Ответ 2 · ThatGraemeGuy
Спасибо за ответ.
Я больше гуглил и в конце концов нагуглил достаточно ADO.NET, чтобы заставить его работать, хотя это может быть не обязательно "правильным".
$DBConnectionString = "Driver={PostgreSQL UNICODE};Server=$DBIP;Port=$DBPort;Database=$DBName;Uid=$DBUser;Pwd=$DBPass;"
$DBConn = New-Object System.Data.Odbc.OdbcConnection
$DBConn.ConnectionString = $DBConnectionString
$DBCmd = $DBConn.CreateCommand()
[void]$DBCmd.Parameters.Add("@TimeStamp", [System.Data.Odbc.OdbcType]::varchar, 26)
[void]$DBCmd.Parameters.Add("@ErrorText", [System.Data.Odbc.OdbcType]::varchar, 4000)
$DBCmd.CommandText = "INSERT INTO errorinfo (errortime,xml) VALUES(?,?)"
$DBCmd.Connection.Open()
$DBCmd.Parameters["@TimeStamp"].Value = $TimeStamp.ToString("yyyy-MM-dd HH:mm:ss")
$DBCmd.Parameters["@ErrorText"].Value = $ErrorText
[void]$DBCmd.ExecuteNonQuery()