Показать полную графическую версию : [решено] Строку в datetime
DJ Mogarych
20-10-2022, 17:57
Привет!
Помогите, пожалуйста, перевести строку
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
сам 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
Я не нашел такого формата
Get-Date $('{0} {3}, {1} {2} {4}' -f 'Dec 23 19:03:15 2022 GMT'.Split())
DJ Mogarych
20-10-2022, 20:39
Спасибо вам большое!
Это вывод 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
пытаюсь собирать информацию о датах окончания действия SSL-сертификатов. »
Работу с сертификатами особо не разбирал, но pwershell, вроде бы умеет с ними обходиться... насколько правильно, затрудняюсь сказать, ибо надобности такой не было..
Вот, пару ссылок, для информации, возможно, что-либо пригодится:
https://habr.com/ru/company/t1_cloud/blog/661107/
https://winitpro.ru/index.php/2020/01/14/powershell-proverka-expired-ssl-sertifikat/
DJ Mogarych
21-10-2022, 10:25
Рецепт с Winitpro не работает, т. к. он использует устаревший класс HttpWebRequest - у меня как раз на нём был основан прошлый скрипт, и это сегодня работает через раз.
С Хабра способ работает, там используется класс TcpClient.
Рецепт с Winitpro не работает, т. к. он использует устаревший класс HttpWebRequest »
Да, наверное... его только в powershell v5.1, если только использовать...
его только в powershell v5.1, если только использовать »
Зачем, если
не работает <...> устаревший класс»
?=)
Зачем, если »
в 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
YuS_2, проверьте kubernetes.io
Устаревший класс не для PS, я для .NET.
Foreigner
21-10-2022, 14:27
Устаревший класс не для 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
https://github.com/dotnet/runtime/issues/29301#issuecomment-484300926
А вот и та же проблема, с которой я столкнулся: Unable to download HTTPs Certificates (https://github.com/PowerShell/PowerShell/issues/13055), там дают ссылку на обсуждение выше.
проверьте kubernetes.io »
167459
Устаревший класс не для PS, я для .NET. »
Всё верно (только уточнение: для .Net Core)... но поскольку powershell 5.1 статичен и совсем не лезет в .Net Core, он ведь и сам давно устарел...
Тем не менее, он предустановлен по умолчанию и его функции можно использовать изкаропки
А вот и та же проблема, с которой я столкнулся »
Да, понятно, что она есть и существует...
Кстати, там речь о PS 7.0.2, но и в 7.2.6 всё то же самое... то бишь устаревшие классы чинить не собираются, если и работают через пень колоду, то это совершенно случайно... :)
А как по мне, то правильнее было бы: устарел класс - выпилить его нафик, чтобы и духу его не было - кому надо, переписывайте свой код. А то получается какая-то солянка из трухлявых мухоморов или просто свалка мусорного кода и чтобы обнаружить, что какой-то класс вдруг устарел (он ведь работал ранее и сейчас как-то работает, хоть и неправильно), надо листать документацию, которая написана, мягко говоря, не очень доходчиво. Судите сами:
Мы не рекомендуем использовать HttpWebRequest для разработки новых версий. Вместо этого используйте System.Net.Http.HttpClient класс. (https://learn.microsoft.com/ru-ru/dotnet/api/system.net.httpwebrequest?view=net-6.0)
Что это? Рекомендация не использовать и только... для устаревшего класса, как-то невнятно прожевали и выплюнули, имхо. Конкретнее необходимо указывать в самом начале, мол класс устарел, оставлен для совместимости с уже написанным кодом, рекомендуется использовать вместо него то-то и то-то ... так было бы понятнее.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.