Windowsのサーバーの管理に、PowerShellが便利らしい。
過去にもくるーずさんのブログでインスパイアされ、いじったことがあったが、今回は折角なのでVBAからの呼び出しをしてみよう、と調べてみた。
どうやらVBAで参照設定をしてPowerShellを呼び出すようなことはできないらしい。ということで、shell関数で呼べばいいや、と試してみた。
もちろん、前提条件がある。
・powershellがインストールされていること
・powershellの実行ファイルにパスが 通っていること
で、
Call Shell("powershell c:\test.ps1" ,vbMinimaizedFocus ) などと書けば動いてくれ、ない。
実はpowershellには安全のため実行モードがある。デフォルトでは外部ファイルを実行することはできない。デジタル署名付きでないとダメとか、モードはいろいろあるが、次のようにしてみた。
Call Shell("powershell Set-ExecutionPolicy RemoteSigned -Force" ,vbMinimaizedFocus ) ' 実行を許可
Call Shell("powershell c:\test.ps1" ,vbMinimaizedFocus ) 'さっきの
Call Shell("powershell Set-ExecutionPolicy Ristricted -Force" ,vbMinimaizedFocus ) ' 再び実行を禁止
さて、実行するが、これもタイミングによっては動かない。なぜなら、Shellで起動するタスクは非同期だから。
こういうときは、同期処理にしてしまうのがいい。
参考:http://www.geocities.co.jp/siliconvalley/4805/vbtips/vbtips053.htm
この中の Shell使用 をカスタマイズし、ひとつひとつの処理が順番に流れていくように変更したらバッチリであった。
そのあたりのソースはまた今度。
過去にもくるーずさんのブログでインスパイアされ、いじったことがあったが、今回は折角なのでVBAからの呼び出しをしてみよう、と調べてみた。
どうやらVBAで参照設定をしてPowerShellを呼び出すようなことはできないらしい。ということで、shell関数で呼べばいいや、と試してみた。
もちろん、前提条件がある。
・powershellがインストールされていること
・powershellの実行ファイルにパスが 通っていること
で、
Call Shell("powershell c:\test.ps1" ,vbMinimaizedFocus ) などと書けば動いてくれ、ない。
実はpowershellには安全のため実行モードがある。デフォルトでは外部ファイルを実行することはできない。デジタル署名付きでないとダメとか、モードはいろいろあるが、次のようにしてみた。
Call Shell("powershell Set-ExecutionPolicy RemoteSigned -Force" ,vbMinimaizedFocus ) ' 実行を許可
Call Shell("powershell c:\test.ps1" ,vbMinimaizedFocus ) 'さっきの
Call Shell("powershell Set-ExecutionPolicy Ristricted -Force" ,vbMinimaizedFocus ) ' 再び実行を禁止
さて、実行するが、これもタイミングによっては動かない。なぜなら、Shellで起動するタスクは非同期だから。
こういうときは、同期処理にしてしまうのがいい。
参考:http://www.geocities.co.jp/siliconvalley/4805/vbtips/vbtips053.htm
この中の Shell使用 をカスタマイズし、ひとつひとつの処理が順番に流れていくように変更したらバッチリであった。
そのあたりのソースはまた今度。