PowerShell - [решено] День недели по-русски

Аватара пользователя
DJ Mogarych

PowerShell - [решено] День недели по-русски

Сообщение DJ Mogarych »

Привет!

Подскажите, пожалуйста - как мне заставить павершелл возвращать день недели на русском?

Сейчас вот так:



Код:

Код: Выделить всё

PS C:\temp> (get-date).DayOfWeek
Sunday

Это при том, что Windows русский, все региональные параметры настроены на русский, часовой пояс, местоположение, настройка для программ, не понимающих юникода - всё русское.



В чём дело?



Windows 10 1909 x64 pro.
Аватара пользователя
greg zakharov

Re: PowerShell - [решено] День недели по-русски

Сообщение greg zakharov »

Цитата Charg:



Очень долго сидел над этой проблемой и таки нашел красивый, читабельный и скорее всего наиболее правильный способ.



Наиболее правильный способ был показан YuS_2. Почему? Командлет Get-Date спроектирован относительно пространства имен System.Globalization, так что ваш код избыточен вдвойне, если учесть наличие командлета Get-Culture:



Код:

Код: Выделить всё

(Get-Culture ru-RU).DateTimeFormat.GetDayName((Get-Date).DayOfWeek) # вторник
(Get-Culture ja-JP).DateTimeFormat.GetDayName((Get-Date).DayOfWeek) # 火曜日
(Get-Culture uk-UA).DateTimeFormat.GetDayName((Get-Date).DayOfWeek) # вiвторок
Аватара пользователя
YuS_2

Re: PowerShell - [решено] День недели по-русски

Сообщение YuS_2 »

Цитата DJ Mogarych:



Сколько граблей поразложено везде!
PowerShell - [решено] День недели по-русски




Угу, голова должна крутиться на 360 градусов, чтобы по лбу не получить... такие индусы. Изображение



Кстати, если требуется именно точечная нотация, то в цитате метод описан:



Код:

Код: Выделить всё

(get-date).tostring('dddd')
Аватара пользователя
DJ Mogarych

Re: PowerShell - [решено] День недели по-русски

Сообщение DJ Mogarych »

Вот жеж, а!

Сколько граблей поразложено везде!



Спасибо!
Аватара пользователя
DJ Mogarych

Re: PowerShell - [решено] День недели по-русски

Сообщение DJ Mogarych »

Хотел ещё спросить.



Есть некий CSV, я его импортирую, и в выборе полей (select) есть такое:



Код:

Код: Выделить всё

@{n='Время доступа';e={$_.TimeAccessed -as [datetime]}},
@{n='День недели';e={($_.TimeAccessed -as [datetime]).ToString('dddd')}},

Можно ли как-то сделать так, чтобы два раза не преобразовывать строку в datetime?

Типа -outvariable, чтобы вызвать его во второй строке, но у меня не получилось его как-то сюда воткнуть.
Аватара пользователя
Busla

Re: PowerShell - [решено] День недели по-русски

Сообщение Busla »

DJ Mogarych, можете вторым select вычислять второе свойство :-)



либо через внешнюю переменную:



Код:

Код: Выделить всё

$externalVar = @{}
[PSCustomObject]@{TimeAccessed='2020-02-03 14:58:03'},[PSCustomObject]@{TimeAccessed='2020-02-01 14:58:03'} | Select-Object @{n='Время доступа';e={ ($externalVar['dateTimeAccessed'] = $_.TimeAccessed -as [datetime])}},@{n='День недели';e={$externalVar['dateTimeAccessed'].ToString('dddd')}}
Аватара пользователя
DJ Mogarych

Re: PowerShell - [решено] День недели по-русски

Сообщение DJ Mogarych »

Цитата DJ Mogarych:



Можно ли как-то сделать так, чтобы два раза не преобразовывать строку в datetime?
PowerShell - [решено] День недели по-русски




Да, вот Busla уже подсказал как, но в этом нет большого смысла и никакого профита, только усложнится и увеличится код.




Цитата DJ Mogarych:



В итоге придумал третий способ.
PowerShell - [решено] День недели по-русски




Ну, через цикл можно и в конвейере было добавить свойство...



Код:

Код: Выделить всё

...|select @{n='Время доступа';e={$_.timeaccessed -as [datetime]}}|
%{
    $_|
    add-member -membert noteproperty -name {День недели} -value ($_.'Время доступа').tostring('dddd') -force -pass
}
Ответить

Вернуться в «Скриптовые языки администрирования Windows»