从Powershell脚本启动VB脚本 - 从PS环境工作,但不是计划任务

时间:2013-08-30 22:39:09

标签: powershell vbscript

我正在尝试确保我的计算机上正在运行某个进程,因此我决定设置一个计划任务来检查&如果不再运行,每小时重新启动它。挑战在于它是一个通过vb脚本启动的Java进程(yuk!)。最大的原始障碍是在正确的工作目录中启动它,所以Java很高兴,但我解决了这个问题。

我想出了如何跟踪流程并在需要时重新启动。如果我直接在powershell环境中运行它,这个ps1脚本可以正常工作。

LNGS_restart.ps1 - >

$cmdArgs='/c cscript "C:\Program Files (x86)\LNGoogleCalSync\lngsync.vbs"';
$workingDirectory="C:\Program Files (x86)\LNGoogleCalSync\";

#Do select-string twice so we exclude the commandlet that actually finds the pattern (since that shouldn't count as a hit!)
if( -Not (WmiObject Win32_Process | select commandline | Select-String -pattern 'lngs' | Select-String -pattern pattern -notmatch -quiet))
{start -FilePath cmd.exe -ArgumentList $cmdArgs -NoNewWindow -WorkingDirectory $workingDirectory }

在powershell环境中运行上述功能非常有效。从命令提示符或计划任务运行它不起作用(不会启动该过程,它只会执行任何操作并返回)。

c:\jobs>powershell c:\jobs\LNGS_restart.ps1

发生了什么事?我不确定为什么它不会在powershell环境之外工作以及如何修复它以便我可以通过任务调度程序安排它

  

程序/脚本:powershell.exe

     

参数: - 命令“c:\ jobs \ LNGS_restart.ps1”

任何帮助?

2 个答案:

答案 0 :(得分:0)

尝试将此批处理脚本作为计划任务运行:

@echo off

setlocal

set "programdir=C:\Program Files (x86)\LNGoogleCalSync"
set "script=%programdir%\lngsync.vbs"

pushd "%programdir%"

wmic process get commandline | findstr /r [l]ngs >nul || cscript "%script%"

popd

如果这不起作用:尝试使用MsgBox替换VBScript中的所有WScript.Echo语句。

答案 1 :(得分:0)

尝试使用Invoke-Item:

Invoke-Item "C:\Program Files (x86)\LNGoogleCalSync\lngsync.vbs"

这也解决了当前目录问题。