HIRO's.NET Blog

PowerShellが好き

目次

Blog 利用状況

ニュース

あわせて読みたい

書庫

日記カテゴリ

リンク

2008年3月4日 #

サービスのステータスごとに色をつける(PowerShell Tips)

Get-Serviceコマンドレットは、ローカル コンピュータ上のサービスを取得するコマンドレットです。
このコマンドレットの実行結果には、サービスのステータス情報("Stopped"か"Running")が含まれています。

"Stopeed"だったら文字色を赤で、"Running"だったらシアンでサービス名を表示する関数を作ってみました。

実行結果は下図のとおりです。

Color-SrvStatus

#===============================================================================
# Color-SrvStatus: サービスのステータス別に色を付ける
#
# 使用例
#   PS > Color-SrvStatus
#
# copyright HIRO's.NET(http://hiro.wankuma.com/)
#===============================================================================
function global:Color-SrvStatus
{
  #サービスを取得
  $srv = get-service
  #カウンタの初期化
  $iCnt = 0
  
  for ( $iCnt = 0; $iCnt -lt $srv.length; $iCnt++ )
  {
      #各サービスのステータスを判断して色を付ける
      if ($srv[$iCnt].status -eq "running") 
        {write-host $srv[$iCnt].Name -foregroundcolor "cyan"}
      elseif ($srv[$iCnt].status -eq "stopped") 
        {write-host $srv[$iCnt].Name -foregroundcolor "red"}
      else                                      
        {write-host $srv[$iCnt].Name}
      $iCnt++
  }
}

 

ポイント
といっても、なんのことはありません。
取得結果のStatusを判断して、色を付けています。
この関数はサービス名しか表示しないので、用途に合わせて表示される情報を増やすことをおすすめします。


posted @ 14:31 | Feedback (0)

Encodingを指定してXMLファイルを作成する(PowerShell Tips)

文字列からXmlDocumentを作成する(PowerShell Tips)

での Xmlファイルの作成はEncodingの指定をせずに保存しました。

今回はEncodingを指定して、保存する方法を紹介します。

 

まずは保存先ファイル名とEncodingを変数に代入します。

PS C:\Work> $SaveFile = "C:\Work\UTF8.xml"
PS C:\Work> $Encoding = [System.Text.Encoding]::UTF8

次に、前回同様ヒア文字列を使用してXML文字列を作成

PS C:\Work> $strXml = @"
>> <?xml version='1.0' encoding='utf-8' ?>
>> <personal_data>
>> <zip_code>012-3456</zip_code>
>> <address>1-1,Tokyo,Japan</address>
>> <name>HIRO</name>
>> </personal_data>
>> "@
>>

で、これをXmlDocument型にキャストしておきます。

PS C:\Work> $xmlDoc = [xml]$strXml

で、前回はここで$XmlDoc.Save()メソッドを実行したのですが、ここでXmlTextWriterを作成します。

こうすることでEncodingを指定できます。

PS C:\Work> $XmlWriter = New-Object System.Xml.XmlTextWriter($SaveFile, $Encoding)

で、保存して、XmlTextWriterを閉じます。

PS C:\Work> $xmlDoc.Save($xmlWriter)
PS C:\Work> $xmlWriter.Close()

実際にファイルを開いてみると、utf-8で有ることが確認できます。(下図はサクラエディタで開いたものです)

utf8 

 

最後に、上記を応用して、Shift_Jisで保存してみたいと思います。

PS C:\Work> $SaveFile = " ps c:\Work\Shift_Jis.xml? c:\Work>$encoding = [System.Text.Encoding]::GetEncoding("Shift_Jis")
PS C:\Work> $xmlDoc = [xml]$strXml
PS C:\Work> $XmlWriter = New-Object System.Xml.XmlTextWriter($SaveFile, $Encoding)
PS C:\Work> $xmlDoc.Save($xmlWriter)
PS C:\Work> $xmlWriter.Close()

作成したXmlファイルはShift_Jisであることが確認できます。

shift_jis

注意事項が2点あります。

1つ目はEncodingです。

UTF8のときと違って、Shift_Jistは

$encoding = [System.Text.Encoding]::Shift_Jis

とすることができません。

GetEncodingメソッドを使用して

[System.Text.Encoding]::GetEncoding("Shift_Jis")

とする必要があります。

2つ目は、Xmlファイルが改行されずに1行になってしまっていることです。

前回の方法で保存したものは改行および自動インデントがされました)

これについては、次回以降で説明したいと思います。


posted @ 9:47 | Feedback (1)