none
VBAからPowerShellコマンドを実行

    質問

  • VBAにて下記コードを実行してもコマンドが通りません。
    VBAのコード自体はエラーなく正常終了します。

    また、「Debug.Print cmdStr」にて出力された文字列をそのままPowerShellエディタから実行すると問題なくコマンドは実行できます。
    そもそも下記コマンドはVBAから実行可能なのでしょうか?

    ■コード
    cmdStr = "powershell -ExecutionPolicy RemoteSigned -Command {" & "[System.IO.File]::ReadAllText(""F:\VBA\02\aaa.txt"") >> ""F:\VBA\02\bbb.txt""" & "}"
    Debug.Print cmdStr
    Dim Wsh
    Set Wsh = CreateObject("Wscript.shell")
    Wsh.Run cmdStr, 0

    ■参照
    http://anosonote.hatenablog.com/entry/2015/10/25/171619

    2017年2月14日 14:32

回答

  • Wscript.ShellのRunはcmd.exeのコマンドラインでの引数解釈されるのでPowerShellの引数解釈とちょっと違ってます。

    cmdStr = "powershell -ExecutionPolicy RemoteSigned -Command ""[System.IO.File]::ReadAllText('F:\VBA\02\aaa.txt') >> 'F:\VBA\02\bbb.txt'"""
    PowerShellからの場合には「--%」をつけてcmdと同じ挙動にするとエラー内容が判り易いと思います。


    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    2017年2月14日 15:19

すべての返信

  • Wscript.ShellのRunはcmd.exeのコマンドラインでの引数解釈されるのでPowerShellの引数解釈とちょっと違ってます。

    cmdStr = "powershell -ExecutionPolicy RemoteSigned -Command ""[System.IO.File]::ReadAllText('F:\VBA\02\aaa.txt') >> 'F:\VBA\02\bbb.txt'"""
    PowerShellからの場合には「--%」をつけてcmdと同じ挙動にするとエラー内容が判り易いと思います。


    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    2017年2月14日 15:19
  • ありがとうございます!

    コマンドプロンプトでコマンドが通るか確認するべきでした。

    大変助かりました!

    2017年2月14日 16:27