本エントリはVisual Basic Advent Calendar 2015 11日目、兼、PowerShell Advent Calendar 2015 11日目の記事になります。
何とかVB.NETのネタがないか無理やり考えたらこんなエントリを思いついてしまいました。
本当に便利になるかは保証できかねますので、その点はあらかじめご了承ください(
PowerShellからVB.NETの機能を利用する
PowerShellからVB.NETの機能を利用するにはAdd-Type
するだけOKです。
Add-Type
はPowerShell 2.0からの機能ですが、今日日PowerShell 1.0の環境は無いでしょうから問題ないと思います。
#Requires -Version 2.0 Add-Type -AssemblyName "Microsoft.VisualBasic"
Add-Type
ではVB.NETのコードを直接埋め込むこともできますが、そこまでしてしまうと今回のエントリの意味がないのでそこは考えないことにします。*1
PowerShellで使うと便利…かもしれないVB.NETの機能
Microsoft.VisualBasic.dll
は主に、
- Microsoft.VisualBasic
- Microsoft.VisualBasic.ApplicationServices
- Microsoft.VisualBasic.Devices
- Microsoft.VisualBasic.FileIO
- Microsoft.VisualBasic.Logging
の名前空間から構成され、それぞれにVBの基本的な機能を提供するためのクラスが存在します。
今回はその中からPowerShellでも使えそうなクラスを探して紹介し、また、実際の使用例も提示します。
Microsoft.VisualBasic.Financialクラス
Microsoft.VisualBasic.Financialクラスの各機能はPowerShellでも使えそうです。
私にはあまり縁がないので良い処理を思いつきませんが、財務系のちょっとした処理をスクリプト化する際に便利そうです。
また、Financial
クラスで提供されるメソッドはExcelにも同等の関数があるのでExcelの機能を移植する際に役立つかもしれません。
実行例は以下の様な感じです。
# 定額法で減価償却費を求める # SLN(取得価額, 残存価額, 耐用年数)で指定 PS C:\> [Microsoft.VisualBasic.Financial]::SLN(150000, 15000, 5) 27000
Microsoft.VisualBasic.Interactionクラス
Microsoft.VisualBasic.InteractionクラスのInputBox
メソッドはPowerShellでも十分使えると思います。
ちょっとした処理でユーザーに入力を促すときや、VBScriptのスクリプトを移植する際に利用する機会がありそうです。
実行例は以下。
# InputBoxを表示してユーザーが入力した結果を$Resultに格納する。 PS C:\> $Result = [Microsoft.VisualBasic.Interaction]::InputBox("何か値を入れてね!", "タイトル", "デフォルト値") PS C:\> $Result デフォルト値
こんな感じでInputBoxが表示されます。
ちなみに、PowerShell標準ではRead-Host
コマンドレットが使えます。
-AsSecureString
パラメーターでパスワード入力なんかもできますので特にGUIであることが求められていないのであればこちらを使う方が良いでしょう。
# Read-Hostコマンドレットが標準で提供されている PS C:\> $Result = Read-Host "何か値を入れてね!" 何か値を入れてね!: テスト値 PS C:\> $Result テスト値
Microsoft.VisualBasic.Stringsクラス
Microsoft.VisualBasic.StringsクラスのStrConv
メソッドもPoewerShellで活用できると思います。
ひらがな-カタカナ変換、全角-半角変換といった文字列変換を手早く行うにはこのメソッドが一番だと思います。*2
実行例は以下。
# ひらがなをカタカナに変換 PS C:\> [Microsoft.VisualBasic.Strings]::StrConv("ひらがな", [Microsoft.VisualBasic.VbStrConv]::Katakana) ヒラガナ # 全角カナを半角カナに変換 PS C:\> [Microsoft.VisualBasic.Strings]::StrConv("全角カナを半角に", [Microsoft.VisualBasic.VbStrConv]::Narrow) 全角カナを半角に
Microsoft.VisualBasic.FileIO.FileSystemクラス
Microsoft.VisualBasic.FileIO.FileSystemクラスの内、UIOption
やRecycleOption
を使うものはPowerShellでも使えそうです。
これらのオプションを活用するとファイル操作中に進捗状況を表示したりファイルをごみ箱に削除することができます。
ユーザーとの対話があるスクリプトで活用できる機会があると思います。
実行例は以下。
# 進捗ダイアログを出してファイルをコピーする [Microsoft.VisualBasic.FileIO.FileSystem]::CopyFile(".\でかいデータ.txt", ".\コピー先.txt", [Microsoft.VisualBasic.FileIO.UIOption]::AllDialogs) # ファイルをごみ箱に削除する [Microsoft.VisualBasic.FileIO.FileSystem]::DeleteFile(".\ごみ.txt", [Microsoft.VisualBasic.FileIO.UIOption]::AllDialogs, [Microsoft.VisualBasic.FileIO.RecycleOption]::SendToRecycleBin)
最後に
とりあえずこんな感じです。
今回提示したいくつかの機能はVB固有のもので他の言語で代替するには面倒が多いと思います。
割と嫌われ者のVBですが使える機能は積極的に使っていくとみんな幸せになると思います。
ちなみに、これらの機能はPowerShellに限らず.NET系の言語であればどの言語でも使えますので、たとえばC#から使うのもアリだと思います。