Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Реализация grep средствами powershell

Ответить
Настройки темы
PowerShell - [решено] Реализация grep средствами powershell

Пользователь


Сообщения: 51
Благодарности: 1

Профиль | Отправить PM | Цитировать


Изменения
Автор: nwss
Дата: 13-01-2023
У меня есть вот такой вывод одной утилиты

CSP (Type:80) v5.0.10003 KC3 Release Ver:5.0.11455 OS:Windows CPU:AMD64 FastCode:READY:AVX.
AcquireContext: OK. HCRYPTPROV: 9023212
GetProvParam(PP_NAME): Crypto-Pro GOST R 34.10-2012 Cryptographic Service Provider
Container name: "Михеева Ольга Алупьевна 1114443106"
Signature key is not available.
Exchange key is available. HCRYPTKEY: 0x8b7999
Symmetric key is not available.
UEC key is not available.
Keys in container:
exchange key
Extensions:
OID: 1.2.643.2.2.37.3.10
PrivKey: Not specified - 14.02.2023 13:31:19 (UTC)

OID: 1.2.643.2.2.37.3.1
Certificates: 1:
DName: E=uc_fk@roskazna.ru, S=г. Москва, INN=007710568760, OGRN=1047797019830, STREET="Большой Златоустински
й переулок, д. 6, строение 1", L=Москва, C=RU, O=Федеральное казначейство, CN=Федеральное казначейство

OID: 1.2.643.2.2.37.3.3
Certificates: 1:
DName: E=dit@minsvyaz.ru, C=RU, S=77 Москва, L=г. Москва, STREET="улица Тверская, дом 7", O=Минкомсвязь Росс
ии, OGRN=1047702026701, INN=007710474375, CN=Минкомсвязь России
Total: SYS: 0,000 sec USR: 0,000 sec UTC: 0,029 sec
[ErrorCode: 0x00000000]


из которого мне нужно достать дату чтобы сравнить ее с текущей
прибегая к сторонним утилитам я юзал grep где это решалось строкой: grep -Eo "[0-9]{2}\.[0-9]{2}\.[0-9]{4}"
в powershell мне не хватает ключа -o чтобы выдернуть только ту часть строки, которая соответствует паттерну
как это сделать?

вот мой код
Код: Выделить весь код
chcp 65001
$CSPTest = "C:\Program Files (x86)\Crypto Pro\CSP\csptest.exe"
$Conts = . $CSPTest -keys -enum -verifyco
$OnlyContainers = $Conts | Select-Object -SkipLast 3 | Select-Object -Skip 2
$CurrentDate = get-date -Format 'dd.MM.yyyy HH:mm:ss'
foreach($Container in $OnlyContainers){
    $ContInfo = . $CSPTest -keyset -container $Container
    $ContainerDate = $ContInfo -match '[0-9]{1,2}\.[0-9]{2}\.[0-9]{4}'
    Write-Host $Container
    if ($CurrentDate -ge $ContainerDate){
        #. $CSPTest -keys -enum -verifyco -deletek -pattern $Container
        Write-Host -ForegroundColor Green $ContainerDate -NoNewline
    } else {
        Write-Host -ForegroundColor Red $ContainerDate -NoNewline
    }
    Write-Host " : " -NoNewline
    Write-Host -ForegroundColor Yellow $CurrentDate
}



вывод

Абрамова Юлия Ивановна 314122617
PrivKey: Not specified - 13.06.2023 14:57:04 (UTC) : 13.01.2023 14:32:54
ДЕНИНА ЛУЛУМБА ВАСИЛЬЕВНА 1213244259
PrivKey: Not specified - 19.03.2024 17:43:38 (UTC) : 13.01.2023 14:32:54
Астахова Марина Сергеевна 1114442618
PrivKey: Not specified - 14.02.2023 13:26:51 (UTC) : 13.01.2023 14:32:54
Данилова Хрыстина Викторовна 1114443106
PrivKey: Not specified - 14.02.2023 13:31:19 (UTC) : 13.01.2023 14:32:54

желаемый вывод

Абрамова Юлия Ивановна 314122617
13.06.2023 14:57:04 : 13.01.2023 14:32:54
ДЕНИНА ЛУЛУМБА ВАСИЛЬЕВНА 1213244259
19.03.2024 17:43:38 : 13.01.2023 14:32:54
Астахова Марина Сергеевна 1114442618
14.02.2023 13:26:51 : 13.01.2023 14:32:54
Данилова Хрыстина Викторовна 1114443106
14.02.2023 13:31:19 : 13.01.2023 14:32:54


Заранее спасибо

Отправлено: 14:51, 13-01-2023

 

Аватара для YuS_2

Crazy


Contributor


Сообщения: 1235
Благодарности: 518

Профиль | Отправить PM | Цитировать


Цитата nwss:
в powershell мне не хватает ключа -o чтобы выдернуть только ту часть строки, которая соответствует паттерну »
Код: Выделить весь код
$text = @"
Абрамова Юлия Ивановна 314115617
PrivKey: Not specified - 13.06.2023 14:57:04 (UTC) : 13.01.2023 14:32:54
ДЕНИНА ЛУЛУМБА ВАСИЛЬЕВНА 1219144259
PrivKey: Not specified - 19.03.2024 17:43:38 (UTC) : 13.01.2023 14:32:54
Астахова Марина Сергеевна 1115102618
PrivKey: Not specified - 14.02.2023 13:26:51 (UTC) : 13.01.2023 14:32:54
Данилова Хрыстина Викторовна 1115103106
PrivKey: Not specified - 14.02.2023 13:31:19 (UTC) : 13.01.2023 14:32:54
"@

$pattern = "[0-9]{2}\.[0-9]{2}\.[0-9]{4}"

(sls -inp $text -patt $pattern -all).matches.value
Цитата nwss:
желаемый вывод »
Код: Выделить весь код
$text = @"
Абрамова Юлия Ивановна 314115617
PrivKey: Not specified - 13.06.2023 14:57:04 (UTC) : 13.01.2023 14:32:54
ДЕНИНА ЛУЛУМБА ВАСИЛЬЕВНА 1219144259
PrivKey: Not specified - 19.03.2024 17:43:38 (UTC) : 13.01.2023 14:32:54
Астахова Марина Сергеевна 1115102618
PrivKey: Not specified - 14.02.2023 13:26:51 (UTC) : 13.01.2023 14:32:54
Данилова Хрыстина Викторовна 1115103106
PrivKey: Not specified - 14.02.2023 13:31:19 (UTC) : 13.01.2023 14:32:54
"@

$pattern = "[0-9]{2}\.[0-9]{2}\.[0-9]{4}"

$text -split "`n"|%{
	$_ -replace "^privkey.*?(?=$pattern)" -replace "\s\(utc\)"
}

-------
scio me nihil scire. Ѫ

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:19, 13-01-2023 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6705
Благодарности: 1576

Профиль | Отправить PM | Цитировать


Нет Криптопро под рукой, поэтому исходником выступает текст.
Код: Выделить весь код
$t = get-date
$source = gc "D:\temp\1.txt"
$timeStamp = ($source |sls -pattern '^PrivKey:') -replace '.+(\d{2}\.\d{2}\.\d{4} \d{2}:\d{2}:\d{2}).+','$1' -as [datetime]

($timeStamp - $t).days

31

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:22, 13-01-2023 | #3


Deadooshka


Сообщения: 2566
Благодарности: 698

Профиль | Отправить PM | Цитировать


$ContainerDate у вас булев тип, поэтому сравнение дат не будет работать. Найденная подстрока лежит в $matches[0]
Причём надо проверять $ContainerDate на $true иначе уходить на следующую итерацию с continue, иначе в случае несовпадения будет проверяться последнее совпавшее.

Последний раз редактировалось Sham, 13-01-2023 в 16:48.


Отправлено: 16:41, 13-01-2023 | #4


Старожил


Сообщения: 250
Благодарности: 51

Профиль | Отправить PM | Цитировать


еще для этого есть select-string
https://learn.microsoft.com/en-us/po...powershell-7.2
вызывается так

write-output $command_output | Select-String $fragment -Context $before,$after

Отправлено: 18:27, 13-01-2023 | #5


Пользователь


Сообщения: 51
Благодарности: 1

Профиль | Отправить PM | Цитировать


Мой ответ Могарычу спустя пол года

Готовый рабочий и безопасный скрипт удаления старых контейнеров
Код: Выделить весь код
# Для powershell ise нужна смена кодировки
#chcp 65001
if ([Environment]::Is64BitOperatingSystem){
    $CSPTest = "C:\Program Files (x86)\Crypto Pro\CSP\csptest.exe"
} else {
    $CSPTest = "C:\Program Files\Crypto Pro\CSP\csptest.exe"
}
$RegExpPattern = "[0-9]{2}\.[0-9]{2}\.[0-9]{4} [0-9]{2}\:[0-9]{2}\:[0-9]{2}"
$Conts = . $CSPTest -keys -enum -verifyco
$OnlyContainers = $Conts | Select-Object -SkipLast 3 | Select-Object -Skip 2
$CurrentDate = (get-date -Format 'dd.MM.yyyy HH:mm:ss') -as [DateTime]
foreach($Container in $OnlyContainers){
    $ContInfo = . $CSPTest -keyset -container $Container
    $ContainerDate = (Select-String -InputObject $ContInfo -Pattern $RegExpPattern).matches.value -as [DateTime]
    if (-Not($ContainerDate -eq $null)){
        Write-Host 'Контейнер: ' -NoNewline
        Write-Host $Container -ForegroundColor Cyan
        Write-Host 'Действителен до: ' -NoNewline
        Write-Host -ForegroundColor Yellow $ContainerDate -NoNewline
        $DateDifference = $ContainerDate - $CurrentDate
        $LongStr = " (Осталось $($DateDifference.Days) дней $($DateDifference.Hours) часов $($DateDifference.Minutes) минут)"
        if ($CurrentDate -ge $ContainerDate){
            Write-Host $LongStr + '- Удаляем' -ForegroundColor Red
            . $CSPTest -keys -enum -verifyco -deletek -pattern $Container > $null
        } else {
            Write-Host $LongStr -ForegroundColor Green
        }
    } else {
        Write-Host 'Контейнер: ' -NoNewline
        Write-Host $Container -ForegroundColor Cyan
        Write-Host 'Без сертификата' -ForegroundColor Magenta
    }
}

Последний раз редактировалось nwss, 17-01-2023 в 17:09.

Это сообщение посчитали полезным следующие участники:

Отправлено: 16:31, 17-01-2023 | #6


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6705
Благодарности: 1576

Профиль | Отправить PM | Цитировать


Отлично! Если освоите Custom Objects, будет чудесно.

https://www.google.com/search?q=powe...+Custom+Object

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 16:43, 17-01-2023 | #7


Пользователь


Сообщения: 51
Благодарности: 1

Профиль | Отправить PM | Цитировать


Цитата DJ Mogarych:
Отлично! Если освоите Custom Objects, будет чудесно.

https://www.google.com/search?q=powe...+Custom+Object
Это как-то помогло бы мне решить данную задачу более элегантно?

Отправлено: 17:11, 17-01-2023 | #8


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6705
Благодарности: 1576

Профиль | Отправить PM | Цитировать


Полагаю, да, и в будущем очень пригодится.
Можно делать более наглядное и удобное представление данных (таблицы, например), которые потом, например, легко конвертируются в html-отчёты, Excel-документы и прочее.

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 17:20, 17-01-2023 | #9


Пользователь


Сообщения: 51
Благодарности: 1

Профиль | Отправить PM | Цитировать


Тогда встретимся через пол года

Отправлено: 17:25, 17-01-2023 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Реализация grep средствами powershell

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
PowerShell - Отправка письма HTML средствами PowerShell JimmOnLine Скриптовые языки администрирования Windows 6 02-07-2019 09:20
PowerShell - [решено] чтение фотографии из AD средствами PowerShell ANDiv1976 Скриптовые языки администрирования Windows 1 20-06-2019 11:35
2008 R2 - Включение удаленного доступа средствами powershell через GPO blackrouz Windows Server 2008/2008 R2 12 11-05-2016 13:40
PowerShell - [решено] Печать изображения средствами PowerShell. IVa_ Скриптовые языки администрирования Windows 2 24-02-2015 18:29
Конкурс - Руководство по использованию AppLocker средствами PowerShell (Часть 1) OSZone Microsoft Windows 7 0 03-10-2009 21:10




 
Переход