Парсинг текстового файла, powershell

[ Версия для печати ]
Добавить в Telegram Добавить в Twitter Добавить в Вконтакте Добавить в Одноклассники
Страницы: (2) [1] 2   К последнему непрочитанному [ ОТВЕТИТЬ ] [ НОВАЯ ТЕМА ]
Hydromarine
5.08.2015 - 11:35
Статус: Offline


Хохмач

Регистрация: 2.04.14
Сообщений: 633
0
Всем доброго времени суток.
Нужна помощь спецов по Powershell.

Имеется текстовый файл, который предположим лежит на c:\1.txt

С таким содержанием:

Цитата:
Schema:
Column Name Localized Name Type MaxLength
---------------------------- ---------------------------- ------ ---------
CommonName Issued Common Name String 8192 -- Indexed
RawCertificate Binary Certificate Binary 16384

Row 1:
Issued Common Name: "User 1"
Binary Certificate:
-----BEGIN CERTIFICATE-----
MIIFOTCCBCGgAwIBAgIKYS417wAAAAAABTANBgkqhkiG9w0BAQUFADA8MRMwEQYK
CZImiZPyLGQBGRYDaW50MRIwEAYKCZImiZPyLGQBGRYCY2UxETAPBgNVBAMTCHRl
cGxvc2V0MB4XDTE1MDYxNTIzMDI1M1oXDTIwMDYxMzIzMDI1M1owgcMxEzARBgoJ
kiaJk/IsZAEZFgNpbnQxEjAQBgoJkiaJk/IsZAEZFgJjZTEdMBsGA1UECxMUY29t
ZW5lcmdvIHJlYWwgdXNlcnMxFTATBgNVBAsTDGNvbW1vbiB1c2VyczE9MDsGA1UE
Aww00JHQsNC00YPQu9C40L0g0JDQu9C10LrRgdCw0L3QtNGAINCh0LXRgNCz0LXQ
tdCy0LjRhzEjMCEGCSqGSIb3DQEJARYUQUJhZHVsaW5AdGVwbG9zZXQucnUwggEi
MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrVBawjGu+ICcotRbn17fmhYdj
YURNVxS2Z44hpfdgt65CxrsDqn71fAVE2dCytopgTuRiyB90A49paldXBGL7F5yW
5ryJwsp6f8dO0CH7clS6PMY4lKdLsaTgyJh8doPPCsvvWeMLOUuhBTiTAjITPbK2
5ZHR2nWN9HokkthNkcibloD7nf2NyDqvhlc4BRayKlS2AR831o9kyUbj9NGJllxF
a9SyJmDlSAxwM6AlNhF+7cL1ON29sEMkny1FUl4sLNMmRgy+7C2zpd8bJ/t5orGE
YXq/iudqfOM/bSm3S6Er0br+PRBjYl/iuWCUzrMTq1fCeFeZXmJl3kdGd12dAgMB
AAGjggGzMIIBrzA9BgkrBgEEAYI3FQcEMDAuBiYrBgEEAYI3FQiB3aMdher4LoHF
hz+HtKpWg9q5dIFuh+GPdbaiLQIBZAIBBjAgBgNVHSUBAf8EFjAUBggrBgEFBQcD
AgYIKwYBBQUHAwQwDgYDVR0PAQH/BAQDAgWgMCoGCSsGAQQBgjcVCgEB/wQaMBgw
CgYIKwYBBQUHAwIwCgYIKwYBBQUHAwQwgZQGCSqGSIb3DQEJDwSBhjCBgzALBglg
hkgBZQMEASowCwYJYIZIAWUDBAEtMAsGCWCGSAFlAwQBFjALBglghkgBZQMEARkw
CwYJYIZIAWUDBAECMAsGCWCGSAFlAwQBBTAKBggqhkiG9w0DBzAHBgUrDgMCBzAO
-----END CERTIFICATE-----


Row 2:
Issued Common Name: "User 2"
Binary Certificate:
-----BEGIN CERTIFICATE-----
MIIFQTCCBCmgAwIBAgIKEVbycAAAAAAABjANBgkqhkiG9w0BAQUFADA8MRMwEQYK
CZImiZPyLGQBGRYDaW50MRIwEAYKCZImiZPyLGQBGRYCY2UxETAPBgNVBAMTCHRl
cGxvc2V0MB4XDTE1MDYxNjA0MjY1OVoXDTIwMDYxNDA0MjY1OVowgcsxEzARBgoJ
kiaJk/IsZAEZFgNpbnQxEjAQBgoJkiaJk/IsZAEZFgJjZTEdMBsGA1UECxMUY29t
ZW5lcmdvIHJlYWwgdXNlcnMxFTATBgNVBAsTDGNvbW1vbiB1c2VyczFFMEMGA1UE
Aww80JrQu9C40LzQvtCy0LAg0JXQutCw0YLQtdGA0LjQvdCwINCQ0LvQtdC60YHQ
sNC90LTRgNC+0LLQvdCwMSMwIQYJKoZIhvcNAQkBFhRFS2xpbW92YUB0ZXBsb3Nl
dC5ydTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK2OvQnH9dAMPzRi
1Ww7ZVf6hVxZ/WD+7ZzbLggeDVmG3VATCSUfAUX2WwbtTb7Ox5P57AjLxSERbxD2
4HutU/WWRc0HLam2+3sJIR2cFq+ikO93mhIrItXIAc4/MEKkUoVC3o2bgR+Pra77
SAFlAwQBGTALBglghkgBZQMEAQIwCwYJYIZIAWUDBAEFMAoGCCqGSIb3DQMHMAcG
BSsOAwIHMA4GCCqGSIb3DQMCAgIAgDAOBggqhkiG9w0DBAICAgAwHQYDVR0OBBYE
FP4TgSHv14EJdiEzBBY8wnjrlTjEMB8GA1UdIwQYMBaAFK7fJHaE2IGceOWFilbT
xz10jJ6QMDkGA1UdHwQyMDAwLqAsoCqGKGh0dHA6Ly9jcmwuY29tZW5lcmdvLnJ1
L3BraS90ZXBsb3NldC5jcmwwDQYJKoZIhvcNAQEFBQADggEBAFafa3iRWd5b2vYI
jFqTojhfb+hD8ekDE9WANHlhLzOhve+LYduULjk0Topw7YwRkJ2EBsevL2ODc9vJ
9Eq2a/42W1QB6gfR2BFQ3QatQA/IP1rkK0a7oJTyfKt5YGdRcVwWchfqoUJdzmnu
kahcDtxNN4b8AESHrcD84bE7xIvlrgUqezl1OJRXh6UDLAsjwg5l+D2vm1PKZ3bw
nACcEZ5JFA3SEu+LYemZAKWXZC/nKr85V9ZyBei5VyJppTbFy73Tc7PxjLVlXEZB
5BW2oybQP4vpVkIpNujvOPojjJu/VrslaUq4qMCqY8MAPUqjQlAlMab2wM8EDQHA
qr4VlEo=
-----END CERTIFICATE-----


Row 3:
Issued Common Name: "User 3"
Binary Certificate:
-----BEGIN CERTIFICATE-----
MIIFMTCCBBmgAwIBAgIKEWcJiAAAAAAABzANBgkqhkiG9w0BAQUFADA8MRMwEQYK
CZImiZPyLGQBGRYDaW50MRIwEAYKCZImiZPyLGQBGRYCY2UxETAPBgNVBAMTCHRl
cGxvc2V0MB4XDTE1MDYxNjA0NDQzNFoXDTIwMDYxNDA0NDQzNFowgbsxEzARBgoJ
kiaJk/IsZAEZFgNpbnQxEjAQBgoJkiaJk/IsZAEZFgJjZTEdMBsGA1UECxMUY29t
ZW5lcmdvIHJlYWwgdXNlcnMxFTATBgNVBAsTDGNvbW1vbiB1c2VyczE3MDUGA1UE
Awwu0JzQuNC90LjQvSDQndC40LrQvtC70LDQuSDQndC40LrQvtC70LDQtdCy0LjR
hzEhMB8GCSqGSIb3DQEJARYSTk1pbmluQHRlcGxvc2V0LnJ1MIIBIjANBgkqhkiG
9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwX1UHJJW61izaDu+kBkxxZOqlDlUaNT8YDR2
hdCbdDKKFC7eEXW+tp3pDZ7ggRHF7oh4eYV9pPtAJwVcpS8T4E5BVJKNutCWaerf
O2E3pKf1qFOZNMnkzzwMadS49PmLES62dM95jpQhvTLq9hEDsTUuTJvEI7WVhp7y
GH//vk7jt81B+E5Q+NSHTVCNXYNJTPmnxo+wc0RjMmgGDdi4ZuegLAydhK/jRVD8
zhDSfl+ZxNhIxPYmre/AAIQlr8/Jh56n/bA9o64ppX5jLntcv42JAL40gyV5elpJ
N1oNHRAgqunqRdKvfRng+OL6JXVHIZyJV86p5IFFO5djz3FJqQIDAQABo4IBszCC
7ZCvxYdzeqLqOZrsz5nI/eukYFTo5PiKacikz/Zsbnl5Gt1YJXdOm3z+k/XkFthb
TVmPG4+3JZZbjjfwmosh4cfXhKd+yYMPR44MdSwZyLV3dEdrdKEXmRIOuhSDZs10
EDrb5BGe5D+KREB1RywCrXbC6aJL7xZeSFtVBwHJavL02EGmy2BH1gnyEDZ2EtHi
HL8nSZmapQwoKvGUpBCPlj9UGkoKyOMH4KrAKvqH7lBoBQ5mVg==
-----END CERTIFICATE-----


Нужен скрипт который будет парсить файл, затем создавать отдельные файлы с расширением .crt взяв за имя файла к примеру:
Цитата:
User 1

А в тело файла сохранять инфу поля Binary Certificate:
Цитата:
-----BEGIN CERTIFICATE-----
MIIFOTCCBCGgAwIBAgIKYS417wAAAAAABTANBgkqhkiG9w0BAQUFADA8MRMwEQYK
CZImiZPyLGQBGRYDaW50MRIwEAYKCZImiZPyLGQBGRYCY2UxETAPBgNVBAMTCHRl
cGxvc2V0MB4XDTE1MDYxNTIzMDI1M1oXDTIwMDYxMzIzMDI1M1owgcMxEzARBgoJ
kiaJk/IsZAEZFgNpbnQxEjAQBgoJkiaJk/IsZAEZFgJjZTEdMBsGA1UECxMUY29t
ZW5lcmdvIHJlYWwgdXNlcnMxFTATBgNVBAsTDGNvbW1vbiB1c2VyczE9MDsGA1UE
Aww00JHQsNC00YPQu9C40L0g0JDQu9C10LrRgdCw0L3QtNGAINCh0LXRgNCz0LXQ
tdCy0LjRhzEjMCEGCSqGSIb3DQEJARYUQUJhZHVsaW5AdGVwbG9zZXQucnUwggEi
MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrVBawjGu+ICcotRbn17fmhYdj
YURNVxS2Z44hpfdgt65CxrsDqn71fAVE2dCytopgTuRiyB90A49paldXBGL7F5yW
5ryJwsp6f8dO0CH7clS6PMY4lKdLsaTgyJh8doPPCsvvWeMLOUuhBTiTAjITPbK2
5ZHR2nWN9HokkthNkcibloD7nf2NyDqvhlc4BRayKlS2AR831o9kyUbj9NGJllxF
a9SyJmDlSAxwM6AlNhF+7cL1ON29sEMkny1FUl4sLNMmRgy+7C2zpd8bJ/t5orGE
YXq/iudqfOM/bSm3S6Er0br+PRBjYl/iuWCUzrMTq1fCeFeZXmJl3kdGd12dAgMB
AAGjggGzMIIBrzA9BgkrBgEEAYI3FQcEMDAuBiYrBgEEAYI3FQiB3aMdher4LoHF
hz+HtKpWg9q5dIFuh+GPdbaiLQIBZAIBBjAgBgNVHSUBAf8EFjAUBggrBgEFBQcD
AgYIKwYBBQUHAwQwDgYDVR0PAQH/BAQDAgWgMCoGCSsGAQQBgjcVCgEB/wQaMBgw
CgYIKwYBBQUHAwIwCgYIKwYBBQUHAwQwgZQGCSqGSIb3DQEJDwSBhjCBgzALBglg
hkgBZQMEASowCwYJYIZIAWUDBAEtMAsGCWCGSAFlAwQBFjALBglghkgBZQMEARkw
CwYJYIZIAWUDBAECMAsGCWCGSAFlAwQBBTAKBggqhkiG9w0DBzAHBgUrDgMCBzAO
-----END CERTIFICATE-----

И так для каждого блока.
 
[^]
Yap
[x]



Продам слона

Регистрация: 10.12.04
Сообщений: 1488
 
[^]
алексфио
5.08.2015 - 13:28
1
Статус: Offline


Приколист

Регистрация: 13.07.15
Сообщений: 304
Ты такое мудрённое тут написал, неужели есть ещё люди, которые это поймут?
 
[^]
GrizlyBear
5.08.2015 - 13:29
1
Статус: Offline


Приколист

Регистрация: 28.07.15
Сообщений: 244
порталом не ошибся ?
 
[^]
4ifir
5.08.2015 - 13:31
0
Статус: Offline


крепкий чай

Регистрация: 3.04.12
Сообщений: 1579
чувак форумом ошибся немного
 
[^]
chapayka
5.08.2015 - 13:32
7
Статус: Offline


Приколист

Регистрация: 21.01.13
Сообщений: 205
Цитата (алексфио @ 5.08.2015 - 16:28)
Ты такое мудрённое тут написал, неужели есть ещё люди, которые это поймут?

Да понять его, надёжа-царь, немудрено: они Кемскую волость требуют. Воевали, говорят, так подай ее сюда!
 
[^]
Hydromarine
5.08.2015 - 13:35
0
Статус: Offline


Хохмач

Регистрация: 2.04.14
Сообщений: 633
Цитата (GrizlyBear @ 5.08.2015 - 13:29)
порталом не ошибся ?

Порталом может и ошибся, а вот веткой точно нет.
Админы то везде есть и на ЯПе думаю их не мало
 
[^]
Azes
5.08.2015 - 13:37
0
Статус: Offline


Шутник

Регистрация: 28.02.10
Сообщений: 13
Ну с PowerShell не знаком, и желания разбираться вообще нет, но на каком нибудь нормальном языке наклепать такое не проблема.
А не проще ли напрямую с базой данных работать чем из дампа все это дело выдергивать?
 
[^]
Hydromarine
5.08.2015 - 14:07
0
Статус: Offline


Хохмач

Регистрация: 2.04.14
Сообщений: 633
Цитата (Azes @ 5.08.2015 - 13:37)
Ну с PowerShell не знаком, и желания разбираться вообще нет, но на каком нибудь нормальном языке наклепать такое не проблема.
А не проще ли напрямую с базой данных работать чем из дампа все это дело выдергивать?

Знать бы где лежат эти сертификаты, я бы сам с этим не связывался, скорее всего где-то в зашифрованном виде. Как их и откуда дергать представления не имею ни малейшего =( От программирования я далек, хоть и понимаю что те кто смогут это дело обыграют строк в 10 кода. Сертификаты эти централизованно массово не экспортировать из самого центра, приходится иметь дело с граблями.
А по поводу powershell я так написал с ходу, мне по большому счету по барабану далеко на чем это может работать. Главное результат, чтоб файлики создавались и брали имя из поля Issued Common Name, а в тело файла записывалась инфа от -----BEGIN CERTIFICATE----- до -----END CERTIFICATE----- и файлы были с расширением .crt
 
[^]
mrmypp
5.08.2015 - 14:10
1
Статус: Offline


Шутник

Регистрация: 30.12.12
Сообщений: 0
Ctrl-X, Ctrl-V
 
[^]
Тормал
5.08.2015 - 14:13
0
Статус: Offline


Весельчак

Регистрация: 21.02.14
Сообщений: 144
А че base64 утилита уже не проканывает?

Это сообщение отредактировал Тормал - 5.08.2015 - 14:13
 
[^]
Hydromarine
5.08.2015 - 14:17
0
Статус: Offline


Хохмач

Регистрация: 2.04.14
Сообщений: 633
Цитата (mrmypp @ 5.08.2015 - 14:10)
Ctrl-X, Ctrl-V

А когда пол-миллиона сертификатов?

Добавлено в 14:19
Цитата (Тормал @ 5.08.2015 - 14:13)
А че base64 утилита уже не проканывает?

Вместо нее есть certutil.exe, но она сцука не может экспортировать множество сертификатов x509 в файл
 
[^]
Точегонет
5.08.2015 - 14:33
0
Статус: Offline


Я вам пишу. Чего ?

Регистрация: 27.09.14
Сообщений: 2399
Эх, эту тему бы, да в понедельник, с утра ! gigi.gif
 
[^]
Nevius
5.08.2015 - 14:42
1
Статус: Online


Ярила

Регистрация: 16.04.08
Сообщений: 2427
а почему именно powershell?
есть autoit, который с простейшим синтаксисом и парсер можно написать за час
 
[^]
OFF8one
5.08.2015 - 14:45
0
Статус: Offline


Шутник

Регистрация: 2.05.13
Сообщений: 32
Цитата (Nevius @ 5.08.2015 - 14:42)
а почему именно powershell?
есть autoit, который с простейшим синтаксисом и парсер можно написать за час

поддерживаю! на Autoit это делается ну не за полчаса и 10 строк, но довольно таки быстро и просто.
если не осилишь, пиши в личку, как раз до вечера бездельничаю, посмотрим.
 
[^]
mrmypp
5.08.2015 - 15:03
2
Статус: Offline


Шутник

Регистрация: 30.12.12
Сообщений: 0
awk 'split_after == 1 {n++;split_after=0} /-----END CERTIFICATE-----/ {split_after=1} {print > "cert" n ".pem"}' < src.cert

распарсит файл на N файлов cert1....certN, затем можно сходить по каждому файлу погрепать его на предмет строки "Issued Common Name: "User 3" " и переименовать его

cat certN.pem | grep "Issued Common Name:" | awk -F":|," '{print $2}'
"User 1"
"User 2"
"User 3"

по вкусу убрать переводы строки вначале файлов

Это сообщение отредактировал mrmypp - 5.08.2015 - 15:05
 
[^]
Nevius
5.08.2015 - 15:06
0
Статус: Online


Ярила

Регистрация: 16.04.08
Сообщений: 2427
Цитата (OFF8one @ 5.08.2015 - 14:45)
Цитата (Nevius @ 5.08.2015 - 14:42)
а почему именно powershell?
есть autoit, который с простейшим синтаксисом и парсер можно написать за час

поддерживаю! на Autoit это делается ну не за полчаса и 10 строк, но довольно таки быстро и просто.
если не осилишь, пиши в личку, как раз до вечера бездельничаю, посмотрим.

если тож нужна помощь, я часа через 3 буду бездельничать... хотел предложить ТС помощь, но гляжу, припоздал )))
 
[^]
Hydromarine
5.08.2015 - 15:11
0
Статус: Offline


Хохмач

Регистрация: 2.04.14
Сообщений: 633
Цитата (mrmypp @ 5.08.2015 - 15:03)
awk 'split_after == 1 {n++;split_after=0}  /-----END CERTIFICATE-----/ {split_after=1}  {print > "cert" n ".pem"}' < src.cert

распарсит файл на  N файлов cert1....certN, затем можно сходить по каждому файлу погрепать его на предмет строки "Issued Common Name: "User 3" " и переименовать его

cat certN.pem | grep "Issued Common Name:" | awk -F":|," '{print $2}'
"User 1"
"User 2"
"User 3"

по вкусу убрать переводы строки вначале файлов

Низкий поклон! Скрипт закрутился, парсит, но возвращает ошибку
Это баш чтоль?

Это сообщение отредактировал Hydromarine - 5.08.2015 - 15:29
 
[^]
darsay
5.08.2015 - 15:18
2
Статус: Offline


Закоренелый ЯПовоид

Регистрация: 20.04.11
Сообщений: 1203
Я, хер его знает, зачем прочитал все сообщения в этой теме, которую сам то не понял. Кто теперь вернет мне мозг?
 
[^]
mrmypp
5.08.2015 - 15:24
0
Статус: Offline


Шутник

Регистрация: 30.12.12
Сообщений: 0
ну возможно ваша версия awk не поддерживает такой синтаксис. Да. баш

Это сообщение отредактировал mrmypp - 5.08.2015 - 15:26
 
[^]
vitaly1111
5.08.2015 - 15:35
0
Статус: Offline


Ярила

Регистрация: 2.09.14
Сообщений: 2682
если че в винде вместо грепа можно findstr. или скачать баш и утилиты под винду.
 
[^]
Hydromarine
5.08.2015 - 16:00
0
Статус: Offline


Хохмач

Регистрация: 2.04.14
Сообщений: 633
запускаю через cygwin, ошибок не выбрасывает, но и на файлы не разбивает, либо я просто не понимаю куда он их кидает
куда кидает нашел, только не распарсивает он их, создает один единственный cert.pem с тем же самым содержимым

Это сообщение отредактировал Hydromarine - 5.08.2015 - 16:14
 
[^]
Сканер26
5.08.2015 - 16:04
0
Статус: Offline


Хохмач

Регистрация: 10.01.14
Сообщений: 791
Пля, вы с кем разговариваете на птичьем языке?
 
[^]
mrmypp
5.08.2015 - 16:14
0
Статус: Offline


Шутник

Регистрация: 30.12.12
Сообщений: 0
Цитата (Hydromarine @ 5.08.2015 - 16:00)
запускаю через cygwin, ошибок не выбрасывает, но и на файлы не разбивает, либо я просто не понимаю куда он их кидает

он должен создавать их там же, где вы его запускаете. Как вариант можно в виртуалке быстро развернуть любой *nix и сделать все в нем
 
[^]
Hydromarine
5.08.2015 - 17:31
1
Статус: Offline


Хохмач

Регистрация: 2.04.14
Сообщений: 633
Вот еще одно решение подкинул гуру на одном из форумов.
Решение как раз на autoit

$FileArr=FileReadToArray(@ScriptDir&'\1.txt')
For $StringNum=0 To UBound($FileArr)-1
If StringInStr($FileArr[$StringNum], 'Issued Common Name') Then
$CrtFileName=StringRegExp($FileArr[$StringNum], '"(.*)"', 1)
$HFile=FileOpen(@ScriptDir&'\'&$CrtFileName[0]&'.crt', 10)
$StringNum+=1
Do
$StringNum+=1
FileWrite($HFile, $FileArr[$StringNum]&@CRLF)
Until StringInStr($FileArr[$StringNum], 'END CERTIFICATE')
FileClose($HFile)
EndIf
Next

 
[^]
Nevius
5.08.2015 - 17:56
0
Статус: Online


Ярила

Регистрация: 16.04.08
Сообщений: 2427
Цитата (Hydromarine @ 5.08.2015 - 17:31)
Вот еще одно решение подкинул гуру на одном из форумов.
Решение как раз на autoit

$FileArr=FileReadToArray(@ScriptDir&'\1.txt')
For $StringNum=0 To UBound($FileArr)-1
If StringInStr($FileArr[$StringNum], 'Issued Common Name') Then
$CrtFileName=StringRegExp($FileArr[$StringNum], '"(.*)"', 1)
$HFile=FileOpen(@ScriptDir&'\'&$CrtFileName[0]&'.crt', 10)
$StringNum+=1
Do
$StringNum+=1
FileWrite($HFile, $FileArr[$StringNum]&@CRLF)
Until StringInStr($FileArr[$StringNum], 'END CERTIFICATE')
FileClose($HFile)
EndIf
Next

к этому всему вроде еще кучу таких вот должно быть ))
если через часа 2 еще актуально будет, стукнись в ПМ

#include ************

 
[^]
Понравился пост? Еще больше интересного в Телеграм-канале ЯПлакалъ!
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии. Авторизуйтесь, пожалуйста, или зарегистрируйтесь, если не зарегистрированы.
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) Просмотры темы: 6402
0 Пользователей:
Страницы: (2) [1] 2  [ ОТВЕТИТЬ ] [ НОВАЯ ТЕМА ]


 
 



Активные темы






Наверх