Ответ 1
Это преднамеренное решение. При нажатии строки на DateTime
вы можете использовать либо формат braindead US , либо ISO 8601 - [datetime]'2012-10-12'
работает просто отлично и гораздо приятнее читать.
Причина, по которой это ограничено и ограничено, заключается в том, что скрипты не должны иметь зависимости от текущей культуры, по крайней мере, для литералов и квази-литералов (например, кастинговых строк). Это серьезная проблема при написании надежных пакетных файлов, и вы, разумеется, не хотите иметь одинаковые проблемы в PowerShell.
Ли Холмс имеет объяснение, которое можно считать полуофициальным, поскольку он/был в команде PowerShell в MS:
Чтобы предотвратить появление тонких проблем интернационализации в ваших сценариях, PowerShell рассматривает
[DateTime] '11/26/2007'
(константу даты) как функцию языка - так же, как это делает[Double] 10.5
(числовая константа.) Не все культуры используют десятичную точку как разделитель фракций, но языки программирования стандартизируются. Не все культуры используют формат en-USDateTime
, что приводит к миллионам ошибок интернационализации, когда люди не считают, что их программное обеспечение работает в этих культурах.
Что Ли забывает упомянуть, это то, что я написал раньше, что работает гораздо более разумный формат ISO 8601.
Документация об этом не существует, к сожалению, в документации PowerShell или в Спецификации языка (v2). Тем не менее, есть очень мало доказательств того, что это указывает на ошибку.