2016年9月16日金曜日

PowerShell サーバー役割補足とWrite-XXXXXの罠

この間、サーバー役割の取得について備忘録を書いたが、それの補足。
対象の状態だけを取り出すSCRIPTを作った。

001:$DebugPreference="SilentlyContinue"
002:
003:function WindowsFeatureStat($tName)
004:{
005:   Get-WindowsFeature -name $tName| select InstallState
006:    $wStatStr = Get-WindowsFeature -name $tName| select InstallState
007:
008:    $wStatTbl =$wStatStr -split "="
009:   $RetVal = $wStatTbl[1] -replace "}" ,""
010:    return  $RetVal
011:}
012:$tNameTbl = @(
013:                "PowerShell-V2",
014:                "File-Services",
015:                "Print-Scan-Server"
016:            )
017:
018:$tNameTblMax=$tNameTbl.length
019:for( $ii =0 ;$ii -lt $tNameTblMax ; $ii++ )
020:{
021:   $RetVal =  WindowsFeatureStat $tNameTbl[$ii]
022:   Write-HOST ($tNameTbl[$ii] + "=" +$RetVal)
023:   #Write-HOST "$tNameTbl[$ii] =$RetVal"
024:
025:}

結果はこんな感じ

PowerShell-V2 =  Removed
File-Services =  Installed
Print-Scan-Server =  Available

Debugモードを"Continue"にすると、Get-WindowsFeatureのデバッグメッセージが出てしんどいので、"SilentlyContinue"にした。

PowerShellでは、ダブルクォート内の変数は展開される仕様なので、コメントにしてある 23行目のWrite-Hostではじめは作った。
ところが、配列は、全要素展開される。
しょうがないので、22行目の様にした。

ちなみに、下のような事になる。


$DebugPreference="Continue"
$tNameTbl = @(
                "東京",
                "品川",
                "新横浜",
                "名古屋",
                "京都",
                "大阪"
            )

$tNameTblMax=$tNameTbl.length
for( $ii =0 ;$ii -lt $tNameTblMax ; $ii++ )
{
   Write-Debug ($tNameTbl[$ii] + "にのぞみは停車します。")
   Write-Debug "$tNameTbl[$ii] にのぞみは停車します。"
}

デバッグ: 東京にのぞみは停車します。
デバッグ: 東京 品川 新横浜 名古屋 京都 大阪[0] にのぞみは停車します。
デバッグ: 品川にのぞみは停車します。
デバッグ: 東京 品川 新横浜 名古屋 京都 大阪[1] にのぞみは停車します。
デバッグ: 新横浜にのぞみは停車します。
デバッグ: 東京 品川 新横浜 名古屋 京都 大阪[2] にのぞみは停車します。
デバッグ: 名古屋にのぞみは停車します。
デバッグ: 東京 品川 新横浜 名古屋 京都 大阪[3] にのぞみは停車します。
デバッグ: 京都にのぞみは停車します。
デバッグ: 東京 品川 新横浜 名古屋 京都 大阪[4] にのぞみは停車します。
デバッグ: 大阪にのぞみは停車します。
デバッグ: 東京 品川 新横浜 名古屋 京都 大阪[5] にのぞみは停車します。

本日の河上選手:三国 G3 3日目
  3R 1号艇 1コース進入 ピンで1800円