PowerShell、お前もかい?

以前作ったプログラムで、GUIが必要なので基本はVB6で作り、頻繁に変更が発生しそうな計算だけMSScriptControl.ScriptControlクラスを使った物を作りました。あらかじめAddCodeメソッドで外部のテキストファイルに書かれているVBScriptの関数を登録、計算時にRunメソッドで関数を呼ぶというものです。計算部分だけがテキストファイルで分離されているので、そこの差し替えだけでその場で対応が取れたりと柔軟に機能。自分としては結構うまくいった解決でした。

今回基本部分がVB.NETに変わったので、.NET Frameworkを利用できるPowerShellを利用しようかと、昨日から下調べを始めました。

VB.NETからはSystem.Management.Automation空間のクラスを使うらしい。事前にPowerShellをインストールし、Vista対応のWindows SDKをインストールするか、C#と諸々Link を参考にSystem.Management.Automation.dllを入手して、プロジェクトに参照登録する必要があります。

以下、こうすれば動くのではないかという想像。まだ試してません。
  1. RunspaceConfigurationインスタンスに関数を登録
  2. そのインスタンスを引数にRunspaceFactory.CreateRunspaceでRunspaceインスタンスを生成
  3. Runspace.Open
  4. Runspace.CreatePipelineで関数を呼ぶ
  5. Runspace.ClosePipeline

さてPowerShellの使い方を覚えようと、XMLファイルを読むのを試しに作ってみる。以下のVB.NETのコードは動くことを確認。

Public Class Form1
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim xmldoc As New System.Xml.XmlDocument
        xmldoc.Load("sample.xml")
        Dim rootelement As System.Xml.XmlElement = xmldoc.DocumentElement
        TextBox1.Text = rootelement.Name
    End Sub
End Class
んで、これと同じことをPowerShellでやろうとコマンドを打ち込む。
PS C:¥XML> $xmldoc = new-object System.Xml.XmlDocument
PS C:¥XML> $xmldoc.Load("sample.xml")
PS C:¥XML> $rootelement = $xmldoc.DocumentElement
PS C:¥XML> $rootelement.Name
PS C:¥XML> $rootelement.GetType()
null 値の式ではメソッドを呼び出せません。
発生場所 行:1 文字:21
+ $rootelement.GetName( <<<< )

あら? $rootelement.Nameは何も表示しないし、GetType()を呼ぶと$rootelementはnullだという。う〜ん使い方が悪いのかXMLが読めていないのか、よくわからない。

以前JMP Version4Link をCOM Automationで使おうとしたとき、あるメソッドがVB6からは難なくアクセスできるのに、VBScriptからだとエラーになるという問題がありました(今は修正されていますし、該当バージョンでも回避法があります)。これはVB6とVBScriptが似ていても中身は別物ということに起因するらしいのですが、なんとなくそのことが頭を離れない。PowerShellもそんなことやってたりするの?

[参考]

[2007/9/6 追記] どうもPowerShellからアクセスできるメソッドに制限があるらしい・・・

— posted by mu at 05:29 pm   commentComment [0]  pingTrackBack [0]

T: Y: ALL: Online:
ThemeSwitch
  • Basic
Created in 0.0104 sec.
prev
2007.9
next
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30