Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Microsoft 365)
vbaから.ps1ファイルを実行
投稿日時: 22/07/07 12:07:51
投稿者: wgfyhsudji24w

--------
Sub Test()
     
    Dim psFile As String
    Dim execCommand As String
    Dim wsh As Object
    Dim result As Integer
     
    'PowerShellファイルのパスを指定
    psFile = "C:\Users\user\Desktop\Test2\test.ps1"
     
    Set wsh = CreateObject("WScript.Shell")
     
    '実行するコマンドを組み立て
    execCommand = "powershell -NoProfile -ExecutionPolicy Unrestricted " & psFile
     
    'PowerShellを実行
    result = wsh.Run(command:=execCommand, WindowStyle:=0, WaitOnReturn:=True)
     
    If (result = 0) Then
        MsgBox ("Power Shellファイルは正常終了しました。")
    Else
        MsgBox ("Power Shellファイルは異常終了しました。")
    End If
     
    '後片付け
    Set wsh = Nothing
     
End Sub
--------
 
上記のコマンドで.ps1の実行がされません。
また、WaitOnReturn:=Trueだと処理がオーバフローします。
WaitOnReturn:=Falseだとメッセージが正常終了で出ますが、.ps1は実行されていません。
 
.ps1単体での処理は問題なく動作し完了するのですが、VBAから上記コードで実行すると実行されません。
 
どこか悪い記述があるのでしょうか。
 
なぜ実行されないかが分からないため、何か思い当たる所がございましたら、お知らせ頂けないでしょうか。
 
よろしくお願いします。

回答
投稿日時: 22/07/07 13:44:15
投稿者: taitani

コードは、
https://excel-vba.work/2021/07/04/%E3%80%90vba%E3%80%91powershell%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E5%90%8C%E6%9C%9F%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B/
 
のままかと思いますが、、、
実際に、
 
psFile = "C:\Users\user\Desktop\Test2\test.ps1"
 
に、該当のファイルはありますか?
 
Windows + E でエクスプローラーを起動し、
「C:\Users\user\Desktop\Test2\」 を Path に貼り付けて該当のフォルダが表示されないと思われます。

投稿日時: 22/07/07 14:06:21
投稿者: wgfyhsudji24w

コメントありがとうございます。
 
貼って頂きましたurlのコードをパス以外の部分使用させて頂きました!
 
実際指定したパスはお教え頂いた通り、フォルダパスをコピーして指定しておりますが、エラーは出ず、.ps1が実行できない状態です。
 
psFile = "C:\Users\〈ユーザー名〉\Desktop\Test2\test.ps1"

回答
投稿日時: 22/07/07 16:31:36
投稿者: taitani

以下手順で修正してみてください。
1.該当ファイル右クリック>プログラムから開く>メモ帳
2.名前を付けて保存>右下「文字コード」”ANSI”に設定して、上書き
3.VBA 実行
 
確認よろしくお願いいたします。

投稿日時: 22/07/08 15:34:25
投稿者: wgfyhsudji24w

該当vbaを右クリックしメモ帳で開き、保存を行う前に既にASCIIでした。開き直しも試しましたが改善はされません。
ご返答頂き、ありがとうございます。

回答
投稿日時: 22/07/08 15:53:32
投稿者: taitani

うーん、私は再現されませんね。。。
他の方の回答を待ちましょう。

回答
投稿日時: 22/07/08 19:17:15
投稿者: simple

powershell -NoProfile -ExecutionPolicy Unrestricted C:\Users\user\Desktop\Test2\test.ps1
をコマンドプロンプト(ないしPowerShell画面)で実行できるんですか?
まずは問題を切り分ける必要があるのではないですか?

投稿日時: 22/07/11 15:00:52
投稿者: wgfyhsudji24w

 
powershell -NoProfile -ExecutionPolicy Unrestricted C:\Users\user\Desktop\Test2\test.ps1 を打つと、このシステムでは、スクリプトの実行が無効となっているため、ファイルC:\Users\user\Desktop\Test2\test.ps1 を、読み込むことができませんと出力されます。
Get-ExecutionPolicyではUnrestrictedとなっております。
powershell C:\Users\user\Desktop\Test2\test.ps1 で打つと実行できます。
また、test.ps1 を右クリックし、powershellで実行でも実行を行うことができます。
 
ご返答頂き、ありがとうございます。

投稿日時: 22/07/11 15:08:30
投稿者: wgfyhsudji24w

分かりました、以下に変更することで実行できました。
 
'実行するコマンドを組み立て
    execCommand = "powershell -NoProfile -ExecutionPolicy Unrestricted " & psFile
 

 
execCommand = "powershell " & psFile
 
色々とアドバイス頂き、誠にありがとうございました!