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

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

DJ Mogarych 20-10-2022 17:57 2994550

Строку в datetime
 
Привет!

Помогите, пожалуйста, перевести строку
Код:

Dec 23 19:03:15 2022 GMT
в datetime с конвертацией GMT в MSK.

Что-то не пойму, как это сделать, а сам PS эту конструкцию не распознаёт.

Пробовал что-то вроде (даже без GMT)
Код:

$expdate = "Dec 23 19:03:15 2022"
[datetime]::ParseExact("$expdate", "MMM dd HH:mm:ss yyyy", $null)

Исключение при вызове "ParseExact" с "3" аргументами: "Строка не распознана как действительное значение DateTime."
строка:1 знак:1
+ [datetime]::ParseExact("$expdate", "MMM dd HH:mm:ss yyyy", $null)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : FormatException

Проблема ещё, наверное, и в русской винде, потому что
Код:

get-date -f "MMM dd HH:mm:ss yyyy"
окт 20 17:56:20 2022


YuS_2 20-10-2022 19:13 2994556

Цитата:

Цитата DJ Mogarych
сам PS эту конструкцию не распознаёт. »

Дык, потому как нестандарт... RFC1123 предполагает: ddd, dd MMM yyyy HH:mm:ss GMT
Код:

get-date -f R
Но таки нестандарт тоже можно обработать:
Код:

$a = 'Dec 23 19:03:15 2022 GMT'
[datetime]::parseexact($a, 'MMM dd HH:mm:ss yyyy GMT', [system.globalization.cultureinfo]::invariantculture)
# или так:
[datetime]::parseexact($a, 'MMM dd HH:mm:ss yyyy GMT', (new-object cultureinfo("en-US")))


Foreigner 20-10-2022 19:14 2994557

Я не нашел такого формата
Код:

Get-Date $('{0} {3}, {1} {2} {4}' -f 'Dec 23 19:03:15 2022 GMT'.Split())

DJ Mogarych 20-10-2022 20:39 2994560

Спасибо вам большое!

Это вывод curl.exe - я с его помощью пытаюсь собирать информацию о датах окончания действия SSL-сертификатов. Это там такой формат даты.
Код:

Server certificate:
*  subject: CN=kerberos.io
*  start date: Aug 31 11:26:03 2022 GMT
*  expire date: Nov 29 11:26:02 2022 GMT
*  subjectAltName: host "kerberos.io" matched cert's "kerberos.io"
*  issuer: C=US; O=Let's Encrypt; CN=R3
*  SSL certificate verify ok.

А почему я использую сторонний curl.exe - потому что с помощью чистого powershell не всегда удаётся прочесть дату, вот, например, с kerberos.io. Возможно, из-за HTTP/2, не разбирался.

Кстати, в Windows 10 и новее curl.exe поставляется вместе с системой (не путать с алиасом curl к команде Invoke-WebRequest), но он поддерживает меньше возможностей - данных о сертификате SSL от него получить не удаётся.

Код:

# встроенный в систему
curl 7.83.1 (Windows) libcurl/7.83.1 Schannel
Release-Date: 2022-05-13
Protocols: dict file ftp ftps http https imap imaps pop3 pop3s smtp smtps telnet tftp
Features: AsynchDNS HSTS IPv6 Kerberos Largefile NTLM SPNEGO SSL SSPI UnixSockets

# взятый с сайта
curl 7.85.0 (x86_64-w64-mingw32) libcurl/7.85.0 OpenSSL/3.0.5 (Schannel) zlib/1.2.13 brotli/1.0.9 zstd/
1.5.2 WinIDN libssh2/1.10.0 nghttp2/1.50.0 ngtcp2/0.9.0 nghttp3/0.7.1 libgsasl/2.2.0
Release-Date: 2022-08-31
Protocols: dict file ftp ftps gopher gophers http https imap imaps ldap ldaps mqtt pop3 pop3s rtsp scp
sftp smb smbs smtp smtps telnet tftp
Features: alt-svc AsynchDNS brotli gsasl HSTS HTTP2 HTTP3 HTTPS-proxy IDN IPv6 Kerberos Largefile libz
MultiSSL NTLM SPNEGO SSL SSPI threadsafe TLS-SRP UnixSockets zstd


YuS_2 21-10-2022 05:00 2994571

Цитата:

Цитата DJ Mogarych
пытаюсь собирать информацию о датах окончания действия SSL-сертификатов. »

Работу с сертификатами особо не разбирал, но pwershell, вроде бы умеет с ними обходиться... насколько правильно, затрудняюсь сказать, ибо надобности такой не было..
Вот, пару ссылок, для информации, возможно, что-либо пригодится:
https://habr.com/ru/company/t1_cloud/blog/661107/
https://winitpro.ru/index.php/2020/0...sl-sertifikat/

DJ Mogarych 21-10-2022 10:25 2994579

Рецепт с Winitpro не работает, т. к. он использует устаревший класс HttpWebRequest - у меня как раз на нём был основан прошлый скрипт, и это сегодня работает через раз.

С Хабра способ работает, там используется класс TcpClient.

YuS_2 21-10-2022 10:50 2994581

Цитата:

Цитата DJ Mogarych
Рецепт с Winitpro не работает, т. к. он использует устаревший класс HttpWebRequest »

Да, наверное... его только в powershell v5.1, если только использовать...

Fors1k 21-10-2022 12:48 2994589

Цитата:

Цитата YuS_2
его только в powershell v5.1, если только использовать »

Зачем, если
Цитата:

Цитата DJ Mogarych
не работает <...> устаревший класс»

?=)

YuS_2 21-10-2022 13:20 2994592

Цитата:

Цитата Fors1k
Зачем, если »

в 5.1 работает... а 5.1 - это то, что предустановлено, сейчас.
Цитата:

Проверка https://winitpro.ru
Сертификат для сайта https://winitpro.ru истечет через 23 дней [11/14/2022 05:59:19]. Подробности:

Cert name: CN=winitpro.ruCert thumbprint: 7A288043CE89BF1E5EBA4C4E01CECB2833E06BD5
Cert effective date: 16.08.2022 5:59:20
Cert issuer: C=US, O=Let's Encrypt, CN=R3
________________

PS_5.1>

DJ Mogarych 21-10-2022 13:39 2994593

YuS_2, проверьте kubernetes.io

Устаревший класс не для PS, я для .NET.

Foreigner 21-10-2022 14:27 2994596

Цитата:

Цитата DJ Mogarych
Устаревший класс не для PS, я для .NET. »

Код:

PS C:\> [Net.HttpWebRequest] | fl FullName, AssemblyQualifiedName

FullName              : System.Net.HttpWebRequest
AssemblyQualifiedName : System.Net.HttpWebRequest, System.Net.Requests, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a


DJ Mogarych 21-10-2022 14:33 2994597

https://github.com/dotnet/runtime/is...ment-484300926

А вот и та же проблема, с которой я столкнулся: Unable to download HTTPs Certificates, там дают ссылку на обсуждение выше.

YuS_2 21-10-2022 17:24 2994626

Вложений: 1
Цитата:

Цитата DJ Mogarych
проверьте kubernetes.io »

Файл 167459

Цитата:

Цитата DJ Mogarych
Устаревший класс не для PS, я для .NET. »

Всё верно (только уточнение: для .Net Core)... но поскольку powershell 5.1 статичен и совсем не лезет в .Net Core, он ведь и сам давно устарел...
Тем не менее, он предустановлен по умолчанию и его функции можно использовать изкаропки

Цитата:

Цитата DJ Mogarych
А вот и та же проблема, с которой я столкнулся »

Да, понятно, что она есть и существует...
Кстати, там речь о PS 7.0.2, но и в 7.2.6 всё то же самое... то бишь устаревшие классы чинить не собираются, если и работают через пень колоду, то это совершенно случайно... :)
А как по мне, то правильнее было бы: устарел класс - выпилить его нафик, чтобы и духу его не было - кому надо, переписывайте свой код. А то получается какая-то солянка из трухлявых мухоморов или просто свалка мусорного кода и чтобы обнаружить, что какой-то класс вдруг устарел (он ведь работал ранее и сейчас как-то работает, хоть и неправильно), надо листать документацию, которая написана, мягко говоря, не очень доходчиво. Судите сами:
Что это? Рекомендация не использовать и только... для устаревшего класса, как-то невнятно прожевали и выплюнули, имхо. Конкретнее необходимо указывать в самом начале, мол класс устарел, оставлен для совместимости с уже написанным кодом, рекомендуется использовать вместо него то-то и то-то ... так было бы понятнее.


Время: 06:02.

Время: 06:02.
© OSzone.net 2001-