PowerShell и другие скрипты

4.3.2008

Scripting Games: Advanced PowerShell – Event 4

Рубрика: Learn, PowerShell, Scripting, Scripting Games — Xaegr @ 15:50

calendar

На этот раз надо было нарисовать скриптом страничку календаря. Я не стал заморачиваться с определением того с какого дня в системе начинается неделя – просто лень было :) Кстати это не сложно :)

(Get-Culture).DateTimeFormat.FirstDayOfWeek

Ну и вот что получилось:

 

SG4-Calendar.ps1
# Запрашиваем месяц в формате месяц/год и присвиваем её переменной в виде # массива, разделив по "/". То есть первый элемент это месяц, второй - год. $Data = (Read-Host "Enter a month") -split "/" # В переменную $FirstDay помещаем первый день месяца. $FirstDay = Get-Date -Year $Data[1] -Month $Data[0] -Day 1 # С помощью функции DaysInMonth класса DateTime, получаем количество дней в # месяце. $TotalDays = [datetime]::DaysInMonth($Data[1],$Data[0]) # Делаем отступ в одну строчку для красоты :) Write-Host "" # Пишем название месяца и год. Write-Host (Get-Date $FirstDay -Format "MMMM yyyy") # Пишем заголовки столбцов. Write-Host "`nSun`tMon`tTue`tWed`tThu`tFri`tSat" # Делаем отступ знаками табуляции ("`t") в количестве равном дню недели первого # дня месяца. Рисуем число 1. Write-Host ("`t"*([int]($FirstDay.DayOfWeek)) + "1`t") -NoNewline # Если первый день месяца является одновременно последним днём недели - то # переходим на новую строку. if ([int]$FirstDay.DayOfWeek -eq 6) {Write-Host ""} # Для каждого числа от 2 до $TotalDays включительно, где $_ - текущее число... 2..$TotalDays | foreach { # ...выводим на экран текущее число и знак табуляции. Write-Host "$_`t" -NoNewline # Если это был последний день недели, то переходим на новую строку. if ([int](get-date $FirstDay -Day $_).DayOfWeek -eq 6) {Write-Host ""} } # Финальный отступ. "`n" - символ новой строки. Write-Host "`n"

sg4

Эх… Надо было еще названия дней недели выводить местные…

(Get-Culture).DateTimeFormat.AbbreviatedDayNames

Как обычно еще варианты: MoW, Per Østergaard, Scripting Guys, Ed Wilson.

Комментарии (6) »

  1. Приведу свое решение, пусть не самое короткое и оптимальное – зато красивое… :)

    param([String] $DStr)
    $CelebDate = “01/01″,”01/07″,”02/23″,”03/08″,”05/01″,”05/02″,”05/09″,”11/04″,”12/31″
    #$DStr=”March 3, 2008″
    if ($DStr -eq $null -or $DStr -eq “”) {$D=[DateTime]::Now.Date} else {$D=[DateTime]$DStr}
    $Celeb= $CelebDate | % {[DateTime]“$_/$($D.Year)”}
    $Last=$false
    $DD=$D.AddDays(-$D.Day+1)
    $Beg=$DD.AddDays(-[int]$DD.DayOfWeek)
    $End=$DD.AddDays([DateTime]::DaysInMonth($D.Year,$D.Month)-1)
    $S=(”{0:MMMM, yyyy}” -f $D).Length
    $C=21/2-$S/2
    Write-Host (” “*$C+(”{0:MMMM}, ” -f $D)) -ForeGroundColor Blue -NoNewLine
    Write-Host (”{0:yyyy}” -f $D) -ForeGroundColor Yellow
    Write-Host “———————” -ForeGroundColor DarkBlue
    Write-Host ” Su ” -ForeGroundColor Red -NoNewLine
    Write-Host “Mo Tu We Th Fr ” -ForeGroundColor Cyan -NoNewLine
    Write-Host “Sa” -ForeGroundColor DarkRed
    Write-Host “———————” -ForeGroundColor DarkBlue
    $DDD=$Beg
    while(!$Last)
    {
    for($I=0;$I -lt 7;$I++)
    {
    $Str=$DDD.Day.ToString().PadLeft(3,” “)
    $Last=$DDD -ge $End
    if ($DDD.DayOfWeek -eq 0) {$Color=”Red”}
    elseif ($DDD.DayOfWeek -eq 6) {$Color=”DarkRed”}
    else {$Color=”White”}
    if ($DDD -lt $DD -or $DDD -gt $End) {$Color=”Gray”}
    if ($Celeb -contains $DDD) {$Color=”Magenta”}
    if ($DDD -eq $D) {$Color=”Green”}
    Write-Host $Str -ForeGroundColor $Color -NoNewLine
    $DDD=$DDD.AddDays(1)
    }
    “”
    }

    Комментарий от Mc'key — 4.3.2008 @ 22:44

  2. Еще и с изюминкой… Я думаю не все догадались показывать праздники… :)

    Комментарий от Mc'key — 4.3.2008 @ 22:46

  3. Выложи где-нибудь архивом, похоже побилась кодировка вторую строку поправил, начал ругаться на
    $S=(”{0:MMMM, yyyy}” -f $D).Length

    Комментарий от zorion — 5.3.2008 @ 1:53

  4. Усё, расставил сам кавычки где нужно, а почему пятое марта зелёным цветом?

    Комментарий от zorion — 5.3.2008 @ 4:45

  5. Туплю :-D

    Комментарий от zorion — 5.3.2008 @ 5:37

  6. 2 Mc’key: Здорово, давай мне на xaegrпёсикяндекс скрипт в .ps1, я его выложу. А вообще пора бы свой блог делать ;)

    Комментарий от Xaegr — 5.3.2008 @ 5:49


RSS-лента комментариев к этой записи. URI для обратной ссылки

Оставить комментарий

Блог на WordPress.com.