PowerShell(.NET)

PowerShellから.NET FrameWorkを使ってみます。

スタティックメソッドの呼び出し方法は、
[クラス]::メソッド()
です。

PS C:\Users\takk> [System.Console]::WriteLine("HELLO")
HELLO
PS C:\Users\takk>

PowerShellのWrite-OutPutだと改行されてしまうので、改行したくない場合は、.NETを使えば良いですね。

PS C:\Users\takk> [System.Console]::Write("HELLO1\nHELLO2")
HELLO1\nHELLO2PS C:\Users\takk>

変数に格納して実行することもできます。

PS C:\Users\takk> $con=[System.Console]
PS C:\Users\takk> $con::WriteLine("HELLO")
HELLO
PS C:\Users\takk>
PS C:\Users\takk> $math=[Math]
PS C:\Users\takk> $math::Sqrt(121)
11
PS C:\Users\takk>

インスタンスメソッドの呼び出しは、::の代わりに.(ドット)を使います。
RandomのNextメソッド。

PS C:\Users\takk> $r=New-Object System.Random
PS C:\Users\takk> $r.Next(10)
1
PS C:\Users\takk> $r.Next(10)
4
PS C:\Users\takk> $r.Next(10)
1
PS C:\Users\takk>

ArrayListのAddメソッド。

PS C:\Users\takk> $list=New-Object System.Collections.ArrayList
PS C:\Users\takk> $list.Add(10)
0
PS C:\Users\takk> $list.Add(20)
1
PS C:\Users\takk> $list.Add(30)
2
PS C:\Users\takk> $list
10
20
30
PS C:\Users\takk>

別アセンブリで、デフォルトで使えないクラスは、ロードします。

PS C:\Users\takk> [Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")

GAC    Version        Location
---    -------        --------
True   v4.0.30319     C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Windows.Forms\v4.0_4.0.0.0__b77a5c561934e089...


PS C:\Users\takk> $f=New-Object System.Windows.Forms.Form
PS C:\Users\takk> $f.ShowDialog()

Add-Typeの場合。

PS C:\Users\takk> $f=new-object System.Windows.Forms.Form
new-object : 型 [System.Windows.Forms.Form] が見つかりません。この型を含むアセンブリが読み込まれていることを確認してく
ださい。
発生場所 行:1 文字:4
+ $f=new-object System.Windows.Forms.Form
+    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidType: (:) [New-Object], PSArgumentException
    + FullyQualifiedErrorId : TypeNotFound,Microsoft.PowerShell.Commands.NewObjectCommand

PS C:\Users\takk> Add-Type -AssemblyName System.Windows.Forms
PS C:\Users\takk> $f=new-object System.Windows.Forms.Form
PS C:\Users\takk>

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA