ほとんどの場合、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")
ありがとうございます!今はWScript.ScriptFullNameオブジェクトが必要です。 – user3503676
したがって、あなたは 'cscript.exe'または' wscript.exe'でVBScriptコードを実行していません。あなたのVBScriptランタイム環境は何ですか? –
私はHTA経由でVBScriptを実行していますonClick = "Test()" javascriptイベントハンドラ – user3503676