Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] День недели по-русски

Ответить
Настройки темы
PowerShell - [решено] День недели по-русски

Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6705
Благодарности: 1576


Конфигурация

Профиль | Отправить PM | Цитировать


Привет!
Подскажите, пожалуйста - как мне заставить павершелл возвращать день недели на русском?
Сейчас вот так:
Код: Выделить весь код
PS C:\temp> (get-date).DayOfWeek
Sunday
Это при том, что Windows русский, все региональные параметры настроены на русский, часовой пояс, местоположение, настройка для программ, не понимающих юникода - всё русское.

В чём дело?

Windows 10 1909 x64 pro.

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 13:16, 02-02-2020

 

Аватара для YuS_2

Crazy


Contributor


Сообщения: 1235
Благодарности: 518

Профиль | Отправить PM | Цитировать


Цитата DJ Mogarych:
как мне заставить павершелл возвращать день недели на русском? »
Код: Выделить весь код
get-date -f dddd
Цитата DJ Mogarych:
В чём дело? »
Это дотнет перечисление...

-------
scio me nihil scire. Ѫ

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:48, 02-02-2020 | #2



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

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6705
Благодарности: 1576

Профиль | Отправить PM | Цитировать


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

Спасибо!

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 14:10, 02-02-2020 | #3


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1235
Благодарности: 518

Профиль | Отправить PM | Цитировать


Цитата DJ Mogarych:
Сколько граблей поразложено везде! »
Угу, голова должна крутиться на 360 градусов, чтобы по лбу не получить... такие индусы.

Кстати, если требуется именно точечная нотация, то в цитате метод описан:
Код: Выделить весь код
(get-date).tostring('dddd')

-------
scio me nihil scire. Ѫ

Это сообщение посчитали полезным следующие участники:

Отправлено: 14:59, 02-02-2020 | #4


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6705
Благодарности: 1576

Профиль | Отправить PM | Цитировать


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

Есть некий CSV, я его импортирую, и в выборе полей (select) есть такое:
Код: Выделить весь код
@{n='Время доступа';e={$_.TimeAccessed -as [datetime]}},
@{n='День недели';e={($_.TimeAccessed -as [datetime]).ToString('dddd')}},
Можно ли как-то сделать так, чтобы два раза не преобразовывать строку в datetime?
Типа -outvariable, чтобы вызвать его во второй строке, но у меня не получилось его как-то сюда воткнуть.

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Последний раз редактировалось DJ Mogarych, 03-02-2020 в 09:34.


Отправлено: 09:27, 03-02-2020 | #5


Ветеран


Сообщения: 3806
Благодарности: 824

Профиль | Отправить PM | Цитировать


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')}}
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:20, 03-02-2020 | #6


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6705
Благодарности: 1576

Профиль | Отправить PM | Цитировать


Спасибо!

В итоге придумал третий способ. Так как в том селекте ещё вместо логина подставлялось ФИО, то, чтобы не искать в выгрузке из AD ФИО для каждой строки, вынес всё в отдельную конструкцию после импорта CSV:

Код: Выделить весь код
foreach ($user in ($src.'ФИО' |sort -Unique)) {
$fio = (get-aduser $user -Properties displayname -ErrorVariable fioNotFound).displayname
($src.where{$_.'ФИО' -eq $user}).foreach({
    if (!($fioNotFound)) {$_.'ФИО' = $fio}
    $_.'День недели' = ($_.'Время доступа').tostring('dddd')
    })
}

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 15:52, 03-02-2020 | #7


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1235
Благодарности: 518

Профиль | Отправить PM | Цитировать


Цитата DJ Mogarych:
Можно ли как-то сделать так, чтобы два раза не преобразовывать строку в datetime? »
Да, вот Busla уже подсказал как, но в этом нет большого смысла и никакого профита, только усложнится и увеличится код.

Цитата DJ Mogarych:
В итоге придумал третий способ. »
Ну, через цикл можно и в конвейере было добавить свойство...
Код: Выделить весь код
...|select @{n='Время доступа';e={$_.timeaccessed -as [datetime]}}|
%{
    $_|
    add-member -membert noteproperty -name {День недели} -value ($_.'Время доступа').tostring('dddd') -force -pass
}

-------
scio me nihil scire. Ѫ


Последний раз редактировалось YuS_2, 03-02-2020 в 16:52.

Это сообщение посчитали полезным следующие участники:

Отправлено: 16:22, 03-02-2020 | #8


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6705
Благодарности: 1576

Профиль | Отправить PM | Цитировать


Вариант!

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 17:35, 03-02-2020 | #9


Аватара для Charg

Ветеран


Сообщения: 2798
Благодарности: 469

Профиль | Отправить PM | Цитировать


Когда-то давно стояла похожая задача (нужны были месяцы в родительном падеже да ещё и на украинском). Очень долго сидел над этой проблемой и таки нашел красивый, читабельный и скорее всего наиболее правильный способ.
Выдрал из исходников, актуализировал под эту задачу, пользуйтесь

Код: Выделить весь код
$now = Get-Date
$now.DayOfWeek # Tuesday

$cultureRU = [cultureinfo]::CreateSpecificCulture("ru-RU")
$cultureRU.DateTimeFormat.GetDayName($now.DayOfWeek) # Вторник

$cultureJA = [cultureinfo]::CreateSpecificCulture("ja-JA") # japanese
$cultureJA.DateTimeFormat.GetDayName($now.DayOfWeek) # 火曜日

Последний раз редактировалось Charg, 04-02-2020 в 15:47.

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:37, 04-02-2020 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] День недели по-русски

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - Можно ли изменить отображение времени (часов), добавив дату и день недели? truvo Оформление Windows XP 17 13-03-2009 10:10
C/C++ - MSDN по русски aska2013 Программирование и базы данных 10 04-08-2008 01:26
Как определить какой день недели ? dave101ua Вебмастеру 3 24-12-2003 12:33
Win2000AS по-русски Baboon Microsoft Windows NT/2000/2003 6 23-10-2002 07:14
День недели Hard Программирование и базы данных 5 23-09-2002 07:27




 
Переход