読者です 読者をやめる 読者になる 読者になる

あれあの備忘録

アプリ作成の備忘録、IT関連のニュースなどなどいろいろ

VBAからpowershellコマンドを実行する

powershell VBA

こんにちは! ra-men-tarouです!

突然ですが、VBAってみなさんどう思いますか?
今時でない、書きづらい、メンテしづらい、失われた遺産、死ねばいいと思う、などなど...
いろいろ不満はあると思いますが、現場の規模が大きかったりするとそれだけセキュリティリスクは 上がるもの。規制も厳しくなるものです。
VBAのメリットはおそらくそんな環境下でもだいたいofficeはみんなの 環境に入っているから環境準備に手間取らないとかそんなところでしょう。
みんな大好きエクセルさんのフォーマットは僕も否定はしません。(セル結合とか出てくると厄介ですが...)

さて、今回はVBAからpowershellコマンドを実行する際について紹介したいと思います。

はじめに

前回の記事でpowershellでhtdigestを作成する方法について紹介しました。

anosonote.hatenablog.com

こんなことを言うと反感を買いそうですが、アカウント一覧の整理はエクセルに軍配があがるかと思います。
あくまで、officeくらいしかまともなツールがインストールされていない環境を対象にしています。
現代にはもっと優れたツールがあるかと思いますが、実績や導入率においてエクセル(office)を超えるものはなかなか 出てこないでしょう。(それがいいことか悪いことかはさておき)

さて、アカウント一覧にアカウントとパスワードとそのアカウントに閲覧を許すリポジトリに設定されたレルム の情報を載せて、そこから生成したtxtをもとに前回の記事で紹介したスクリプトでhtdigestを生成したいと思いませんか?

こういったアカウント管理は忙しい現場だと煩雑になりがちですが、そういった現場ってどのような現場が想像できますか?
おそらく殺伐とした光景が目に浮かぶかと思います。
こういった現場ではそれこそなんでもありです。口で言った言わない、責任のなすりつけ、ファイルが勝手に消去・改ざんされている。
火が吹いた現場には常識など通用しないのです。そこは生きるか死ぬかの世界となるでしょう。。。

f:id:ra-men-tarou:20151025171508p:plain

話がそれてしまいましたが、本題に戻りたいと思います。

VBAからpowershellを呼び出す方法

下記がそのソースとなります。
コマンドプロンプトからpowershellのコマンドをRemoteSignedのポリシーで呼び出しています。
ウィンドウは非表示です。

Public Function callPowershell(ByVal cmdStr As String)
'@@powershellコマンドを実行
    Dim Wsh
    Set Wsh = CreateObject("Wscript.shell")

    Wsh.Run "powershell -ExecutionPolicy RemoteSigned -Command " & cmdStr, 0
End Function

ソースコードはqiitaでも紹介しています。

qiita.com