Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Получить значения из файла (http://forum.oszone.net/showthread.php?t=349785)

ivan.vas 12-10-2021 09:12 2968569

Получить значения из файла
 
Добрый день.
Помогите с решением задачи по get-content хотя возможно будет уместно и Select-String.
Смысл в том, что есть файл логов, в нем полная мешанина, но есть два значения UserName и Password.
Хотелось что бы скрипт выдавал значения UserName и Password. В самом файле они выглядят так:
"UserName":"login"
"Password":"Pass"

Пробовал вот так:
Код:

get-content "C:\1.log" |?{$_ -match "UserName"}|%{$Matches[0]}
но выдает только UserName, а не его значение. :(

Пробовал еще вот так:
Код:

gc "123.log" |sls '(?<=userName=).+?(?=&RememberMe)' -all
Выдает конечно то что нужно, но объем полный как в примере.

Можно ли укоротить до вывода хотя бы:
userName=USERNAME&Password=Password

Пример лога:

*.*.*.* - [30/Sep/2000:00:00:38 +0300] "/login/" "POST /login/ HTTP/1.1" 302 325 "" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36" 0.026 <"userName=USERNAME&Password=Password&RememberMe=true&BackUrl=&g-recaptcha-response=" >"{"ErrorMessage":null,"CaptchaModel":{"ShowCaptcha":false,"ErrorMessage":null},"UserName":"USERNAME ","Password":"Password","RememberMe":true,"LoginRedirectUrl":null,"RedirectUrl":null,"BackUrl":"","C hangePasswordUrl":null,"RegistrationUrl":null}"

ivan.vas 12-10-2021 10:50 2968580

Нашел похожую тему http://forum.oszone.net/thread-345862.html

Подскажите, а gc может вывод делать в файл?

Fors1k 12-10-2021 13:43 2968602

Код:

cls
$pathLog = "D:\files\log.txt"
$pathOut = "D:\files\pwd.txt"

(
gc $pathLog) -replace '.*name=(.*)&password=(.*?)&.*', "`$1`n`$2"|Out-File $pathOut


DJ Mogarych 12-10-2021 15:43 2968609

Чуть точнее:
Код:

(gc "D:\temp\log.txt") -replace '.*UserName\":\"(.*?)\",\"Password\":\"(.*?)\".*',"`$1`n`$2" > "D:\temp\login-pass.txt"

ivan.vas 12-10-2021 16:48 2968617

DJ Mogarych, подскажите, а можно брать начало строки?
Из примера, что б получилось:
*.*.*.* - UserName - Password

За *.*.*.* прячется ip адрес, я так понимаю что его можно забрать конструкцией:
Код:

?{$_ -match "\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}"}|%{$Matches[0]}

DJ Mogarych 12-10-2021 17:42 2968620

Код:

(gc "D:\temp\log.txt") -replace '^(.*?) - .*UserName\":\"(.*?)\",\"Password\":\"(.*?)\".*',"`$1 - `$2 - `$3"  > "D:\temp\login-pass.txt"

ivan.vas 13-10-2021 09:52 2968669

DJ Mogarych, подскажите, а можно ли сделать так, что б было условие ip и только UserName с Password? Вопрос связан с тем, что у меня есть выборки с ip без UserName и Password.

DJ Mogarych 13-10-2021 10:42 2968672

Цитата:

Цитата ivan.vas
что б было условие ip и только UserName с Password? »

Я не понял, объясните получше.

ivan.vas 13-10-2021 10:46 2968673

Цитата:

Цитата DJ Mogarych
Я не понял, объясните получше. »

Образно как то так:
Код:

-match ip -and UserName -and Password
А в коде выходит что есть условие вида:
Код:

-match ip -or UserName -and Password

DJ Mogarych 13-10-2021 10:52 2968675

В коде сейчас вообще нет никаких условий, он просто выкидывает из строки всё лишнее. Т. е, вам нужно, чтобы присутствовали все 3 компонента? Или два (UserName -and Password)?

И приведите примеры строк, не соответствующих условиям.

Fors1k 13-10-2021 15:39 2968696

Код:

cLs
$pathLog = "D:\files\log.txt"
$pathOut = "D:\files\pwd.txt"

(
sLs '^.+?(?= )|(?<=Name=)[^&]+|(?<=Password=)[^&]+' $pathLog -All).Matches.Value|Out-File $pathOut



Время: 00:25.

Время: 00:25.
© OSzone.net 2001-