2016-09-05 3 views
1

私が書いたPowerShellスクリプトからの出力を取得しようとしています。Powershellスクリプトは常にHTA経由で0を返しています

test.ps1

Get-Process 

HTA内のVBScriptは、次のようにコーディングされています

Sub Test() 
    cmd = "powershell.exe -noprofile -command .\test.ps1; exit $LASTEXITCODE" 
    Set shell = CreateObject("WScript.Shell") 
    Set executor = shell.Exec(cmd) 
    executor.StdIn.Close 
    MsgBox executor.StdOut.ReadAll 
End Sub 

私はそれがperferctly働くコマンドラインでこのcmd文字列をしようとしているとき。しかし、メッセージボックスは常に空のスペースでポップアップしています。

これを修正するにはどうすればよいですか?

答えて

1

ほとんどの場合、test.ps1は、VBScript実行の作業ディレクトリに存在しないため、見つからないため実行されません。あなたが同じディレクトリにVBScriptとPowerShellのスクリプトを使用している場合には、VBScriptのパスからPowerShellスクリプトのパスを構築するのが最善です:

cmd = "powershell.exe -NoProfile -File """ & psscript & """" 

Set fso = CreateObject("Scripting.FileSystemObject") 
dir = fso.GetParentFolderName(WScript.ScriptFullName) 
psscript = fso.BuildPath(dir, "test.ps1") 

その後、あなたは、このようなコマンド文字列を構築することができます追加の二重引用符は、パス内のスペースを処理することです。また、-Command "...; exit $LASTEXITCODE"の代わりに-Fileというパラメータを使用することをお勧めします。代替案として


また、あなたのスクリプト内のディレクトリを変更することができます(あなたが現在の作業ディレクトリからPowerShellスクリプトを実行しているに固執する場合):

Set fso = CreateObject("Scripting.FileSystemObject") 
Set sh = CreateObject("WScript.Shell") 

sh.CurrentDirectory = fso.GetParentFolderName(WScript.ScriptFullName) 

... 
cmd = "powershell.exe -NoProfile -File .\test.ps1" 

編集: HTAは通常のVBScriptとは異なる実行時環境を持っています。 HTAエンジンはWScriptオブジェクトを提供しないため、WScript.ScriptFullNameはHTAでは機能しません。ただし、ドキュメントの場所からスクリプトディレクトリを決定することができます。

Set fso = CreateObject("Scripting.FileSystemObject") 
dir = fso.GetParentFolderName(Replace(document.location.href, "file:///", "")) 
psscript = fso.BuildPath(dir, "test.ps1") 

あなたはバックスラッシュにパスセパレータを正規化する場合は、いずれかのようにそれを行うことができます。

psscript = fso.BuildPath(Replace(dir, "/", "\"), "test.ps1") 

またはこのような:

psscript = fso.BuildPath(fso.GetFolder(dir).Path, "test.ps1") 
+0

ありがとうございます!今はWScript.ScriptFullNameオブジェクトが必要です。 – user3503676

+0

したがって、あなたは 'cscript.exe'または' wscript.exe'でVBScriptコードを実行していません。あなたのVBScriptランタイム環境は何ですか? –

+0

私はHTA経由でVBScriptを実行していますonClick = "Test()" javascriptイベントハンドラ – user3503676

1

はこの質問では、同じ問題が議論されました: Get Output of a PowerShell Script in a HTA

解決策は、powershellスクリプトの出力をテキストファイルに書き込むことでした.HTAでは、そのテキストファイルの出力を読み込んでMsgBoxで表示しました。

多分これはあなたのための解決策です。

関連する問題