VBAでLocal\Temp\11\radD8E1C.tmp.ps1が生成されて、PowerShellで指定複数ファイルをzip形式で圧縮してます。
エディタでデバッグすると、zipファイルは作成されますが、Callの後zipファイルが消えるのはなぜでしょうか?
※ps1をPowerShellで手動実行したら、問題なくzipファイルは生成されました。
ps1
1Compress-Archive -Path "ファイル1のフルパス","ファイル2のフルパス","ファイル3のフルパス","ファイル4のフルパス","ファイル5のフルパス","ファイル6のフルパス","ファイル7のフルパス","ファイル8のフルパス","ファイル9のフルパス" -DestinationPath "\保存先\aaa.zip" -Force
VBA
1Private Sub ExecPowerShell(strCommand As String) 2 3 Dim strTemp As String 4 Dim strFile As String 5 Dim strBuf As String 6 7 With CreateObject("Scripting.FileSystemObject") 8 9 strTemp = .GetSpecialFolder(2).Path 10 strFile = .BuildPath(strTemp, .GetTempName & ".ps1") 11 12 'テキスト出力 13 With .CreateTextFile(strFile, True) 14 .Write strCommand 15 .Close 16 End With 17 18 strBuf = "powershell" 19 strBuf = strBuf & " -ExecutionPolicy" 20 strBuf = strBuf & " RemoteSigned " 21 strBuf = strBuf & " -File" 22 strBuf = strBuf & " """ & strFile & """" 23 24 Call CreateObject("WScript.Shell").Run(strBuf, 0, True) 25 'With CreateObject("WScript.Shell") 26 'Call .Run(strBuf, 0, True) 27 'End With 28 29 .DeleteFile strFile 30 31 End With 32 33End Sub
呼び出し元でzipを削除するコードを書いてませんか?
1行ずつデバッグしていて、zipを削除するようなコードはなかったです。
ps1をTempフォルダ配下に作成し、実行すると消えるものでしょうか?
質問は「zipファイル」が消えるというものですが、「ps1ファイル」が消えるのがなぜか、という質問の間違いでしょうか。
提示された情報だけを実行した場合、zipファイルが作成されps1ファイルが削除されます。テストしましたが問題ありませんでした。(zipは残った)
すみません、zipファイルが消えます。VBAをデバッグしててCallでパワーシェルが起動され、パワーシェル実行完了したら生成されたzipファイルが消えました。ps1ファイルは、最後に削除の処理があるから、消えるのは問題ないです。なぜ自分だけそうなるのかが不思議ですね。
質問は記載の通りで間違いないんですね。。。
.DeleteFile strFileでブレイクポイントを設定していただいてもzipが消えるということですよね。
(Callが終わった直後にzipが消える)
後は保存先を変更したり、ファイルの数を減らしてみたり、ExecPowerShellプロシージャ単体で動かしてみたり、でしょうか。色々条件を変えないと分からなさそうです。
環境も書いておいてくださいね。
元のQiitaでは下記環境となってましたので。
PowerShell 5.0
.Net Framework 4.5 以降
Windows 10 なら大丈夫なはず。
あなたの回答
tips
プレビュー