[メモ]CTP3とRC版でのISE Object Modelの相違

CTP3とRC版では、ISE Object Modelに相違があるので注意。

CTP3 RC
$psise.CurrentOpenedRunspace $psise.CurrentPowerShellTab
$psise.CurrentOpenedRunspace.ToolsMenu $psise.CurrentPowerShellTab.AddOnsMenu
$psise.CurrentOpenedRunspace.OpenedFiles $psise.CurrentPowerShellTab.Files
$psise.OpenedRunspaces $psise.PowerShellTabs
$psise.CurrentOpenedFile $psise.CurrentFile
$psise.Options.LocalHelp $psise.Options.UseLocalHelp

[PowerShell V2 CTP3] Out-GridViewコマンドレット

PowerShell V2で新しく追加されたコマンドレットにOut-GridViewというコマンドレットがあります。

このコマンドレットは、コマンドの実行結果をコンソールウィンドウではなくグリッドに表示してくれます。

たとえば、サービス一覧を取得するGet-Serviceの結果をグリッドに表示するには

Get-Service | Out-GridView

のようにします。

このグリッドではデータの並べ替えや検索を行うことができます(図1)。


図1


まずは並べ替えについて見てみましょう。

グリッドにはGet-Serviceコマンドレットの取得結果としてStatus, Name, Displayが表示されています。

Status, Name, Displayの各ヘッダーはクリックすることができます。クリックする毎にデータを昇順・降順で並べ替えることが可能です(図2)。


図2


次にデータの検索について見てみましょう。

グリッドの上部に「Search」と書かれたテキストボックスがあります。ここに文字を入力すると、表示されている全データから入力された文字が含まれる行を絞り込みます(図3)。


図3

項目でデータの絞り込みを行いたい場合には、「Search」の脇にある[Query]をクリックします(図4)。

[Add]ボタンをクリックすると (図4)、現在表示されている項目がチェックリストとなって表示されます。


図4

ここで、検索対象とする項目にチェックを付けます。

たとえばNameにチェックを付けます(図5)。

図5

すると

and Name contains <Empty>

と表示されるので、検索条件を入力します。

図6

containsの部分はクリックして変更を行うことができます。選択可能な項目を表1に示します。

contains 指定された文字列を含む
does not contains 指定された文字列を含まない
starts with 指定された文字列で始まる
equals 指定された文字列と等しい
does not equals 指定された文字列と等しくない
ends with 指定された文字列で終わる
is empty 空(empty)である
is not empty 空(empty)ではない

Out-GridViewは簡単に使用できますので、是非試してみてください。

[PowerShell V2 CTP3]PowerShellでF#

今回はPowerShellからF#のコードを使用する方法についてです。

これまでの関連記事は

PowerShellでC#
PowerShellでVB.NET

です。

前回の記事で、Add-Typeコマンドレットの-Languageパラメータでは

言語 パラメータ値
C# CSharp
CSharpVersion3
VB.NET VisualBasic
JScript JScript

を指定可能だとお伝えしました。

PowerShellのヘルプを眺めていたら、F#も扱えるとのことだったので実験をしてみました。

まずは前提条件としてF#がインストールされていなければいけません。(自分の場合はF#の1.9.6.2がインストールされています。)

まずはPowerShellを起動し、下記のように入力してください。

PS>  cd "C:\Program Files\FSharp-1.9.6.2\bin"
PS C:\Program Files\FSharp-1.9.6.2\bin> Add-Type -Path FSharp.Compiler.CodeDom.dll
PS C:\Program Files\FSharp-1.9.6.2\bin> $provider = New-Object Microsoft.FSharp.Compiler.CodeDom.FSharpCodeProvider 

1行目は自分のF#がインストールされている場所にあるbinディレクトリへの移動です。

2行目でF# Code CompilerをPowerShellで使用可能にします。

3行目でF#のプロバイダのインスタンスを$provider変数に代入します。

次にF#のソースコードを変数$sourceに代入します。SayHelloという関数をF#で記述しています。

$fSharpCode=@"
#light

let SayHello () = "Hello PowerShell"
"@ 

次に下記のように入力します。(ヘルプからのパクリ)

$fsharpType = Add-Type -TypeDefinition $fSharpCode -CodeDomProvider $provider -PassThru | where { $_.IsPublic }

これで下準備はOKです。

あとは下記のようにしてSayHello関数を使用します。

PS> $fsharpType::SayHello()
Hello PowerShell

[PowerShell V2 CTP3]PowerShellでVB.NET

前回はPowerShellでC#を使用したので、今回はVB.NETを使用する方法について説明します。

PowerShellでVB.NETのソースコードを展開する場合もAdd-Typeコマンドレットを使用します。

Add-Type コマンドレットには -Languageパラメータという言語を指定するパラメータがあるのですが、"VisualBasic"と指定するとVB.NETを使用できるようになります。

既定値はC#となっているので、前回は指定しなかったというわけです。

使用可能な言語とパラメータに指定する値は下記の通りです(*)。

言語 パラメータ値
C# CSharp
CSharpVersion3
VB.NET VisualBasic
JScript JScript

* C#がなぜ2通りあるのかわかりません。どのように差が出るのか… わかる方いましたら情報いただけると助かります。

Add-Typeコマンドレットの書式は下記の通りとなります。

Add-Type -Language 使用する言語 展開するソースコード

 

以下は、乱数を作成するメソッドをVB.NETで作成し、PowerShellで使用できるようにします。

$source = @"
Public Class MyFunction

    Public Shared Function GetRandom( _
        ByVal MinValue As Integer, _
        ByVal MaxValue As Integer) As Integer
        Dim r As New System.Random()
        Return r.Next(MinValue, MaxValue)
    End Function


    Public Function GetRandom2() As Integer
        Dim r As New System.Random()
        Return r.Next(0, 10)
    End Function
End Class
"@


Add-Type -Language VisualBasic $source

C#のときと同様に Sharedなメソッドは

[クラス名]::メソッド

で使用できます。

今回作成したクラスMyFunctionにあるメソッド GetRandomは

PS> [MyFunction]::GetRandom(-5, 5)

のようにして使用します。この場合は-5~5までの間の乱数を返します。

インスタンスを作成する場合も前回と同様で

変数 = New-Object クラス名

とします。

今回のクラスの場合は

PS> $MyFunc = New-Object MyFunction

としてインスタンスを作成し

PS> $MyFunc.GetRandom2()

として使用します。

[PowerShell V2 CTP3]PowerShellでC#

どうもご無沙汰しております。HIROです。 

今回は Add-Type コマンドレットを使用して、 PowerShellでC#のクラス直接利用する方法を紹介します。

Add-Type コマンドレットは V2 から搭載されるもので、他の言語のソースを直接PowerShell上で展開して使用できるようにします。

今回はC#のクラスをPowerShell上で文字列として定義し、利用してみたいと思います。

まずはヒア文字列を使用して変数 $source にC#のSampleClassを代入します。

PS> $source = @"
public class SampleClass{
    public static string GetHello(string Name)
    {
        return "Hello " + Name;
    }
    public string GetHello2(string Name)
    {
        return "Hello Hello" + Name;
    }
}
"@

このクラスに

このクラスには GetHelloとGetHello2の2つのメソッドがあります。

早速ですが、Add-Typeコマンドレットで、このクラスをPowerShellに登録しましょう。

Add-Type -TypeDefinition $Source

とします。

登録したクラスの利用ですがスタティックメソッドは

[クラス名]::メソッド

の書式で使用することができます。

Get-Helloメソッドは次のようにして使用できます。
(::と入力した後[Tab]キーを押すとタブ補完が働きます。)

PS> [SampleClass]::GetHello("HIRO")
Hello HIRO

次にstaticでないメソッドはインスタンスを作成してからでないと使用できません。

インスタンスの作成は New-Object コマンドレットを使用します。

PS> $sample = New-Object SampleClass

インスタンスを作成したら

PS> $sample.GetHello2("HIRO")
Hello Hello HIRO

のようにして、利用することができます。

Add-Typeコマンドレットで使用できる言語はC#だけではないので、次回は別の言語を取り上げたいと思います。