きのうの続き
きのう、「PHPで文字列の最初と最後の半角、全角スペースを取り除く」って記事を書いたんだけど、目的としてはこの問題を解決したかったから。
タイトルのまんまなんだけど、タスクスケジューラの仕様なのかどうかが良くわからない。
結論としては、とりあえずタスク登録時にタスクスケジューラの動作と同じく、最初と最後のスペースを取り除く事で、この問題を回避したよ、というお話。
ググったけど、同じような現象の情報が見つからなかったので放流してみることにした。
なにが起きたの?
では、実際にどんな問題が起きたのか、順を追って説明したいと思います。
はじめに
本件は、Web画面からタスクを登録するシステムで、タスク名の末尾にたまたまスペースが入った時に発覚した現象です。このWeb画面の内部では schtasks コマンドで、タスク登録するバッチを呼んでるんだよね。
現象
ということで、タスク名の末尾に半角スペースの入ったタスクを登録。
タスクのプロパティを開いて、トリガーを編集して[OK]クリック。
ここで「次のタスクが削除されました」というメッセージが表示される。
メッセージに従って [キャンセル] クリックして閉じてみたんだけど
実際、このタスクは削除されてない。
うーむ、良くわからない…
ということで、再度挑戦してみる。
今度は「次のタスクが削除されました」のウインドウを閉じたあと
トリガータブでさらに [OK] をクリックしてみた。
今度は「タスク スケジューラはローカル コンピュータ のタスク スケジューラ サービスから接続を解除されました。」というメッセージが表示された。
………日本語でお願いします。
っていうか何でエラーメッセージ変わってんの?
ちなみにトリガー編集しないでそのまま [OK] クリックしても同じ。
タスクの job ファイルを見てみる
エラーメッセージでググっても、残念ながらそれらしい情報が見つからなかった。
良くわからないので、タスクの jobファイルを見てみることにした。
Windows 2008 のタスクって、job ファイルじゃないの?
C:\Windows\Tasks の下に.jobファイルがあるのかな、と思ってたんだけど
C:\Windows\System32\Tasks の方に出来てた。
拡張子が付いてないんだけど、これ jobファイルなのかな?
で、末尾にスペースの入ったタスクだけ、セキュリティの鍵マークが付いてない。
鍵マークついてるのは他のタスク。
エクスプローラの一覧ではファイルサイズが表示されてるのに、プロパティでは 0バイトになってる。
これはやっぱり、正常なタスクとして登録されていないってことなのかしら。
タスクスケジューラの仕様?
ということで「末尾にスペースのあるタスク名で登録すると、通常のタスクと何か違うぞ」ということが分かった。さらに色々試してみると、最終的に以下のことが判明。
- タスク名の先頭、末尾にスペースが含まれると本現象が発生
- 半角だけじゃなく全角スペースでも本現象が発生
- タスクスケジューラでタスク作成した場合、先頭、末尾のスペースは除去される
タスクスケジューラでタスク名を付ける時に、使用できない文字がいくつかあるんだけど
これと同じような感じで「先頭、末尾にスペースが含まれるとダメ」みたいな制限があるのかもしれない。
タスクスケジューラでタスク作成する時には、先頭、末尾のスペースが除去されることが分かったので、その動作に合わせることで対応。
んでもって「PHPで文字列の最初と最後の半角、全角スペースを取り除く」 の話に繋がるわけです。
情報求ム
ここまで読んでいただいた方、ありがとうございます。
- そういう話聞いたことある!
- 仕様です。
- こんな対処方法あるよー
などなど…
何か情報をお持ちの方が居らっしゃいましたら、是非とも反応ください。
よろしくお願いします(∩´∀`)∩
コメント