1

前面と背面の色の複数のセットを使用して1行のテキストを出力するPowerShell関数を作成しようとしています。カラーセットを定義するスイッチがあります。

この関数には、スイッチ値を定義する1つのパラメーターと、これを機能させることができる場合は、同じスイッチを使用して次のカラーセットを定義する別のパラメーターがあります。

    function Write-Custom
    {
        param($Say,$ThenSay,$Level,$ExtraLevel)
        switch([array]$level)
        {
            none {$c = 'Black','White'}
            name {$c = 'Cyan','DarkBlue'}
            good {$c = 'White','DarkGreen'}
            note {$c = 'Gray','White'}
            info {$c = 'White','DarkGray'}  
            warn {$c = 'Yellow','Black'}
            fail {$c = 'Black','Red'}
        }
        $s = " $Say"
        $ts = " $ThenSay "
        Write-Host $s -ForegroundColor $c[0] -BackgroundColor $c[1]  -NoNewLine
        Clear-Variable Level
        $Level = $ExtraLevel
        Write-Host $ts -ForegroundColor $c[0] -BackgroundColor $c[1]    
    }

    Write-Custom -Say 'hi there' -Level 'name' -ThenSay 'stranger ' -ExtraLevel 'warn' 

$level変数をクリアして再定義できないようです。出力「こんにちは」はシアン/ダークブルーの前景/背景を持ち、「見知らぬ人」の部分は黄色/黒である必要があるようですが、文字列全体がシアン/ダークブルーになります。

より複雑なスイッチを作成する必要がありますか?

4

1 に答える 1

3

異なるカラーセットを取得するには、毎回スイッチを呼び出す必要があります。これを行う1つの方法は、関数を関数内に配置することです。例:

function Write-Custom
{
    param($Say,$ThenSay,$Level,$ExtraLevel)

    function GetColors([string]$level)
    {
        switch([array]$level)
        {
            none {'Black','White'}
            name {'Cyan','DarkBlue'}
            good {'White','DarkGreen'}
            note {'Gray','White'}
            info {'White','DarkGray'}  
            warn {'Yellow','Black'}
            fail {'Black','Red'}
            default { throw "Unrecognized level $level" }
        }
    }

    $c = GetColors($Level)
    Write-Host " $Say" -ForegroundColor $c[0] -BackgroundColor $c[1]

    $c = GetColors($ExtraLevel)
    Write-Host " $ThenSay " -ForegroundColor $c[0] -BackgroundColor $c[1]
}
于 2013-02-16T00:37:56.897 に答える