<p>Предварительная версия PowerShell 7.1 Preview 3 не использует настроенный формат даты / времени</p>

Созданный на 22 мая 2020  ·  71Комментарии  ·  Источник: PowerShell/PowerShell

Это должно говорить само за себя:

`` ''

$ PSVersionTable.PSVersion.ToString (); (Get-ItemProperty 'HKCU: Control PanelInternational' -name sTimeFormat) .sTimeFormat; (Get-ItemProperty 'HKCU: Control PanelInternational' -name sShortDate) .sShortDate; Get-Date -DisplayHint Time; Get-Date | ConvertTo-CSV
7.0.1
ЧЧ: мм: сс
гггг-ММ-дд

10:03:10
«DisplayHint», «DateTime», «Date», «Day», «DayOfWeek», «DayOfYear», «Hour», «Kind», «Millisecond», «Minute», «Month», «Second», «Ticks» "," TimeOfDay "," Год "
«DateTime», «Пятница, 22 мая 2020 г., 10:03:10», «2020-05-22 00:00:00», «22», «Пятница», «143», «10», «Местное» , «179», «3», «5», «10», «637257385901795718», «10: 03: 10.1795718», «2020»

$ PSVersionTable.PSVersion.ToString (); (Get-ItemProperty 'HKCU: Control PanelInternational' -name sTimeFormat) .sTimeFormat; (Get-ItemProperty 'HKCU: Control PanelInternational' -name sShortDate) .sShortDate; Get-Date -DisplayHint Time; Get-Date | ConvertTo-CSV
7.1.0-превью.3
ЧЧ: мм: сс
гггг-ММ-дд

10:03:37
«DisplayHint», «DateTime», «Date», «Day», «DayOfWeek», «DayOfYear», «Hour», «Kind», «Millisecond», «Minute», «Month», «Second», «Ticks» "," TimeOfDay "," Год "
«DateTime», «Пятница, 22 мая 2020 г., 10:03:37 AM», «22.05.2020 12:00:00 AM», «22», «Пятница», «143», «10», « Местные »,« 61 »,« 3 »,« 5 »,« 37 »,« 637257386170614178 »,« 10: 03: 37.0614178 »,« 2020 »

`` ''

Действия по воспроизведению

  • использовать стандартную культуру en-US
  • установите формат времени на 24 часа HH:mm:ss и формат даты на yyyy-MM-dd через Настройки
  • запустить Get-Date | ConvertTo-Csv

Ожидаемое поведение

Время форматируется в 24-часовом формате, дата - в указанном формате yyyy-MM-dd .

Фактическое поведение

Время отформатировано в 12-часовом формате, дата - в формате M/dd/yyyy

Данные окружающей среды

> $PSVersionTable

Name                           Value
----                           -----
PSVersion                      7.1.0-preview.3
PSEdition                      Core
GitCommitId                    7.1.0-preview.3
OS                             Microsoft Windows 10.0.18363
Platform                       Win32NT
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1
WSManStackVersion              3.0

Issue-Question Resolution-Fixed Waiting - DotNetCore

Самый полезный комментарий

Ребята из .NET отметили мою проблему как дубликат dotnet / runtime # 37121, где @safern утверждает, что это было исправлено для .NET 5 Preview 5 - не то, что я вижу ...

Это утверждение с моей стороны было изначально ошибочным, поскольку я думал, что https://github.com/dotnet/runtime/issues/37121 был обманом https://github.com/dotnet/runtime/issues/35638, который был исправлен в Preview5. . Я ожидаю, что на этой неделе у меня будет исправление для https://github.com/dotnet/runtime/issues/37121, и я надеюсь, что смогу вовремя перенести его на Preview6.

Все 71 Комментарий

Это новое поведение в последней предварительной версии или так было всегда?

Я бы сказал, что это новинка в Preview 3. Жаль, что я только что обновил свою последнюю систему, поэтому у меня больше нет системы Preview 2.

Нам нужно будет подтвердить, было ли изменение в какой-то момент или это исходное поведение.

Кроме того, можете ли вы подтвердить, влияет ли это вообще, явно используя параметр -UseCulture ?

Мы используем метод Datetime.ToLongTimeString() для вывода в случае.
Также вы можете посмотреть (Get-Culture).DateTimeFormat .

В 7.0.1:

`` ''

$ PSVersionTable.PSVersion.ToString (); (Get-Культура) .DateTimeFormat
7.0.1

AMD Разработчик: AM
Календарь: System.Globalization.GregorianCalendar
DateSeparator: -
FirstDayOfWeek: понедельник
CalendarWeekRule: FirstDay
FullDateTimePattern: дддд, ММММ д, гггг ЧЧ: мм: сс
LongDatePattern: дддд, ММММ д, гггг
LongTimePattern: ЧЧ: мм: сс
MonthDayPattern: MMMM d
PMDesignator: PM
RFC1123 Шаблон: ддд, дд МММ гггг ЧЧ ':' мм ':' сс 'GMT'
ShortDatePattern: гггг-ММ-дд
ShortTimePattern: ЧЧ: мм
SortableDateTimePattern: yyyy '-' MM '-' dd'T'HH ':' mm ':' ss
TimeSeparator::
UniversalSortableDateTimePattern: yyyy '-' MM '-' dd HH ':' mm ':' ss'Z '
ГодМесяц Шаблон: ММММ гггг
AbbreviatedDayNames: {вс, пн, вт, ср…}
ShortestDayNames: {вс, пн, вт, ср…}
DayNames: {воскресенье, понедельник, вторник, среда…}
AbbreviatedMonthNames: {янв, фев, март, апр…}
MonthNames: {январь, февраль, март, апрель…}
IsReadOnly: True
NativeCalendarName: григорианский календарь
AbbreviatedMonthGenitiveNames: {янв, фев, март, апр…}
MonthGenitiveNames: {январь, февраль, март, апрель…}
`` ''

В версии 7.1 превью 3:

`` ''

$ PSVersionTable.PSVersion.ToString (); (Get-Культура) .DateTimeFormat
7.1.0-превью.3

AMD Разработчик: AM
Календарь: System.Globalization.GregorianCalendar
DateSeparator: /
FirstDayOfWeek: воскресенье
CalendarWeekRule: FirstDay
FullDateTimePattern: дддд, ММММ д, гггг ч: мм: сс тт
LongDatePattern: дддд, ММММ д, гггг
LongTimePattern: ч: мм: сс тт
MonthDayPattern: MMMM d
PMDesignator: PM
RFC1123 Шаблон: ддд, дд МММ гггг ЧЧ ':' мм ':' сс 'GMT'
ShortDatePattern: M / d / yyyy
ShortTimePattern: ч: мм тт
SortableDateTimePattern: yyyy '-' MM '-' dd'T'HH ':' mm ':' ss
TimeSeparator::
UniversalSortableDateTimePattern: yyyy '-' MM '-' dd HH ':' mm ':' ss'Z '
ГодМесяц Шаблон: ММММ гггг
AbbreviatedDayNames: {вс, пн, вт, ср…}
ShortestDayNames: {S, M, T, W…}
DayNames: {воскресенье, понедельник, вторник, среда…}
AbbreviatedMonthNames: {янв, фев, март, апр…}
MonthNames: {январь, февраль, март, апрель…}
IsReadOnly: True
NativeCalendarName: григорианский календарь
AbbreviatedMonthGenitiveNames: {янв, фев, март, апр…}
MonthGenitiveNames: {январь, февраль, март, апрель…}
`` ''

Нам нужно будет подтвердить, было ли изменение в какой-то момент или это исходное поведение.

Кроме того, можете ли вы подтвердить, влияет ли это вообще, явно используя параметр -UseCulture ?

`` ''

$ PSVersionTable.PSVersion.ToString (); Get-Date | ConvertTo-CSV -UseCulture
7.0.1
«DisplayHint», «DateTime», «Date», «Day», «DayOfWeek», «DayOfYear», «Hour», «Kind», «Millisecond», «Minute», «Month», «Second», «Ticks» "," TimeOfDay "," Год "
«DateTime», «Пятница, 22 мая 2020 г. 19:33:59», «2020-05-22 00:00:00», «22», «Пятница», «143», «19», «Местное» , «174», «33», «5», «59», «637257728391742480», «19: 33: 59.1742480», «2020»

$ PSVersionTable.PSVersion.ToString (); Get-Date | ConvertTo-CSV -UseCulture
7.1.0-превью.3
«DisplayHint», «DateTime», «Date», «Day», «DayOfWeek», «DayOfYear», «Hour», «Kind», «Millisecond», «Minute», «Month», «Second», «Ticks» "," TimeOfDay "," Год "
«DateTime», «Пятница, 22 мая 2020 г., 19:34:45», «22.05.2020 12:00:00», «22», «Пятница», «143», «19», « Местные »,« 63 »,« 34 »,« 5 »,« 45 »,« 637257728850632108 »,« 19: 34: 45.0632108 »,« 2020 »

`` ''

Действительно похоже на регресс. @iSazonov знаете ли вы, были ли внесены какие-либо изменения в эту область кода с версии 7.1-p2? Я не могу вспомнить ни одного на данный момент.

Возможно, это регресс или изменение .NET Core?

Вот что я получаю с предварительным просмотром 2 в той же системе:

`` ''

$ PSVersionTable.PSVersion.ToString (); (Get-ItemProperty 'HKCU: Control PanelInternational' -name sTimeFormat) .sTimeFormat; (Get-ItemProperty 'HKCU: Control PanelInternational' -name sShortDate) .sShortDate; Get-Date -DisplayHint Time; Get-Date | ConvertTo-CSV
7.1.0-превью.2
ЧЧ: мм: сс
гггг-ММ-дд

19:42:05
«DisplayHint», «DateTime», «Date», «Day», «DayOfWeek», «DayOfYear», «Hour», «Kind», «Millisecond», «Minute», «Month», «Second», «Ticks» "," TimeOfDay "," Год "
«DateTime», «Пятница, 22 мая 2020 г. 19:42:05», «2020-05-22 00:00:00», «22», «Пятница», «143», «19», «Местное» , «14», «42», «5», «5», «637257733250149958», «19: 42: 05.0149958», «2020»

$ PSVersionTable.PSVersion.ToString (); Get-Date | ConvertTo-CSV -UseCulture
7.1.0-превью.2
«DisplayHint», «DateTime», «Date», «Day», «DayOfWeek», «DayOfYear», «Hour», «Kind», «Millisecond», «Minute», «Month», «Second», «Ticks» "," TimeOfDay "," Год "
«DateTime», «Пятница, 22 мая 2020 г. 19:42:40», «2020-05-22 00:00:00», «22», «Пятница», «143», «19», «Местное» , «847», «42», «5», «40», «637257733608470239», «19: 42: 40.8470239», «2020»
`` ''

Подтвердить не могу. После того, как я изменил эти строки формата в реестре и перезапустил PowerShell, я получил правильные результаты.

Какая? Где менялись строки формата в упомянутом здесь реестре? 😕

Чтобы все было правильно, я удалил предварительный просмотр 3 и установил предварительный просмотр 2

😜

Эта проблема отмечена как отвеченная, и в ней не было никаких действий в течение 1 дня . Он был закрыт на уборку.

Я не понимаю: в предварительной версии 3 есть проблема, ее нужно исправить!

Я могу сделать репо. Нам нужны надежные шаги репо.
Вы можете загрузить zip-пакеты, установить PowerShell параллельно, запустить обе версии и проверить результат (лучше в чистой системе).

Вы имеете в виду, что вы не можете воспроизвести ?

У меня нет чистой системы для тестирования (могу настроить тестовую виртуальную машину, но это займет значительное время).

Я буду тестировать с развернутыми XCOPY установками SxS предварительной версии 2 и предварительной версии 3.

Вот результат, используя эти сценарии запуска:

REM runpwsh.bat cls PATH=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem .\pwsh -noprofile -file .\runtest.ps1

`` ''

runtest.ps1

$ PSVersionTable.PSVersion.ToString ()
(Get-ItemProperty 'HKCU: Control PanelInternational' -name sTimeFormat) .sTimeFormat
(Get-ItemProperty 'HKCU: Control PanelInternational' -name sShortDate) .sShortDate
Get-Date -DisplayHint Время
Get-Date | ConvertTo-CSV
`` ''

image

image

Воспроизводится на двух разных системах.

Что на выходе:

$ Host

(Get-Культура) .DateTimeFormat

На предварительном просмотре 2:

`` ''
C: tmpPowerShell-7.1.0-preview.2-win-x64> ПУТЬ = C: WINDOWSsystem32; C: WINDOWS; C: WINDOWSSystem32Wbem

C: tmpPowerShell-7.1.0-preview.2-win-x64> .pwsh -noprofile -file .runtest.ps1
7.1.0-превью.2

Имя: ConsoleHost
Версия: 7.1.0-preview.2
InstanceId: 91f11a8e-5486-4058-b1e8-9bb93bb9adc9
Пользовательский интерфейс: System.Management.Automation.Internal.Host.InternalHostUserInterface
CurrentCulture: en-US
CurrentUICulture: en-US
PrivateData: Microsoft.PowerShell.ConsoleHost + ConsoleColorProxy
DebuggerEnabled: True
IsRunspacePushing: Ложь
Область выполнения: System.Management.Automation.Runspaces.LocalRunspace

AMD Разработчик: AM
Календарь: System.Globalization.GregorianCalendar
DateSeparator: -
FirstDayOfWeek: понедельник
CalendarWeekRule: FirstDay
FullDateTimePattern: дддд, ММММ д, гггг ЧЧ: мм: сс
LongDatePattern: дддд, ММММ д, гггг
LongTimePattern: ЧЧ: мм: сс
MonthDayPattern: MMMM d
PMDesignator: PM
RFC1123 Шаблон: ддд, дд МММ гггг ЧЧ ':' мм ':' сс 'GMT'
ShortDatePattern: гггг-ММ-дд
ShortTimePattern: ЧЧ: мм
SortableDateTimePattern: yyyy '-' MM '-' dd'T'HH ':' mm ':' ss
TimeSeparator::
UniversalSortableDateTimePattern: yyyy '-' MM '-' dd HH ':' mm ':' ss'Z '
ГодМесяц Шаблон: ММММ гггг
AbbreviatedDayNames: {вс, пн, вт, ср…}
ShortestDayNames: {вс, пн, вт, ср…}
DayNames: {воскресенье, понедельник, вторник, среда…}
AbbreviatedMonthNames: {янв, фев, март, апр…}
MonthNames: {январь, февраль, март, апрель…}
IsReadOnly: True
NativeCalendarName: григорианский календарь
AbbreviatedMonthGenitiveNames: {янв, фев, март, апр…}
MonthGenitiveNames: {январь, февраль, март, апрель…}

`` ''

В превью 3:

`` ''
C: tmpPowerShell-7.1.0-preview.3-win-x64> ПУТЬ = C: WINDOWSsystem32; C: WINDOWS; C: WINDOWSSystem32Wbem

C: tmpPowerShell-7.1.0-preview.3-win-x64> .pwsh -noprofile -file .runtest.ps1
7.1.0-превью.3

Имя: ConsoleHost
Версия: 7.1.0-preview.3
InstanceId: 9244eab6-c591-4b06-9148-719bc5cba22d
Пользовательский интерфейс: System.Management.Automation.Internal.Host.InternalHostUserInterface
CurrentCulture: en-US
CurrentUICulture: en-US
PrivateData: Microsoft.PowerShell.ConsoleHost + ConsoleColorProxy
DebuggerEnabled: True
IsRunspacePushing: Ложь
Область выполнения: System.Management.Automation.Runspaces.LocalRunspace

AMD Разработчик: AM
Календарь: System.Globalization.GregorianCalendar
DateSeparator: /
FirstDayOfWeek: воскресенье
CalendarWeekRule: FirstDay
FullDateTimePattern: дддд, ММММ д, гггг ч: мм: сс тт
LongDatePattern: дддд, ММММ д, гггг
LongTimePattern: ч: мм: сс тт
MonthDayPattern: MMMM d
PMDesignator: PM
RFC1123 Шаблон: ддд, дд МММ гггг ЧЧ ':' мм ':' сс 'GMT'
ShortDatePattern: M / d / yyyy
ShortTimePattern: ч: мм тт
SortableDateTimePattern: yyyy '-' MM '-' dd'T'HH ':' mm ':' ss
TimeSeparator::
UniversalSortableDateTimePattern: yyyy '-' MM '-' dd HH ':' mm ':' ss'Z '
ГодМесяц Шаблон: ММММ гггг
AbbreviatedDayNames: {вс, пн, вт, ср…}
ShortestDayNames: {S, M, T, W…}
DayNames: {воскресенье, понедельник, вторник, среда…}
AbbreviatedMonthNames: {янв, фев, март, апр…}
MonthNames: {январь, февраль, март, апрель…}
IsReadOnly: True
NativeCalendarName: григорианский календарь
AbbreviatedMonthGenitiveNames: {янв, фев, март, апр…}
MonthGenitiveNames: {январь, февраль, март, апрель…}

`` ''

Во сколько вы меняете формат даты и времени?

Версии PowerShell используют разные .Net 5 Preview - 3 и 4.
Вы можете загрузить ночную сборку (она есть в .Net 5.0 Preview5) и проверить еще раз.
Если вы заметите проблему, вы можете обсудить ее в репозитории .Net Runtime.

Я не уверен, что понимаю ваш вопрос. Когда я изменил формат даты и времени? Должно быть, это было, когда я устанавливал системы в первую очередь, потому что как инженер-программист я предпочитаю 1) английский интерфейс, поэтому я изменил язык дисплея на английский (мои компьютеры поставлялись с французской Windows) 2) ISO8601 YYYY -MM-DD формат даты. Поэтому я, вероятно, никогда не запускал какую-либо версию PowerShell с форматами даты и времени en-US по умолчанию.

Где я могу получить ночные сборки?

Что такое API .NET Core, который используется PowerShell Core для преобразования даты и времени в строку? Мне нужна эта информация, если я хочу открыть вопрос по .NET 5.0.

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

PowerShell использует метод Datetime.ToLongTimeString (). Все форматы, которые вы получили с помощью (Get-Culture) .DateTimeFormat.

На этой главной странице я могу видеть статус ночных сборок в CI, но без ссылок для скачивания. Я что-то упускаю?

Я попробую создать тестовую программу на C # и запустить ее с различными предыдущими версиями .NET 5.

Нажмите на значок статуса и посмотрите артефакты в разделе «Сборка для Windows».

То же воспроизведение:

image

Код, который это обрабатывает, находится здесь:

https://github.com/PowerShell/PowerShell/blob/b1e998046e12ebe5da9dee479f20d479aa2256d7/src/Microsoft.PowerShell.Commands.Utility/commands/utility/CsvCommands.cs#L1045 -L1067

Имея в виду этот код, можете ли вы проверить, что вы получите за (Get-Date).ToString() и (Get-Date).PSObject.ToString() ?

Я открываю это заново, так как не похоже, что мы дошли до сути. 🙂

image

image

image

Как проще всего создать программу на C #, которая вызывает этот метод .ToString() и запускать его в различных предварительных версиях .NET 5 ?

🤔 Хорошо, это _ определенно_ выглядит как регресс в .NET 5, тогда хорошая находка.

Не знаю, есть ли простой способ, но вы можете указать, с каким предварительным просмотром запускать, обычно с global.json в папке проекта; вы можете увидеть пример в global.json в этом репо. 🙂

Если вы можете выяснить, какой предварительный просмотр нарушил поведение ToString (), определенно стоит открыть проблему в репозитории dotnet / runtime, чтобы мы могли исправить это.

Вы сэкономите время, если обсудите это с экспертами по .Net Runtime.

Это то, что я хочу сделать дальше ... как только я найду, как развернуть последние 3 превью .NET 5 бок о бок для запуска тестовой программы C #. Я предполагаю, что где-то есть архивы этих превью, которые можно развернуть с помощью XCOPY ...

Может ли кто-нибудь помочь мне найти эти биты .NET (по крайней мере, версии, используемые в предварительных версиях 2 и 3 для PS7.1)?

Может быть, я просто подожду, пока выйдет предварительная версия 4, основанная на .NET 5 Preview 5, и снова протестирую там ...

Вы можете скачать nightly build - он уже есть на .Net 5 Preview 5.

Хорошие новости!

Но ... когда я достигаю https://powershell.visualstudio.com/PowerShell/_build/results?buildId=55455&view=artifacts&type=publishedArtifacts, я получаю:

image

и нажатие artifacts ничего не делает. Что я делаю неправильно?

Извините за глупость, я определенно новичок в GH CI ...

Вы можете загрузить ночную сборку с главной страницы https://github.com/PowerShell/PowerShell#build -status-of-nightly-builds

GitHub
PowerShell для любой системы! Участвуйте в разработке PowerShell / PowerShell, создав учетную запись на GitHub.

Это именно то, что я пытался сделать, см.
Не могу скачать PS nightly build.zip

Попробуйте «Артефакты» - кнопка справа.

Какая кнопка "Артефакты" справа? См. Мое слайд-шоу PSR или сделайте снимок экрана самостоятельно.

Полагаю, вам нужен журнал ProcMon, в котором я воспроизвожу проблему? Вот он, с превью 3.

runpwsh.bat.procmon.202006150911.PML.zip

@ sba923 Я все же предлагаю открыть новый выпуск в .Net Runtime.

Это то, к чему я стремился в течение некоторого времени, но я не могу, если не могу опубликовать репро. Для этого мне нужно знать, как получить параллельное развертывание различных предварительных версий .NET 5, а затем написать программу на C #, которую я буду запускать для каждой из этих предварительных версий .NET. Мне не удалось узнать, как загрузить и развернуть эти превью. Еще...

Ссылка для скачивания https://dotnet.microsoft.com/download/dotnet/5.0?utm_source=dotnet-website&utm_medium=banner&utm_campaign=preview5-banner
Вы можете использовать установочные скрипты по ссылке.

Спасибо за подсказку.

Но прежде чем я сделаю это, я хотел бы протестировать сборку PowerShell на основе .NET 5 Preview 5 ... ;-)

Думаю, вот и все ;-)

`` ''
используя Систему;

пространство имен DateTimeToString
{
программа класса
{
static void Main (строка [] аргументы)
{
строка dotnetversion = System.Environment.Version.ToString ();
Console.WriteLine ("версия dotnet: {0}", dotnetversion);
var now = System.DateTime.Now;
строка str = now.ToString ();
Console.WriteLine ("DateTime.Now.ToString (): {0}", str);
}
}
}
`` ''

gci -dir 'dotnet5p*' | % { $dotnetdir = $_.FullName "Testing in: " + $dotnetdir & ($dotnetdir + '\dotnet') --info | sls -raw 'Version:.*preview' & ($dotnetdir + '\dotnet') ($dotnetdir + '\DateTimeToString.dll') }

image

В журнале procmon я вижу доступ к ICU - думаю, проблема может быть связана с этим фактом.

Кажется, у .Net есть возможность отказаться от ICU. Вы можете попробовать и увидеть результат.

Вот что я получаю с "System.Globalization.Invariant": true если это то, о чем вы имели в виду:

image

Форматирование неверно независимо от предварительной версии .NET 5.

Нет, есть возможность вернуться с ICU на традиционный API Windows.

См. Https://docs.microsoft.com/en-us/dotnet/core/run-time-config/globalization#nls

Узнайте о параметрах времени выполнения, которые настраивают аспекты глобализации приложения .NET Core, например о том, как оно анализирует японские даты.

Будет тестировать ... Изменение использования ICU было введено в .NET 5 preview 4 ...

Бинго!

image

Ребята из .NET отметили мою проблему как дубликат https://github.com/dotnet/runtime/issues/37121 , где @safern утверждает, что это было исправлено для .NET 5 Preview 5 - не то, что я вижу ...

Правильно ли я предполагаю, что вы не захотите использовать NLS в PowerShell? IMVHO, это может быть потенциальной причиной различного поведения PowerShell в Windows и на других платформах.

Ребята из .NET отметили мою проблему как дубликат dotnet / runtime # 37121, где @safern утверждает, что это было исправлено для .NET 5 Preview 5 - не то, что я вижу ...

Это утверждение с моей стороны было изначально ошибочным, поскольку я думал, что https://github.com/dotnet/runtime/issues/37121 был обманом https://github.com/dotnet/runtime/issues/35638, который был исправлен в Preview5. . Я ожидаю, что на этой неделе у меня будет исправление для https://github.com/dotnet/runtime/issues/37121, и я надеюсь, что смогу вовремя перенести его на Preview6.

Правильно ли я предполагаю, что вы не захотите использовать NLS в PowerShell?

PowerShell следует за улучшениями .Net (и ОС). Было бы замечательно, если бы пользователи обнаружили, что PowerShell работает иначе, чем другие .Net и собственные приложения ОС.

@iSazonov Я не уверен, что знаю, как интерпретировать ваш ответ. Вы (от имени группы PowerShell) за согласование PowerShell в Windows со всеми другими приложениями Windows (в этом случае NLS является нормой) или за согласование PowerShell в Windows с PowerShell на других платформах (в этом случае поведение ICU будет правило)?

Сейчас я могу установить DOTNET_SYSTEM_GLOBALIZATION_USENLS=true в своей глобальной среде, чтобы получить ожидаемое поведение при запуске PowerShell 7.1 preview 3. Или я буду использовать PowerShell 7.0.2 для любых затронутых рабочих нагрузок.

@ sba923 Поскольку NLS и ICU имеют различия, это может быть проблемой - одно приложение .Net может работать по-разному в разных ОС. MSFT начала переходить на ICU. Он был добавлен в последних версиях Windows, и .Net 5.0 по умолчанию использует ICU.
PowerShell 7.1 получает улучшения автоматически. То же самое верно для всех приложений .Net 5+.

Итак, вы выберете PS7.1, используя ICU, и при условии, что это обратно совместимо, например, соответствует настройкам пользователя, верно?

@ sba923 7.1 будет в .Net 5.0. Если .Net будет использовать ICU по умолчанию, PowerShell будет делать то же самое.

Должно быть нормально, при условии, что это не вносит серьезных критических изменений.

Ожидается, что проблема все еще присутствует в 7.1 превью 4 ...

Чтобы дать обновление, у меня есть PR для исправления: https://github.com/dotnet/runtime/pull/38372

Чтобы дать обновление, у меня есть PR для исправления: dotnet / runtime # 38372

Хорошо! Смотрите мой комментарий о том, как оперативно учитывать изменения пользователей. Требуется ли изменение кода на стороне PowerShell?

Если в версии PowerShell 7.0 время (культура) изменяется немедленно, мы получаем критическое изменение.

Если в версии PowerShell 7.0 время (культура) изменяется немедленно, мы получаем критическое изменение.

Что ты имеешь в виду? Что 7.1 должна вести себя так же, как 7.0? Я не знаю, что такое поведение 7.0, но я _ ожидал_, что изменения пользователя будут учитываться динамически.

PS C: srct> ($ PSVersionTable.PSVersion) .ToString (), (Get-Culture) .DateTimeFormat.ShortDatePattern
7.1.0-превью.3
М / д / гггг

PS C: srct> ($ PSVersionTable.PSVersion) .ToString (), (Get-Culture) .DateTimeFormat.ShortDatePattern
7.0.1
гггг-ММ-дд

Исправление .Net было объединено. Скоро получим. (.Net 5.0 Preview8)

Исправление .Net было объединено. Скоро получим. (.Net 5.0 Preview8)

Какой план на тестирование? Насколько сложно создать частную сборку PS7.1 с этим исправлением .NET, чтобы мы могли проверить наличие побочных эффектов / регрессий?

@ sba923 Вы можете собрать .Net локально и протестировать. Но это того не стоит. Можно подождать около месяца.

Все еще ждем выхода .NET Preview 8 ...

PowerShell 7.1.0-preview.7 поставляется с .NET Preview 8, который должен решить эту проблему. Сообщите нам, если это не так.

Я согласен 😜

`` ''

$ PSVersionTable.PSVersion.ToString (); (Get-ItemProperty 'HKCU: Control PanelInternational' -name sTimeFormat) .sTimeFormat; (Get-ItemProperty 'HKCU: Control PanelInternational' -name sShortDate) .sShortDate; Get-Date -DisplayHint Time; Get-Date | ConvertTo-CSV
7.1.0-превью.7
ЧЧ: мм: сс
гггг-ММ-дд

18:08:34
«DisplayHint», «DateTime», «Date», «Day», «DayOfWeek», «DayOfYear», «Hour», «Kind», «Millisecond», «Minute», «Month», «Second», «Ticks» "," TimeOfDay "," Год "
«DateTime», «Четверг, 10 сентября 2020 г. 18:08:35», «2020-09-10 00:00:00», «10», «Четверг», «254», «18», «Местное» , «25», «8», «9», «35», «637353581150253074», «18: 08: 35.0253074», «2020»
`` ''

Была ли эта страница полезной?
0 / 5 - 0 рейтинги