Скорее всего test.ps1
не находится в рабочем каталоге запуска VBScript, поэтому он не найден и, следовательно, не выполнен. Если у вас есть VBScript и PowerShell скрипт в том же каталоге, что лучше построить путь PowerShell скрипт с пути VBScript:
Set fso = CreateObject("Scripting.FileSystemObject")
dir = fso.GetParentFolderName(WScript.ScriptFullName)
psscript = fso.BuildPath(dir, "test.ps1")
Затем вы можете построить командную строку, как это:
cmd = "powershell.exe -NoProfile -File """ & psscript & """"
Дополнительные двойные кавычки должны содержать пробелы в пути. Я также рекомендую использовать параметр -File
вместо свернутого -Command "...; exit $LASTEXITCODE"
.
В качестве альтернативы (если вы хотите придерживаться запуска сценария PowerShell из текущего рабочего каталога) можно также изменить каталог в вашем скрипте:
Set fso = CreateObject("Scripting.FileSystemObject")
Set sh = CreateObject("WScript.Shell")
sh.CurrentDirectory = fso.GetParentFolderName(WScript.ScriptFullName)
...
cmd = "powershell.exe -NoProfile -File .\test.ps1"
Edit: HTAs имеют разную среду выполнения, чем обычные VBScripts. Двигатель 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
Итак, вы не используете код VBScript с 'cscript.exe' или' wscript.exe'. Какова ваша среда исполнения VBScript? –
Я запускаю VBScript через HTA onClick = "Test()" обработчик событий javascript – user3503676