[コマンドレット] 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

[Tips] プロンプト文字列を変更するには?

PowerShellのプロンプト文字列は既定で「カレントディレクトリ>」が表示されるようになっています。

プロンプト文字列は、prompt関数が返す文字列で決定されるので、関数を再定義してあげれば文字列を変更することができます。

たとえば、プロンプト文字列を「Hello >」に変更したい場合は

function prompt {"Hello >"}

と入力して実行します。

現在時刻がプロンプト文字として表示されるようにしてあげると、いつコマンドを実行したのかを把握できるようになりますね。

function prompt {(Get-Date).ToString() + ">"}

単に「PS >」と表示したい場合は

function prompt {""}

と入力します。

[IIS] PowerShellでIISを管理する(2) サイトを開始/停止する

前回の記事では、サイトの開始状態を確認する方法について説明しました。

今回は、サイトを開始/停止する方法について紹介します。

.NET FrameworkのServerManagerクラスを利用する方法は、これまでに紹介したとおり、下記手順にて行います。

[void][System.Reflection.Assembly]::LoadFrom("C:\Windows\System32\inetsrv\Microsoft.Web.Administration.dll")
$IIS = New-Object Microsoft.Web.Administration.ServerManager

変数$IISにはSitesというプロパティがあり、IISを開始するStartメソッドとIISを停止するStopメソッドが備わっています。

Sitesプロパティは、コレクションであり、IISで管理しているサイトを参照することができます。

このことを利用して、サイトを開始するには

$IIS.Sites[0].Start()

サイトを停止するには

$IIS.Sites[0].Stop()

のように記述します。

前回の記事で紹介した Sitesプロパティが持つStateメソッドを利用すれば、サイトが停止されている状態なら開始をする、サイトが開始されている状態なら停止する、といったように状態を確認した上で開始と停止を行うことができます。

下記はサイトの状態を確認して、開始するコード例です。

if ( $IIS.Sites[0].State -eq "Stopped" )
{
  $IIS.Sites[0].Start()
}

[IIS] PowerShellでIISを管理する(2) サイトの開始状態を確認する

[ad code=2 align=left]
前回の記事で、.NET Frameworkのアセンブリを使用して、IISを管理する方法を紹介しました。

下記コードで、ServerMangerクラスを使用しIISを操作できることは、前回説明したとおりです。

[void][System.Reflection.Assembly]::LoadFrom("C:\Windows\System32\inetsrv\Microsoft.Web.Administration.dll")
$IIS = New-Object Microsoft.Web.Administration.ServerManager

Foreach ( $site in $IIS.Sites )
{
    $site.Name
}

上記で取得した $siteにはStateというプロパティがあります。

このプロパティには、サイトが開始されているかどうかの情報が格納されており、下記例のようにして開始状態を取得することが可能になります。

[void][System.Reflection.Assembly]::LoadFrom("C:\Windows\System32\inetsrv\Microsoft.Web.Administration.dll")
$IIS = New-Object Microsoft.Web.Administration.ServerManager

Foreach ( $site in $IIS.Sites )
{
    ( $site.Name + ":" + $site.State )
}

サイトの開始状態が確認することができれば、サイトを停止する/サイトを開始するといった操作に利用することができるので、是非活用してみてください。

[WMI] ネットワーク情報を取得する

[ad code=2 align=left]
WMIのWin32_NetworkAdapterConfigurationクラスを使用すると、ネットワーク情報を取得することができます。

Win32_NetworkAdapterConfigurationクラスについては
http://msdn.microsoft.com/en-us/library/windows/desktop/aa394217(v=vs.85).aspx
が参考になるでしょう。

代表的なプロパティは下記の通りです。

Win32_OperatingSystemクラスの代表的なプロパティ
プロパティ 説明
Description 説明(ネットワークアダプタ名)
DefaultIPGateway デフォルトゲートウェイ
DHCPEnabled DHCPが有効かどうか(Trueで有効)
DHCPServer DHCPサーバーのIPアドレス
DNSHostName ホスト名
IPAddress IPアドレス
IPSubnet サブネットマスク
MACAddress MACアドレス
WINSPrimaryServer プライマリWINSサーバーのIPアドレス

下記コマンドを実行すると、ネットワーク情報が表示されます。

Get-WmiObject Win32_NetworkAdapterConfiguration

下記は、DHCPが有効である情報のみを取得する例です。