![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Преобразовать данные в DataTable |
|
PowerShell - [решено] Преобразовать данные в DataTable
|
Старожил Сообщения: 211 |
Доброго времени суток! Делаю запросы в базу через консольную утилиту sqlcl и пытаюсь привести ответ в нужную форму. А именно, в ответ от утилиты получаю System.Array с объектами. К объектам можно обратиться по индексу, но проблема в том, что PowerShell распознает разбивку на объекты неправильно. В ответе есть значение таблицы, которое содержит много строк и PowerShell каждую строку помечает как отдельный объект. В ответе два столбца и строки.
Примеры получаемых данных
Первая строка в ответах всегда пустая.
Пример вывода csv, System.Array, count 8: "COUNT_ERROR","BODY_ERROR" 10412,"ERROR:РњTC:StatusLastOperation=RequestError Подробная ошибка=' ERROR: StatusLastOperation=ErrorReadingStreamException Exception РїСЂРё чтении ответа сервера РњРўРЎ. Exception=System.Net.WebException: The remote serve r returned an error: (400) Bad Request. at System.Net.HttpWebRequest.GetResponse() at SecureHttp.SecureHttpRequest.PostHttpData(String url, String postData, X509Certificate2 certificate) in y:\HttpRequest.cs:line 718'" 25,"ERROR:РњTC:StatusLastOperation=RequestError Подробная ошибка=' ERROR: StatusLastOperation=ErrorReadingStreamException Exception РїСЂРё чтении ответа сервера РњРўРЎ. Exception=System.Net.WebException: The remote server r eturned an error: (500) Internal Server Error. at System.Net.HttpWebRequest.GetResponse() at SecureHttp.SecureHttpRequest.PostHttpData(String url, String postData, X509Certificate2 certificate) in y:\HttpRequest.cs:line 718'" <?xml version='1.0' encoding='UTF-8' ?> <RESULTS> <ROW> <COLUMN NAME="COUNT_ERROR"><![CDATA[10513]]></COLUMN> <COLUMN NAME="BODY_ERROR"><![CDATA[ERROR:РњTC:StatusLastOperation=RequestError Подробная ошибка=' ERROR: StatusLastOperation=ErrorReadingStreamException Exception РїСЂРё чтении ответа сервера РњРўРЎ. Exception=System.Net. WebException: The remote server returned an error: (400) Bad Request. at System.Net.HttpWebRequest.GetResponse() at SecureHttp.SecureHttpRequest.PostHttpData(String url, String postData, X509Certificate2 certificate) in y:\HttpRequest.cs:line 718']]></COLUMN> </ROW> <ROW> <COLUMN NAME="COUNT_ERROR"><![CDATA[26]]></COLUMN> <COLUMN NAME="BODY_ERROR"><![CDATA[ERROR:РњTC:StatusLastOperation=RequestError Подробная ошибка=' ERROR: StatusLastOperation=ErrorReadingStreamException Exception РїСЂРё чтении ответа сервера РњРўРЎ. Exception=System.Net. WebException: The remote server returned an error: (500) Internal Server Error. at System.Net.HttpWebRequest.GetResponse() at SecureHttp.SecureHttpRequest.PostHttpData(String url, String postData, X509Certificate2 certificate) in y:\HttpRequest.cs:line 718']]></COLUMN> </ROW> </RESULTS> {"results":[{"columns":[{"name":"COUNT_ERROR","type":"NUMBER"},{"name":"BODY_ERROR","type":"VARCHAR2"}],"items": [ {"count_error":10579,"body_error":"ERROR:РњTC:StatusLastOperation=RequestError Подробная ошибка=' ERROR: StatusLastOperation=ErrorReadingStreamException Exception РїСЂРё чтении ответа сервера РњРўРЎ. Exception=System.Net.We bException: The remote server returned an error: (400) Bad Request.\r\n at System.Net.HttpWebRequest.GetResponse()\r\n at SecureHttp.SecureHttpRequest.PostHttpData(String url, String postData, X509Certificate2 certificate) in y:\HttpRequest.cs:line 718'"} ,{"count_error":27,"body_error":"ERROR:РњTC:StatusLastOperation=RequestError Подробная ошибка=' ERROR: StatusLastOperation=ErrorReadingStreamException Exception РїСЂРё чтении ответа сервера РњРўРЎ. Exception=System.Net.WebE xception: The remote server returned an error: (500) Internal Server Error.\r\n at System.Net.HttpWebRequest.GetResponse()\r\n at SecureHttp.SecureHttpRequest.PostHttpData(String url, String postData, X509Certificate2 certificate) in y:\HttpRequest.cs:line 718'"} ]}]} Далее это добро я хочу записать в другую базу, где есть эти же два столбца. Для этого мне нужно правильно распознать получаемые данные, а это два столбца и сколько то строк. Данные преобразовать в DataTable. Воспользоваться Invoke-SQLiteBulkCopy. Не могу никак разобрать данные и преобразовать в DataTable. |
|
Отправлено: 14:59, 15-03-2022 |
Старожил Сообщения: 211
|
Профиль | Отправить PM | Цитировать Пока только получилось сохранить данные в файл csv и после импорта уже разбирать его.
Скрипт
$datasource = "D:\base_dw.db" $file = "D:\123.csv" [string]$time= "Table_" + [int64](([datetime]::UtcNow)-(get-date "1/1/1970")).TotalSeconds $comand = @" drop table qqqqqqq; create global temporary table qqqqqqq ( ncount number, rerror varchar (1000)) on commit delete rows; DECLARE rrrr rta.list.request_id%TYPE; begin dbms_output.enable (buffer_size => NULL); FOR jj IN (select distinct result_detail from rta.list where system_date>='16.02.2022' and operation_error='ERROR') loop select count(result_detail) into rrrr from rta.list where result_detail=jj.result_detail and system_date>='16.02.2022'; Insert into qqqqqqq(ncount,rerror) values (rrrr,jj.result_detail); --dbms_output.put_line(rrrr||'::::'||jj.result_detail); end loop; end; / select * from qqqqqqq; "@ $comand | D:\sqlcl\bin\sql.exe -silent -oci **** | Where {$_} |Out-File $file # Создаем столбцы и указываем типы данных $table = New-Object system.Data.DataTable 'TestDataTable1' $newcol = New-Object system.Data.DataColumn SYSDATETIME,([datetime]); $table.columns.add($newcol) $newcol = New-Object system.Data.DataColumn COUNT_ERROR,([int]); $table.columns.add($newcol) $newcol = New-Object system.Data.DataColumn BODY_ERROR,([string]); $table.columns.add($newcol) # Записываем инфу в ранее созданные столбцы из CSV $csv = Import-CSV $file -delimiter "," $csv | ForEach-Object { $row = $table.NewRow() $row.SYSDATETIME= (get-date).ToString() #('HH:00:00') $row.COUNT_ERROR= ($_.COUNT_ERROR) $row.BODY_ERROR= ($_.BODY_ERROR) $table.Rows.Add($row) } Invoke-SQLiteBulkCopy -DataTable $table -DataSource $DataSource -Table "count_error" -force Может кто знает как можно обойтись без экспорта и импорта файла? Решить все в теле скрипта? |
Отправлено: 21:27, 15-03-2022 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Deadooshka Сообщения: 2566
|
Профиль | Отправить PM | Цитировать |
Отправлено: 22:24, 15-03-2022 | #3 |
Старожил Сообщения: 211
|
Профиль | Отправить PM | Цитировать Я ранее пробовал ConvertTo-Csv, но всегда получал, что-то типа:
А до этого пытался сохранить xml и разобрать его, но он не так прост оказался.
Цитата Sham:
|
|
Отправлено: 07:23, 16-03-2022 | #4 |
Старожил Сообщения: 211
|
Профиль | Отправить PM | Цитировать Осталось победить кодировку. Она ломается два раза, сначала при выгрузке из одной базы, а потом уже после загрузки в другую. В самом PL/SQL Developer все круто, но консольные утилиты все ломают.
Что изначально: ERROR:РТТ:StatusLastOperation=RequestError Подробная ошибка=' ERROR: StatusLastOperation=ErrorReadingStreamException Exception при чтении ответа сервера РТТ. Exception=System.Net.WebException: The remote server returned an error: (400) Bad Request. at System.Net.HttpWebRequest.GetResponse() at SecureHttp.SecureHttpRequest.PostHttpData(String url, String postData, X509Certificate2 certificate) in y:\HttpRequest.cs:line 718' ERROR:РњTТ:StatusLastOperation=RequestError Подробная ошибка=' ERROR: StatusLastOperation=ErrorReadingStreamException Exception РїСЂРё чтении ответа сервера РњРўРЎ. Exception=System.Net.WebException: The remote server returned an error: (400) Bad Request. at System.Net.HttpWebRequest.GetResponse() at SecureHttp.SecureHttpRequest.PostHttpData(String url, String postData, X509Certificate2 certificate) in y:\HttpRequest.cs:line 718' ERROR:╨ЬTТ:StatusLastOperation=RequestError ╨Я╨╛╨┤╤А╨╛╨▒╨╜╨░╤П ╨╛╤И╨╕╨▒╨║╨░=' ERROR: StatusLastOperation=ErrorReadingStreamException Exception ╨┐╤А╨╕ ╤З╤В╨╡╨╜╨╕╨╕ ╨╛╤В╨▓╨╡╤В╨░ ╤Б╨╡╤А╨▓╨╡╤А╨░ ╨Ь╨в╨б. Exception=System.Net.WebException: The remote server returned an error: (400) Bad Request. at System.Net.HttpWebRequest.GetResponse() at SecureHttp.SecureHttpRequest.PostHttpData(String url, String postData, X509Certificate2 certificate) in y:\HttpRequest.cs:line 718' |
|
Последний раз редактировалось Griboed0ff, 16-03-2022 в 09:51. Отправлено: 09:42, 16-03-2022 | #5 |
Старожил Сообщения: 211
|
Профиль | Отправить PM | Цитировать Кодировка побеждена
function ConvertTo-Encoding ([string]$From, [string]$To){ Begin{ $encFrom = [System.Text.Encoding]::GetEncoding($from) $encTo = [System.Text.Encoding]::GetEncoding($to) } Process{ $bytes = $encTo.GetBytes($_) $bytes = [System.Text.Encoding]::Convert($encFrom, $encTo, $bytes) $encTo.GetString($bytes) } } |
Последний раз редактировалось Griboed0ff, 16-03-2022 в 13:17. Отправлено: 12:27, 16-03-2022 | #6 |
Deadooshka Сообщения: 2566
|
Профиль | Отправить PM | Цитировать Цитата Griboed0ff:
|
|
Отправлено: 18:36, 16-03-2022 | #7 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Route/Bridge - Ответ от ... заданный узел недоступен | softoblogger | Сетевые технологии | 12 | 20-06-2016 01:36 | |
2008 R2 - Ответ от IP: заданный узел не доступен | fastta | Windows Server 2008/2008 R2 | 8 | 04-02-2015 07:07 | |
Помогите обработать фотографию... | zaval1976 | Цифровое изображение | 1 | 30-05-2010 04:20 | |
Обработать класс TStringGrid | Frost_Imp | AutoIt | 6 | 06-10-2009 22:47 | |
Windows не получает ответ от pppoe сервера | stomo | Общий по Linux | 6 | 05-03-2004 19:19 |
|