Форум программистов, компьютерный форум, киберфорум
PowerShell
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
36 / 2 / 1
Регистрация: 31.10.2016
Сообщений: 160
1

Календарь на PowerShell: добавить подсветку текущего дня

24.05.2018, 14:09. Показов 2460. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть старый скрипт, найденный в свое время на двинувшем ныне копыта poshcode.org.
Кликните здесь для просмотра всего текста
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
function Get-Calendar {
  <#
    .NOTES
        Author: greg zakharov
  #>
  param(
    [Parameter(Position=0)]
    [Alias('m')]
    [ValidateRange(1, 12)]
    [Int32]$Month = (Get-Date -u %m),
    
    [Parameter(Position=1)]
    [Alias('y')]
    [ValidateRange(2000, 3000)]
    [Int32]$Year = (Get-Date -u %Y),
    
    [Parameter(Position=2)]
    [Alias('mf')]
    [Switch]$MondayFirst
  )
  
  begin {
    @(
      [Globalization.DateTimeFormatInfo],
      [Globalization.CultureInfo]
    ) | ForEach-Object {
      $keys = ($ta = [PSObject].Assembly.GetType(
        'System.Management.Automation.TypeAccelerators'
      ))::Get.Keys
    }{
      if ($keys -notcontains $_.Name) {
        $ta::Add($_.Name, $_)
      }
    }
    
    [DateTimeFormatInfo]::CurrentInfo.ShortestDayNames |
    ForEach-Object {$arr = @()}{$arr += $_}
    $cal = [CultureInfo]::CurrentCulture.Calendar
    $dow = [Int32]$cal.GetDayOfWeek([String]$Month + '.1.' + [String]$Year)
 
    if ($MondayFirst) {
      $arr = $arr[1..$arr.Length] + $arr[0]
      if (($dow = --$dow) -lt 0) { $dow = 6 }
    }
  }
  process {
    $loc = [DateTimeFormatInfo]::CurrentInfo.MonthNames[$Month - 1] + [Char]32 + $Year
    $loc = "$([Char]32)" * [Math]::Round((20 - $loc.Length) / 2) + $loc
    
    if ($dow -ne 0) { for ($i = 0; $i -lt $dow; $i++) { $arr += "$([Char]32)" * 2} }
    1..$cal.GetDaysInMonth($Year, $Month) | ForEach-Object {
      if ($_.ToString().Length -eq 1) { $arr += "$([Char]32)" + $_ }
      else { $arr += $_ }
    }
  }
  end {
    Write-Host $loc -ForegroundColor Magenta
    for ($i = 0; $i -lt $arr.Length; $i += 6) {
      Write-Host $arr[$i..($i + 6)]
      $i++
    }
    ''
    
    'CultureInfo', 'DateTimeFormatInfo' | ForEach-Object {
      [void]$ta::Remove($_)
    }
  }
}

Собсна, вопрос. Как сделать подсветку текущего дня в календаре?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.05.2018, 14:09
Ответы с готовыми решениями:

Программа вычисления текущего дня вашей жизни, с дня рождения
3. Написать программу вычисления текущего дня вашей жизни, с дня вашего рождения. Дату рождения...

Получить номер дня недели, который был за некоторое число дней до текущего дня
Здравствуйте, требуется помощь с заданием: В ячейке В2 получить дату текущего дня, в ячейке В4 —...

Сделать подсветку текущего выбранного меню
банально, есть обычная менюшка навигации сайта, нужно сделать подсветку текущего выбранного меню...

Нужно реализовать подсветку текущего раздела меню
Есть сайт-каталог. В нем я создал меню (контроллер, модель и частичное представление, которые,...

2
Покинул форум
3672 / 1483 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
31.05.2018, 22:44 2
Лучший ответ Сообщение было отмечено jkadaba как решение

Решение

Мда... не знал что эта поделка будет кому-то интересна. Но не в этом суть. Вопрос скорее в предпочитаемой версии PS. Если речь о второй версии, задачу можно решить так.
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
function Get-Calendar {
  [CmdletBinding()]
  param(
    [Parameter(Position=0)]
    [Alias('m')]
    [ValidateRange(1, 2)]
    [Int32]$Month = ($script:d = Get-Date).Month,
    
    [Parameter(Position=1)]
    [Alias('y')]
    [ValidateRange(1970, 3000)]
    [Int32]$Year = (Get-Date).Year,
    
    [Parameter()]
    [Alias('bm')]
    [Switch]$BlueMonday
  )
  
  begin {
    $day, $dfi = "$($d.Day)".PadLeft(2, [Char]32), (Get-Culture).DateTimeFormat
    $arr, $cal = $dfi.ShortestDayNames, $dfi.Calendar
    
    $dow = [Int32]$cal.GetDayOfWeek("$Month" + '.1.' + "$Year")
    if ($BlueMonday) {
      $arr = $arr[1..$arr.Length] + $arr[0]
      if (($dow = --$dow) -lt 0) { $dow = 0 }
    }
  }
  process {
    $cap = $dfi.MonthNames[$Month - 1] + [Char]32 + $Year
    $cap = "$([Char]32)" * [Math]::Round((20 - $cap.Length) / 2) + $cap
    
    if ($dow -ne 0) { for ($i = 0; $i -lt $dow; $i++) { $arr += "$([Char]32)" * 2 } }
    $arr += 1..$cal.GetDaysInMonth($Year, $Month) | ForEach-Object {
      $_.ToString().PadLeft(2, [Char]32)
    }
  }
  end {
    Write-Host $cap -ForegroundColor Magenta
    for ($i = 0; $i -lt $arr.Length; $i += 6) {
      if (($itm = $arr[$i..($i + 6)]) -contains $day) {
        $cur, $pos = ($raw = $host.UI.RawUI).CursorPosition, $itm
      }
      Write-Host $itm
      $i++
    }
    
    if ($Month -ne $d.Month -or $Year -ne $d.Year) { return }
    $cur.X = ($x = [Array]::IndexOf($pos, $day)) * 2 + $x
    $raw.SetBufferContents($cur, $raw.NewBufferCellArray(
      [String[]]$day, [ConsoleColor]::Black, [ConsoleColor]::White
    ))
  }
}
0
36 / 2 / 1
Регистрация: 31.10.2016
Сообщений: 160
01.06.2018, 18:57  [ТС] 3
Пасиба! Я правда подправил в валидаторе месяцев (1, 12)
0
01.06.2018, 18:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.06.2018, 18:57
Помогаю со студенческими работами здесь

Календарь текущего месяца
Добрый вечер, вот задали сделать календарь текущего месяца. Сделал. Подскажите можно как-то...

Создать представление «календарь текущего месяца»
Добрый вечер!!! Помогите пожалуйста создать представление «календарь текущего месяца»

Отображение текущего дня месяца
К примеру у меня есть таблица. Дата ФИО Данные. 1 ыва ываыв 2 ыва ываsf 3 ...

Запрос с учетом текущего дня
Всем привет, помогите составить запрос, чтоб учитывался текущий день, без времени. Есть такое: ...

циклом For показать на экран календарь текущего месяца
При помощи цикла показать на экран календарь текущего месяца.

Как вывести календарь текущего месяца на экран (в консоли)?
Помогите, ребят. Можете текстом кинуть?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru