2017年2月6日月曜日

HTAからPowerShellの機能を利用するサンプル

フォルダ選択ダイアログを表示したくて、できればデフォルト値も設定できるメソッドを利用したいと思いました。その要求にマッチするものがPowerShellで利用できることが分かったので、思い通りに使えるようにするついでにPowerShellをHTAから利用するためのサンプルを作りました。


PowerShellはコマンドラインからワンライナーを実行させることができます。



これだけで、以下のように少し複雑なことも出来るのですが



コマンドライン経由なので、エスケープに対する配慮が必要で、面倒です。
例えばダブルクォーテーションをを含むスクリプトをPowerShellで扱いたい場合、以下のようになります。(PowerShellには「@(1,1,2,3,5,8,13) -join "`n`r"」という文字列が渡ることになります)



そういう制約から逃れる手段として、「ps1」形式のファイルを作成して実行するという方法がありますが



ps1という拡張子のファイルはデフォルト設定では実行できない設定になっています。



ただし、PowerShellの起動オプションで実行ポリシーを変更したセッションを用意すればps1ファイルも実行できますし、少し長くなりますがファイルを読み込んでテキストをスクリプトとして評価するメソッドに渡して実行させることもできます。


・・・というのを実際に動作確認したソースが以下。


メソッドの名前が重複しているところがあるのは動作確認の名残です。

ソースを見てお気づきになるかもしれませんが、実行ポリシー変更セッションならps1ファイルを実行できるということを知ったのは動作確認の終盤でした。
ファイルを読んでスクリプトとして評価するサンプルも有っても良いと思い、今回の目的に対しては若干冗長な手法でしたが情報として残すことにしました。

1 件のコメント:

  1. Shell.Applicationに「BrowseForFolder」というメソッドがありますが、これではデフォルトが設定できません。。
    http://www.haijin-boys.com/wiki/%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E9%81%B8%E6%8A%9E%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0

    返信削除