• ベストアンサー

特定のプロセスが実行中か調べるスクリプトの書き方

WindosでPowerShellやWSHやDOSコマンドなどありますが 2008 サーバーで一般的なスクリプトを書くには何を使えば良いでしょうか? 書きたいスクリプトは、ある.NETのプログラムAがあり、 Aが実行(常駐)とうかプロセスがない場合は実行され、 プロセスがある場合は実行しないというスクリプトを書きたいです。 どのように作ればよいでしょうか?   

質問者が選んだベストアンサー

  • ベストアンサー
  • riridew
  • ベストアンサー率39% (21/53)
回答No.1

サンプルを作りました。 拡張子をvbsにして実行してみてください。 うまく動くかわかりませんが。 プロセス名はわかりますか? wmiで検索してみてください Option Explicit Dim objWShell Set objWShell = CreateObject("WScript.Shell") Private Const PROCESS = _ "SELECT * FROM Win32_Process WHERE Name = 'EXCEL.EXE'" Private Const TARGETPC = "winmgmts:" Call ProcessMonitoring() Sub ProcessMonitoring() Do Dim Wmi, ProcQuery Set Wmi = GetObject(TARGETPC) Do Set ProcQuery = Wmi.ExecQuery(PROCESS) Loop While ProcQuery.Count > 0 objWShell.Run "excel.exe" Loop End Sub

その他の回答 (1)

  • SHIMAPEE
  • ベストアンサー率75% (154/203)
回答No.2

PowerShellを勉強中の者です。 PowerShellだとこんな感じでしょうか。Win XPとVistaで試しました。 拡張子 ps1 が実行できる環境で。 ----- $temp = Get-Process | where {$_.ProcessName -eq "notepad"} if ($temp -eq $null) {Invoke-Item "C:\WINDOWS\notepad.exe"} else {Write-Host "起動されています。"} -----

関連するQ&A

  • PowerShellのスクリプト実行について

    PowerShellのスクリプト実行について PowerShellの勉強をしていますが、スクリプトを実行できません。。。 なんか、スクリプトの環境変数を設定するようですが、どこにも 設定方法がないです。。。。 もちろん、Set-ExecutionPolicy Unrestrictedは実行してあります。 以下日付と時間を表示するだけのスクリプトです。 ---------test.ps1--------- get-date get-time ---------------------------- スクリプトファイルの置き場所 ⇒ C:\script-test\test.ps1 ちなみに、スクリプトファイルを置いたディレクトリに移動して 実行しても、以下のようなメッセージが出て実行できませんでした。。 用語 'C:\script-test' は、コマンドレット、関数、スクリプト ファイル、または操作 可能なプログラムの名前として認識されません。名前が正しく記述されていることを確 認し、パスが含まれている場合はそのパスが正しいことを確認してから、再試行してく ださい。 発生場所 行:1 文字:15 + C:\script-test <<<< .\test.ps1 + CategoryInfo : ObjectNotFound: (C:\script-test:String) []、Comma ndNotFoundException + FullyQualifiedErrorId : CommandNotFoundException どなたかご教授下さい。

  • PowerShellのスクリプト実行方法

    PowerShellを勉強しようと思い、PowerShell ISEを起動して、色々なコマンドを実行していました。 今度はテキストエディタでコマンドを書いて、「myPSCommand.ps1」というファイルをCドライブ直下に配置しました。 下記のサイトを参考に環境変数にPATHを通しました。 http://www.oborodukiyo.info/PowerShell/v20/PS-EnviromentPath.aspx そして、ファイルをダブルクリックしたら、メモ帳が起動してきました・・・ 調べたら、下記のサイトが見つかりました。 http://www.atmarkit.co.jp/ait/articles/0709/20/news125.html セキュリティの為に、PowerShellからスクリプトを呼び出す必要があると書いてありました。 やりたい事は、あるファイルをバックアップしたいと思います。 スクリプトにコマンドを書き込んで、タスクスケジューラーで特定の時間がくると、ファイルをバックアップするような事をしたいと思います。 ただ、今の状態だとタスクスケジューラーに「myPSCommand.ps1」を指定すると、その時間がくるとメモ帳が開いてしまいます。 スクリプトのみが実行されるには、どのようにすればよろしいでしょうか?

  • PHPをバッチスクリプトのように実行する方法

    PHPをちょっと勉強してみようと思っています。 言語仕様をさらっと勉強したいだけなので Webサーバーを立ち上げるまではしたくないと思っています。 で、PHPをバッチスクリプトのように実行したいと思っています。 PerlやWSH(JScript, VBS)、シェル、Winコマンドバッチ等のように。 しかし、少し調べた限りではPHPをバッチのように起動する方法は分かりませんでした。 PHPをバッチスクリプトのように実行する方法はありますでしょうか? 存在しないのでしょうか?もしあるのならその方法を教えてください。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • シェルスクリプト内でプロセスID取得

    常駐プロセスAからsystemコールでシェルスクリプトを呼び出した際に、 シェルスクリプト内で親プロセスか自プロセスIDを取得出来る ようなことはできるのでしょうか? ご存じの方がいましたらご教授願います。

  • 実行中のプロセス監視して任意のプログラムを実行したい

    常時プロセスを監視し、特定のプログラムが実行されたら別の任意のプログラム(またはコマンド)を自動的に実行するという方法はありますでしょうか? こういった事がフリーウェアであったら嬉しいのですが…

  • WSHプログラミングで、Shell実行プロセスが終了しない内に、次の処理が実行されちゃいます・・・

    WSH(WindowsScriptingHost)でプログラミングを行っております。 以下のように、「A.exe」実行後、「B.exe」を実行するようにスクリプトを記述しています。 ところが、実際に実行してみると、「A.exe」が終了しない内に、「B.exe」が実行されてしまっている様なのです。 しかし、プログラム処理上、「A.exe」が実行終了してからでないと、「B.exe」を実行するのはまずいのです。 WSHで、「A.exe」が実行終了するまで、「B.exe」を実行させないようなスクリプトの記述方法を教えて下さい。 Set Shell = CreateObject("WScript.Shell") Shell.Run "cmd.exe /c D:\A.exe" Shell.Run "cmd.exe /c D:\B.exe"

  • シェルスクリプトの実行

    一台目のLINUX上でプログラムを実行しLANでつながれたもう1台のLINUXにあるシェルスクリプトを実行するにはC言語でどのようにプログラミングをすれば可能でしょうか? プログラムと同じ場所ならsystem(コマンド)で出来るんですよね? telnetとか使いますか?それとももっと単純に出来るのでしょうか?

  • 負荷を避けてスクリプトを実行させる方法

    負荷を避けてスクリプトを実行させる方法 メールを受信したらプログラムを実行させるようにしています。 何通もメールが来た時に正常にプログラムが実行できない時があります。 そこでbatchコマンドを盛り込んで行きたいのですが具体的な使い方がわかりませんでした。 スクリプトファイルの先頭にbatchコマンドを置けばよいのか、 /etc/mail/aliasesで初めから hogehoge: "| batch -f /etc/hogehoge.sh" のようにするのかわかりません。 もしくは別の方法があるのでしょうか? やりたい事は負荷を避けてなるべく正確にスクリプトを実行させたいのです。 どなたかわかるかたよろしくお願いします。

  • rshを使うスクリプトをバックグラウンド実行

    Linux+Perlでのお話です。 内部でsystem関数を使ってrshコマンドを実行しているperlスクリプト(以下、スクリプトAという)があります。 スクリプトAをフォアグラウンドで実行するとうまく流れるのですが、バックグラウンド実行すると、rshコマンドを実行した直後でjobが止まってしまいます。 もっと詳しく言いますと、スクリプトAのrshコマンドは、ディスクを共有しているリモートマシンに対して、スクリプトBを実行するように指示しています。 スクリプトBではとある計算を行なっており、その計算結果をファイルに出力しています。 そして、その結果をスクリプトAで読み込んで後処理を行うというものです。 ----- …(前処理)… system("rsh (ホスト名) \"(スクリプトB実行コマンド及び引数) 1> /dev/null 2> /dev/null\""); # ここでjobが止まってしまいます。 # ここで標準出力(ログファイルにリダイレクトしてる)に何か出力しようとしても、何も出力されてません。 (スクリプトBの結果ファイルの読み込み) …(後処理)… ----- Jobが止まってしまうと言っているのは、jobsコマンドで見ると"job stopped"となっている状態のことを言っています。 この状態でスクリプトBの結果はファイルに出力されているので、rshのコマンドはうまく投げられていると思います。 (「rshやsshは標準入力が期待されてるとバックグラウンド実行が出来ない」(?)というような記述をどこかで見かけたので、念のためrshに"< /dev/null"の記述を加えてもみたのですが、変わりませんでした) その後、止まっているjobをfgコマンドでフォアグラウンドで再開させると、最後まで問題なく実行されます。 フォアグラウンドで実行すればうまくいくのに、バックグラウンドで実行すると止まってしまうのが理解出来ません。 これは何が原因なのでしょうか。 そして、どうしたら解決出来るのか。 どなたかご存知でしたら、ご教示頂きたくお願い致します。

    • ベストアンサー
    • Perl
  • シェルスクリプトで一時的にルート権限として実行

    Linuxのシェルスクリプトでそのスクリプトファイルを実行したユーザーにかかわらずそのスクリプト内のコマンドがルート権限として実行されるようにしたいのですが良い方法はありますか? ルートのパスワードを入力せずに一時的にルート権限を使用できるようにしたいのです。 やりたいことは screenでルートユーザでしかアタッチできないプロセスに一時的にアタッチしてコマンドを実行してデタッチするということなのですが… screenにはマルチユーザー機能が在るようで、それはscreenでルートがアタッチしてる場合のみですよね? 間違っていたらすみません。 OSはCentOS 6.2です。 必要な情報があれば補足で追加致します。 宜しくお願いします。

専門家に質問してみよう