しばたテックブログ

気分で書いている技術ブログです。

PowerShellで使うと便利…かもしれないVB.NETの機能

本エントリはVisual Basic Advent Calendar 2015 11日目、兼、PowerShell Advent Calendar 2015 11日目の記事になります。

qiita.com

atnd.org

何とか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が表示されます。

f:id:stknohg:20151203190335p:plain

ちなみに、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クラスの内、UIOptionRecycleOptionを使うものは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#から使うのもアリだと思います。

*1:そこまでするならPowerShellなんか使わず始めからVB.NETで書けとも思いますし...

*2:性能面はあまり考えていません...