- PR -

タスクスケジューラからのネットワークドライブ参照

1
投稿者投稿内容
odik
ベテラン
会議室デビュー日: 2005/02/07
投稿数: 69
投稿日時: 2007-06-15 10:56
あるバッチファイルを手動で実行したときは正常な結果が得られますが、
タスクスケジューラより実行したときにまれに正常な結果が得られないことが
あります。

<環境>
windows2003server sp1
Dドライブ:ネットワークドライブ接続

<事象>
○あるバッチファイル(a.bat)があります。このバッチファイルはネットワークドライブ接続
されているDドライブを参照します。
dir d: >> a.log
・ネットワークドライブ接続がされているとき
手動によりa.batを実行すると、dドライブの内容がログへ出力されます。(正常)
タスクスケジューラよりa.batを実行すると、dドライブの内容がログへ出力されます。(正常)

・ネットワークドライブ接続がされていないとき
手動によりa.batを実行すると、dドライブの内容がログへ出力されません。(正常)
タスクスケジューラよりa.batを実行すると、通常dドライブの内容がログへ出力されません。(正常)
しかし、まれにdドライブの内容がログへ出力されることがあります。(異常)
この点が不明です。(※1)

○あるバッチファイル(b.bat)があります。このバッチファイルはネットワークドライブ接続
されているDドライブへファイルをコピーします。
copy c:\x.txt d:\x.txt
・ネットワークドライブ接続がされているとき
手動によりb.batを実行すると、dドライブへコピーされます。(正常)
タスクスケジューラよりb.batを実行すると、通常dドライブへコピーされます。(正常)
しかし、まれにdドライブが無いと判断され、dドライブへコピーが失敗することがあります。(異常)
この点が不明です。(※2)

・ネットワークドライブ接続がされていないとき
手動によりb.batを実行すると、dドライブへのコピーに失敗します。(正常)
タスクスケジューラよりb.batを実行すると、dドライブへのコピーに失敗します。(正常)

<質問>
上記※1,※2の不明な事象は一度、発生すると何度も同事象が再現できます。
ただし、OSを再起動すると事象は発生しなくなります。

私の勝手な推測なのですが、タスクスケジューラにてバッチファイルを実行した際は、
ネットワークドライブ接続の状態をキャッシュに持っていて、そのキャッシュの状態を
元に実行結果を返しているのかと思われます。
手動にて実行した場合は、常に正常な結果が返されます。

原因及びOSの再起動以外の対処方法について、お心当たりのある方はご教授下さいます様お願いします。
未記入
会議室デビュー日: 2007/06/06
投稿数: 14
投稿日時: 2007-06-15 13:46
ネットワークドライブにネットワークドライブ接続に
拘らなければいけないのでしょうか?

dir \\\\servername\\sharename >> a.log
等、他の方法もあると思われますが...。

[参考]
http://support.microsoft.com/kb/297684/ja
odik
ベテラン
会議室デビュー日: 2005/02/07
投稿数: 69
投稿日時: 2007-06-15 14:44
未記入様
アドバイス頂きまして有難うございます。

数年前に構築されたシステムでして、ネットワークドライブ接続という
仕様を変更すると、様々なところで影響がでてきてしまうため、
変更は出来ない状態です。

教えて頂いたURLはネットワークドライブ接続が時間が経つと
切れてしまうということの対処方法ですが、実際にネットワークが
繋がっているにも関わらず、まれに※2の事象がおきてしまうのです。

ぴよこ
ベテラン
会議室デビュー日: 2006/12/11
投稿数: 61
投稿日時: 2007-06-15 15:43
Dの接続先、オフラインフォルダに指定されてるとか?
odik
ベテラン
会議室デビュー日: 2005/02/07
投稿数: 69
投稿日時: 2007-06-15 18:00
ぴよこ様
アドバイス頂きまして有難うございます。

オフラインフォルダですが、有効にはなっておりませんでした。
(接続先のリモートデスクトップの設定を複数のユーザで可能
にしておりますので、有効に出来ない状態でした。)

ちゃっぴ
ぬし
会議室デビュー日: 2004/12/10
投稿数: 873
投稿日時: 2007-06-15 23:36
ここの板で何度も書かれていますが、network drive を利用するためには、INTERACTIVE logon されている user で task を起動する必要があります。

Task Scheduler で task を起動した場合には、同じ user が INTERACTIVE logon していない限り BATCH logon となるため、netwrk drive は扱えません。

かといって、常に logon しればいいんじゃないかと思われるかもしれませんが、そいつは security 的に NG です。

ではどうすればいいのかというと、相手先に password を聞かれないような user で task を起動し、path は UNC で指定するべきです。

相手先に password を聞かれないような user とは、同じ domain の account、同じ domain でなければ username, password が完全に一致している user ということです。

もちろん接続対象に有効な権限を持っている必要があります。
_________________
odik
ベテラン
会議室デビュー日: 2005/02/07
投稿数: 69
投稿日時: 2007-06-18 09:56
ちゃっぴ様
アドバイス頂きまして有難うございます。

ログオンしていなければ、ネットワークドライブは使えないということは
認識しております。

※2の不明な事象が発生したときもログインがされており、エクスプローラにて
以下の2点を確認しております。
・ネットワークドライブ接続のDドライブがある。
・Dドライブ内のファイルをエクスプローラから参照できる。

そのような状態であるにもかかわらず、※2が一度発生すると、ログインしている状態で、
タスクスケジューラから該当タスクを選択し、「今すぐに実行」を選択しても、
同事象が再現してしまうのです。
該当タスクを実行するユーザーも正しく設定されております。
(正しく設定されているというのは、そのユーザーがログオンしている状態で
ネットワークドライブ接続(d:)の設定がされており、接続先からもパスワードを
聞かれないような設定になっております。)

UNCでパスを指定するというのは、ごもっともだと思うのですが、
今は、様々なところで影響がでてきてしまうため、 変更が出来ない
状態です。 (あるアプリを導入しているのですが、そのアプリが
UNCに対応していないのです。)
1

スキルアップ/キャリアアップ(JOB@IT)