PowerShellでクリスマスツリー!

この記事はPowerShell Advent Calendar 2013の20日目の記事です!


▼ PSAC2013.ps1

function Twinkle-Star {
    [CmdletBinding(DefaultParameterSetName="p1")]
    param(
        [Parameter(Position=1,Mandatory=$true,ParameterSetName="p1")]
        [string]$Aa,
        [Parameter(Position=2,ParameterSetName="p1")]
        [int]$Interval=1,
        [Parameter(Position=3,ParameterSetName="p1")]
        [int]$Twinkle=10,
        [Parameter()]
        [Alias("V")]
        [char]$Value="★"
    )
    begin {
        if ($Host.Name -ne 'ConsoleHost') {
            Write-Host -ForegroundColor Red "$($Host.Name) では実行できません><"

            $path = &{ $myInvocation.ScriptName}
            $param = "-Aa `"`"`"$Aa`"`"`" -Interval $Interval -Twinkle $Twinkle -Value $Value"
            Start-Process powershell -ArgumentList "Import-Module $path; Twinkle-Star $param; Read-Host"        
            exit -1
        }
        Clear-Host
    }
    process {
     #▼ $Value(★)の位置を取得
        $Aa.ToCharArray() | 
            ForEach-Object -Begin {$obj = @()} -Process {
                Write-Host -NoNewline $_
                if ($_ -eq $Value) { 
                    $x = $Host.UI.RawUI.CursorPosition.X-2
                    $y = $Host.UI.RawUI.CursorPosition.Y
                    $obj += [pscustomobject]@{x=$x; y=$y}    
                } elseif ($_ -eq "☆") {
                    Write-Host -NoNewline `b`b$_ -ForegroundColor Yellow #☆の色
                }
        }

        #▼ カーソルの移動
        function Move-Cursor([int]$x, [int]$y) {
            $coordinate = New-Object System.Management.Automation.Host.Coordinates($x, $y)
            $Host.UI.RawUI.CursorPosition = $coordinate
        }

        #▼ $Value(★)の色を変更
        function Change-Color() {
            $obj | 
                ForEach-Object {
                    $random = $(Get-Random -Minimum 0 -Maximum 15)
                    $color = [ConsoleColor]::GetNames([System.ConsoleColor])[$random]
                    Move-Cursor $_.x $_.y
                    Write-Host -NoNewline $Value -ForegroundColor $color
                }

            Move-Cursor 0 19
            Start-Sleep $interval
        }

        #▼ $Twinkle(10)回キラキラ><
        1..$Twinkle | ForEach-Object { Change-Color }    
    }
    end {
        Write-Host "`t`tMerry Chirstmas!!`t`t`n" -ForegroundColor Red -BackgroundColor DarkGreen
        Start-Sleep 5
    }
}

<#
#▼ コマンド構文
Twinkle-Star [-Aa]  [[-Interval]  [-Twinkle] ] [-Value ]

#▼ パラメータ
-Aa:アスキーアート。
-Interval:キラキラの間隔秒数。デフォルト1秒。
-Twinkle:キラキラする回数。デフォルト10回。
-Value:キラキラする文字。デフォルト★。
#>

▼ powershell.exe

Import-Module .\PSAC2013.ps1 -Force

$christmasTree = @"
`t
        +  ・  +
          ゚。:。゚  +
      *  ・‥☆‥・
        + 。゚▲゚。  *
       +  ▲▲
          ▲▲★ +
        * ▲★彡▲  *
      十  ★彡▲▲★
        彡▲▲★∴▲ 十
        ▲▲★∴▲▲★
       ▲★∴▲▲★彡▲
       ★∴▲▲★彡▲▲★
      ▲▲▲★彡▲▲★∴▲
          ┃┃
         ■■■■
          ■■■
          ■■■
`t
"@
Twinkle-Star -Aa $christmasTree #-Interval 1 -Twinkle 10 -Value ★

▼ 参考サイト様

「もう~いくつ寝ると~♪クリスマス~♪」ですね!
クリスマスは、朝から晩まで大好きなPowerShellタンとイチャイチャしたいと思います><
それはもう1日中イチャイチャです><とっても楽しみです><><><。
ではでは皆様、よいクリスマスを!

ご清覧ありがとうございました!!

[PowerShell V3] ヘルプを別ウィンドウで表示する

PowerShell V3のヘルプは別ウィンドウで表示させることが可能です。

たとえばGet-Dateのヘルプを別ウィンドウで表示するには

help Get-Date -ShowWindow

のように-ShowWindowパラメータを使用します。

ヘルプを別ウィンドウで表示する

 

これならヘルプを見ながらコマンドレット操作が可能で便利ですね!

[PowerShell V3] 役割と機能の一覧

Windows Server 2012の「役割と機能の一覧」に表示される内容はコマンドレットで取得することができます。

まずは、GUIの「役割と機能の一覧」画面は下図の通り。

役割と機能の一覧

コマンドレットは Get-WindowsFeatureを使用します。

Get-WindowsFeature

Get-WindowsFeatureを実行すると、「役割と機能の一覧」で追加・削除することができる機能の一覧が表示され、インストール済みのものにはチェックがついていることがわかります。

主なパラメータとして下記があります。

パラメータ 説明
-name 情報を表示する役割、役割サービス、または機能のコマンド識別子を指定
-logpath ログ ファイルの名前と場所として、既定の windir%\logs\ServerManager.log 以外の名前と場所を指定

下記は役割の名称に「AD」が含まれるものを列挙する例です。Nameパラメータに「AD*」を指定して取得しています。

Get-WindowsFeatureの使用例

[Windows Server 2012] PowerShellを起動する

Windows Server 2012 の提供が開始されたので、早速インストールし PowerShelを起動してみました。

検証は Windows Server 2012 Data Centerで行っております。

まず、 Windows Server 2012が起動すると、「サーバーマネージャー」が表示されます。

タスクバー上にはすでに PowerShell のアイコンがありインストール済みであることがわかります。

タスクバー上から PowerShell を起動することもできますが、サーバーマネージャーからも起動することが可能です。

サーバーマネージャーでは、メニューの[ツール]から起動することができます。

このほか、スタート画面から PowerShell を起動することが可能です。

また、スタート画面にある「管理ツール」を起動すると、様々なアプリケーションのショートカットが表示され、その中からPowerShellを起動することも可能です。

 

 

[コマンドレット] ConvertTo-Json

前回は ConvertFrom-Json コマンドレットを使用して、JSONデータを読み取る方法について紹介しました。

今回は ConvertTo-Json コマンドレットを使用して、JSONデータを作成する例を見ていきたいと思います。

まずは、キーと値からなる文字列からJSONデータを作成して忌みます。

$json = @{Name="HIRO"; Age=40; Birthday="1972/6/19"}
$json | ConvertTo-Json

実行結果は下図のようになり、JSONデータが作成されることがわかります。

今度は、JSONファイルを作成してみます。

先ほどのコマンドの後に、ファイルを出力するコマンドを追加するだけです。

このとき、ConvertTo-Jsonコマンドレットにパラメータ compress を付加すると、改行を含まない形でデータを作成することが可能です。

$json | ConvertTo-Json -Compress | tee C:\Work\example.Json