PowerShell Memo

このサイトはPowerShell(MSH/Monad)奮闘記です

管理人「newpops吉岡洋」が
「PowerShell(旧名:MSH/Monad)」の研究結果を日々綴っていきます。

【お知らせ】
この日記からPowerShellのTipsを抽出し「PowerShell FAQ」として整理しました。


2006-09-27

[][]PowerShell from IronPython Part 2

PowerShell from IronPython - PowerShell Memoの続き。

今回はサンプルの使い方です。

STEP1:サンプルのダウンロード

上記ファイルを任意のディレクトリ解凍します。

「IPPowerShell」がサンプルを含んだディレクトリです。今回は「C:\IPPowerShell」に解凍しました。

STEP2:powershell.pyを読み込む

コマンドプロンプトで「C:\IPPowerShell」をオープン。以下を実行して「powershell.py」を読み込みます。

C:\IPPowerShell>ipy.exe -i powershell.py
Run 'dir(shell)' to get a list of available PowerShell commands!
In general, IronPython PowerShell commands are accessed using the form:
    shell.get_process("cmd").select(First=2)

ここまでで、PowerShellを利用する準備は整いました。

STEP3:PowerShellを利用する

Cmdletを実行するには「shell.」に続けてCmdletを記述します。

ただし、NounとVerbの間の「-(ハイフン)」は「_(アンダーバー)」に置き換える必要があります。


以下にサンプルを示します。

STEP4-1:Cmdletの利用

「Get-Process」を実行する
>>> shell.get_process()
Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
    100       5     1280       3640    35     0.03   2836 alg
    208      11    15304       2348   106     5.59   3088 B2
    773      47    27912      42560   154    39.33   1580 CCAPP
(中略)

STEP4-2:Cmdlet(引数付き)の利用

「Get-Process ipy」を実行する

引数を渡す場合は、以下のよう記述します。

>>> shell.get_process("ipy")
Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
    422      14    40016      40152   183     4.42    748 ipy

STEP4-3:Cmdlet(キーワードパラメータ付き)の利用

「Get-Date -DisplayHint date」を実行する

キーワードパラメータを渡す場合は、以下のよう記述します。

>>> shell.get_date(DisplayHint='date')
2006年9月27日

STEP4-4:パイプの利用

「Get-Process ipy | ConvertTo-Html」を実行する

パイプを利用する場合は「.(ドット)」で区切ってコマンドを続けて記述します。

>>> shell.get_process("ipy").convertto_html()
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"  "http://www.w3.org/TR/html4/s
(中略)

STEP4-5:配列の要素へのアクセス

「Get-Process ipy | Select-Object -First 1 -Property WS」を実行する

「ipy」プロセスを取得。パイプを通して1つ目のオブジェクトの「WS」プロパティを表示するコマンドです。

IronPython上で実行するには、「[](配列)」を利用します。

>>> shell.get_process("ipy")[0].WS
41107456

2006-09-18

[][]PowerShell from IronPython

IronPythonからPowerShellを利用する

IronPythonからPowerShellを利用するサンプルが公開されました。


特徴

概要
  • IronPythonからPowerShellのCmdlet、Aliasを利用することが可能
  • サンプルに含まれるpowershell.pyが、PowerShellをIronPythonから呼び出せるようにラップするライブラリ
  • IronPython上で「from powershell import *」と記述すれば利用可能になる
  • PowerShellパイプ処理も利用可能
利用可能な機能
  • Cmdlet
    • Get-Commandで表示されるもののみ利用可能
  • Alias
    • 内部定義されるもののみ利用可能(profile.ps1で定義したものは利用不可)

利用方法はこちら。

PowerShell from IronPython Part 2 - PowerShell Memo

2006-06-26

[][]Use of IronPython in PowerShell

PowerShellからIronPythonを利用する

Use of IronPython in Monad - PowerShell Memoで、MSHからIronPythonを利用するサンプルを紹介しましたが、

当時はIronPythonのバージョンは「1.0 Beta1」でした。

現時点での最新版は「1.0 Beta 7」です。

http://www.gotdotnet.com/workspaces/workspace.aspx?id=ad7acff7-ab1e-4bcb-99c0-57ac5a3a9742

「Windows PowerShell RC1」+「IronPython 1.0 Beta 7」で試してみる

「Windows PowerShell RC1」+「IronPython 1.0 Beta 7」の組み合わせでは、

上記サンプルはエラーが発生し正しく動作しません。

サンプルを実行するとエラーが発生

Exception calling "Execute" with "1" argument(s): "sys.LoadAssemblyByName has b

een deprecated and will be removed in the next release. Please use clr.AddRefer

ence* methods instead."

IronPythonの仕様変更により、「sys.LoadAssemblyByName」メソッドは、次期リリースで削除される予定のようです。

代わりに、「clr.AddReference」メソッドを利用すればよいのですね。


以下のように書き直すと動作します。

[void] [Reflection.Assembly]::LoadFrom("C:\IronPython\IronPython.dll")
$pe = new-object ironpython.hosting.pythonengine

$code=@"
import clr
clr.AddReference("System.Windows.Forms")
from System.Windows.Forms import *
f = Form(Text="IronPython Sample")
f.ShowDialog()
"@

$pe.Execute($code)

2006-01-10

[][]Use of IronPython in Monad, Part 2

We can call IronPython in Monad.

See MSH Memo - Use of IronPython in Monad

Additionally, we can use the function of IronPython script in Monad.

Use the function of IronPython script in Monad

1.

Load IronPython.dll.

Create ScriptEngine Object of IronPython by new-object Cmdlet.

ex)

[void] [Reflection.Assembly]::LoadFrom("C:\IronPython\IronPython.dll")

$pe = new-object ironpython.hosting.pythonengine

2.

Call Execute method, Arg is the string that contains functions.

The following example is that $code contains "printStr" function.

ex)

$code=@"

def printStr(str):

print str

"@

$pe.Execute($code)

3.

Get the reference of function by GetVariable method.

ex)

$pPrintStr = $pe.GetVariable("printStr")

4.

Exectute function by Call method.

ex)

$pPrintStr.Call("Hello Monad!")

Sample Script
[void] [Reflection.Assembly]::LoadFrom("C:\IronPython\IronPython.dll")
$pe = new-object ironpython.hosting.pythonengine

$code=@"
def add(x, y):
    return x + y
"@

$pe.Execute($code)

$pAdd = $pe.GetVariable("add")

$pAdd.Call(5,20)
Sample Result
MSH C:\> [void] [Reflection.Assembly]::LoadFrom("C:\IronPython\IronPython.dll")
MSH C:\>
MSH C:\> $pe = new-object ironpython.hosting.pythonengine
MSH C:\>
MSH C:\> $code=@"
>> def add(x, y):
>>     return x + y
>> "@
>>
MSH C:\> $pe.Execute($code)
MSH C:\>
MSH C:\> $pAdd = $pe.GetVariable("add")
MSH C:\>
MSH C:\> $pAdd.Call(5,20)
25

2006-01-08

[][]Use of IronPython in Monad

STEP1 Install of IronPython 1.0 Beta1

Last month IronPython 1.0 Beta was released.

http://www.gotdotnet.com/workspaces/workspace.aspx?id=ad7acff7-ab1e-4bcb-99c0-57ac5a3a9742


The install of IronPython is very easy.

1. Download IronPython 1.0 Beta1 from Here

2. Files created by decompression of [IronPython-1.0-Beta1.zip] put your favorite folder.

STEP2 Call IronPython in Monad

1.

Load IronPython.dll.

ex)

[void][Reflection.Assembly]::LoadFrom("C:\IronPython\IronPython.dll")

2.

Create ScriptEngine Object of IronPython by new-object Cmdlet.

ex)

$pe = new-object ironpython.hosting.pythonengine

3.

Call Execute method.

ex)

$code="print 'Hello IronPython'"

$pe.Execute($code)

IronPython Sample

GUI Sample
[void] [Reflection.Assembly]::LoadFrom("C:\IronPython\IronPython.dll")
$pe = new-object ironpython.hosting.pythonengine

$code=@"
import clr
clr.AddReference("System.Windows.Forms")
from System.Windows.Forms import *
f = Form(Text="IronPython Sample")
f.ShowDialog()
"@

$pe.Execute($code)
Sample Result