やはり基本も重要と
23日の続き。そもそも何がしたかったかというと、VBScript を hoge.vbs {"hogehoge"} {Start | Stop} とかの引数で動かして、hogehoge の文字列でマッチするサービスを全部まとめて起動したり停止したりし、且つスタートアップも自動と無効で切り替えるようにしたかったんだけど、普通のサービスなら特に困らないのだけど、依存関係があり、しかも複数のサービスを一括でとなるとちょっと面倒なことになって
- 依存する子サービスを SQL for WMI で検索しようとすると、DisplayName をキーにできない
- For each 文でコレクションから取得した複数のプロパティを一つの変数に入れると、コレクションにならない(当たり前?)
- 子サービスに依存する孫サービスがあった場合、どうしようもない(何とかできるかもしれないけど、そこまで考えたくない)
- For each 文を入れ子にしようとすると何故かうまく動かない(入れ子にできるみたいなんだけど、よくわからない)
まぁ、これはとりあえず私が試した限りでそういう印象を受けたという話で 100% の裏を取ったわけじゃないですし、もっとスマートな方法があるかもわかりませんが、自力で一からスクリプトを書き、気合でどうにかするということにいい加減ウンザリしてきたこともあって、外部のコマンドを流用できないか試してみました。
- 恐ろしく基本に立ち戻り、net {start | stop} /y "hogehoge_svc"でサービスを操作するようにした。依存関係を気にしなくて済むし、Name プロパティだけわかれば良い
- スタートアップはリソキの service.vbs を使う。これも Name プロパティだけわかっていれば問題ない
ということで昼過ぎくらいからそっちで考え始めたんですけど、何かすんなりと行ってしまいました。何はともあれ、週末に考え事を持ち越したくなかったので安心したでしょうか。良かった良かった。