社内SEの徒然なる日記

Windowsタスク&PowerShellでネットワークドライブが使用できない

■ ネットワークを超えて・・・

あるファイルをファイルサーバーにコピーする処理をPowerShellで作成して、Windowsタスクスケジューラで実行したのですが、何故かエラーになって実行されません。

見ると、ネットワークドライブの割当は出来ています。
タスクとネットワークドライブコピー (1)

イベントログを見ると、警告が出ていました。
タスクとネットワークドライブコピー (2)

タスクとネットワークドライブコピー (3)

プロバイダーの状態: ドライブ 'Z:¥' が見つかりませんでした。ドライブの準備ができていないか、または割り当てられていません。。

だそうです。そんな可愛く。。と2回続けられても苛立ちは抑えきれません。

■ タスクの制限

調べてみると、案外簡単に原因は分かりました。

まず前提として、ネットワークドライブの割り付けはWindowsのユーザー単位の設定です。さらに、再接続の設定をしていたとしても、機能するのはログイン時です。

そして、タスクの実行は手動実行であっても、現在ログインしているユーザーで実行される訳ではないらしいのです。

要するに、タスクでネットワークドライブを割り付けるような処理を作りたいなら、スクリプトに割り付け処理を書けって事だそうです。

■ スクリプト

PowerShellにもネットワークドライブを割り付けるコマンドがあるような雰囲気だったのですが、バージョン3からとかなんとかと制限があって五月蠅いです。

そこで素直に、net use コマンドを使用しました。
net use Z: ¥¥10.120.1.100¥share /user:administrator password


割り当てるドライブはZ、接続先は「¥¥10.120.1.100¥share」、ユーザーが「administrator」で、パスワードが「password」。

スクリプトの先頭にこれを書いてあげたら、思い通りに動きました。

■ 後書き

私が処理を作る時、こういった接続処理を書く場合には直前に切断処理を書くことが多いです。今回の例でいえば、ネットワークドライブを切断する処理を書こうとしました。

net use /delete Z:


既に接続済みだった場合は、一度切断することで意図しない動作を防ぎたかったのですが、この場合は逆に良くなかったみたいで、処理が安定しなくなりました。

これ、接続されていなかったらスルーしてくれると思ってたのですが、普通にエラーが発生するみたいです。やれやれですね。

やれやれと言えば、この処理は本当はWindowsのタスクではなく、富士通社のoperationManagerというジョブ自動運用ソフトで実行する予定でした。

ところが、このソフトはネットワーク越しのコピーを推奨しないという素晴らしい製品だったらしく、何をどうしたところで動いてくれませんでした。まぁ、FTPを絡めたりしたら何とかいけそうだったのですが、今回はちょっと制約があって小細工が出来なかったんですよね。

・・・これ、最新版だと解消されてたりしないのかなぁ?

投稿記事の一覧:http://harikofu.web.fc2.com/

--- blog end --- スポンサードリンク

PageTop

コメント


管理者にだけ表示を許可する