0

我试图确保一个进程正在我的机器上运行,所以我决定设置一个计划任务来检查并在不再运行时每小时重新启动一次。挑战在于它是一个通过 vb 脚本 (yuk!) 启动的 Java 进程。最大的原始障碍是在正确的工作目录中启动它,所以 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

参数:-command "c:\jobs\LNGS_restart.ps1"

有什么帮助吗?

4

2 回答 2

0

尝试使用 Invoke-Item:

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

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

于 2015-02-25T17:18:35.757 回答
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

如果这不起作用:尝试将MsgBoxVBScript 中的所有语句替换为WScript.Echo.

于 2013-09-04T20:55:35.230 回答