2012-05-11 13 views
1

PowerShellを使用して、「ASA」プロセスが実行されているかどうかを毎時確認しています。そうでない場合は、再起動します。下のリンクのjon Zの答えから見つかったコードスニペットを使用して、それは素晴らしい仕事をしていました。たぶん少し良い? Powershell - if a process is not running, start itPowerShellプロセスチェックのプロセスが多すぎます

私はこのスクリプトを毎時24時間実行するスケジュールされたタスクを持っています。私は必要なときに私は気づい問題は&がここに私のスクリプトです

enter image description here

1.をしたい、私はASAの束が開いて処理していることです。プロセスが実行されていないことがわかったら電子メールを送信し、結果を電子メールで送信するスクリプトをもう一度確認します。

私の最初の仮定は、プロセス名が間違っていて、タスクマネージャで定義されているプログラム名でなければならないということでした。しかし、この出力によれば、ASAを使用するだけで正しいです。

enter image description here

だから私は、それが複数のインスタンスを始めている理由としてこだわっています。

答えて

1

スクリプトは、それがこの行のプロセスを作成し、実行されるたびに:

$start = ([wmiclass]"win32_process").Create($prog) # the process is created on this line 

それは常に作成のプロセスは、まだ存在しない場合は、それを作成するためのチェックはありません。あなたはこの

$start = '([wmiclass]"win32_process").Create($prog)' 

if文の後には、このようにそれを呼び出すようにそれを変更する必要が

invoke-expression $start 
+0

が魅力のように働きました。今見ているのは、プロセスが「ネットワークサービス」として実行されていることだけです。プロセスを自分のユーザーアカウントとして実行するにはどうすればログインできるのですか?私はプログラムを見たり使えますか? – Pat

+0

あなたの仕事のスケジューラで資格を変更する必要があります。ユーザー&pw –

+0

私はこの質問の前にこれを行いました(上のスクリーンショットでわかるように、私のユーザー名として多くのものが実行されました)。修正プログラムを実装してマシンをリブートしたとき、スクリプトはNETWORK SERVICEとして実行されました。他の考え? PowerShellはユーザーとしてinvoke-expressionを使用できますか? – Pat