0

マシンでプロセスが実行されていることを確認しようとしているので、スケジュールされたタスクをセットアップして、実行されなくなった場合に1時間ごとにチェックして再起動することにしました。課題は、それが vb スクリプト (yuk!) を介して開始される Java プロセスであることです。当初の最大のハードルは、正しい作業ディレクトリで開始することでした。そのため、Java は満足していましたが、私はそれを解決しました。

プロセスを追跡し、必要に応じて再起動する方法を見つけました。この ps1 スクリプトは、powershell 環境内から直接実行すると完全に機能します。

LNG_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

このバッチ スクリプトをスケジュールされたタスクとして実行してみてください。

@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 に答える
0

Invoke-Item を使用してみてください:

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

これにより、現在のディレクトリの問題も解決されます。

于 2015-02-25T17:18:35.757 に答える