Войти

Показать полную графическую версию : [решено] Получить значения из файла


ivan.vas
12-10-2021, 09:12
Добрый день.
Помогите с решением задачи по 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":"","ChangePasswordUrl":null,"RegistrationUrl":null}"

ivan.vas
12-10-2021, 10:50
Нашел похожую тему http://forum.oszone.net/thread-345862.html

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

Fors1k
12-10-2021, 13:43
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
Чуть точнее:

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

ivan.vas
12-10-2021, 16:48
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
(gc "D:\temp\log.txt") -replace '^(.*?) - .*UserName\":\"(.*?)\",\"Password\":\"(.*?)\".*',"`$1 - `$2 - `$3" > "D:\temp\login-pass.txt"

ivan.vas
13-10-2021, 09:52
DJ Mogarych, подскажите, а можно ли сделать так, что б было условие ip и только UserName с Password? Вопрос связан с тем, что у меня есть выборки с ip без UserName и Password.

DJ Mogarych
13-10-2021, 10:42
что б было условие ip и только UserName с Password? »
Я не понял, объясните получше.

ivan.vas
13-10-2021, 10:46
Я не понял, объясните получше. »
Образно как то так:
-match ip -and UserName -and Password
А в коде выходит что есть условие вида:
-match ip -or UserName -and Password

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

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

Fors1k
13-10-2021, 15:39
cLs
$pathLog = "D:\files\log.txt"
$pathOut = "D:\files\pwd.txt"

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




© OSzone.net 2001-2012