タスクスケジューラジョブがマップされたネットワークドライブにアクセスできないのはなぜですか?


27

ローカルファイルをネットワーク共有にバックアップするためにRobocopyを実行するタスクスケジューラジョブがあります。ネットワーク共有にアクセスするにはドメイン資格情報を使用する必要がありますが、ローカルコンピューターはドメイン上になく、ジョブはローカル管理者として実行されます。このソリューションネットワーク共有の一時的なマッピングとマッピング解除は機能しますが、タスクスケジューラのジョブアクションを見た人にはパスワードがプレーンテキストで公開されたままになります。タスクスケジューラジョブがRobocopyを実行し、適切なドライブ文字を参照するだけでよいように、ネットワークドライブを通常は半永久的にマップすることをお勧めします。ただし、「指定されたパスが見つかりません」というエラーが常に表示されます。昇格されたコマンドプロンプトからコマンドが正常に機能する場合でも(タスクは最高の権限で実行されるように設定されています)、タスクスケジューラからこれを実行するとRobocopyログに記録されます。また、昇格したコマンドプロンプトからマップされたドライブにアクセスするために、このレジストリ調整を行ったことにも注意してください。

編集:明確にするために、ローカル管理者としてログインして、Windows Explorerを管理者として起動します。ネットワーク共有をドライブ文字Yにマップします。管理者としてコマンドプロンプトを起動し、実行します

C:\Windows\System32\Robocopy.exe C:\temp Y:\temp

正常に動作します。ユーザーがログインしているかどうかにかかわらず、最高の権限でまったく同じコマンドを実行するタスクスケジューラジョブを作成します。実行するとエラーが発生します。ログに書き込んで取得する

ERROR 3 (0x00000003) Getting File System Type of Destination Y:\temp\
The system cannot find the path specified.

に続く

ERROR 3 (0x00000003) Creating Destination Directory Y:\temp\
The system cannot find the path specified.

ローカルパスまたはネットワークパスにスペースが含まれていますか?もしそうなら、パスの最初と最後に二重引用符でパスをカプセル化しますか?
日曜日

@SunWKimどちらのパスにもスペースはありません。
クレイグW

ローカルからネットワークへのバックアップを実行するために使用しているコマンドラインは何ですか?どの種類のネットワーク共有にバックアップしていますか?バックアップコマンドを実行すると、おそらくネットワーク共有が利用できない(接続されていない)と思うようになります。

あなたのユーザーとして実行されているのですか、それとも単に「管理者」ですか。ユーザーの場合、ドライブはユーザー用に永続的にマップされていますか?
ニック

@SunWKimはい、ドライブはマッピング後に接続されます。ローカル管理者にはネットワーク共有に対する権限がないため、Robocopyを実行する前に別のユーザーとしてマップする必要があります。
クレイグW

回答:


17

マッピングされたドライブはユーザーインターフェイスの概念であり、そのようなバックグラウンドタスクでは使用できません。UNCを介してターゲットにアクセスし、タスクを実行するユーザーがターゲットにアクセスできることを確認します。


ありえない。コンピューターがドメイン上にないため、非ドメインユーザーとしてタスクを実行する必要がありますが、ドメインユーザーのみがネットワーク共有にアクセスできます。
クレイグW

私はこれがゲームに非常に遅いことを知っていますが、作業を2つのスケジュールされたタスクに分けてみました.1つはドメイン資格情報を持つネットワーク共有用で、もう1つはマップされたドライブにアクセスできるローカル管理者として実行していますか?それらをずらしたり、ファイルミューテックスなどを使用して、順番どおりに動作することを確認する必要があります。
ダンCsharpster

7

私の場合、私がしなければならなかったのはrun with highest privilegesフラグのチェックを外すことだけでしたが、ドライブをマップしたユーザーと同じユーザーでタスクを実行しています。


それは私にとってそれでした。理にかなっています。
トムホーズ

4

使用してみてください:

pushd \\machine\share

スケジュールされたタスクのバッチファイル内。ネットワーク共有ドライブは、ユーザー実行環境からのみ使用できます。「pushd」は、スクリプトのコンテキストで実行できるようにします。

使い終わったら:

popd \\machine\share

ドライブのマッピングを解除します。

リファレンス:https : //blog.adrianbanks.co.uk/windows/2007/03/08/accessing-network-file-shares-from-a-command-prompt.html


1

別のオプションは、Robocopyがサポートしているため、完全なネットワークパスを使用することです。すなわち、robocopy c:\ temp \\ server \ share \ temp

または、サーバー自体でバックアップを実行してください。バックアッププロセス専用のドメイン管理者アカウントを作成します。ドメイン管理者のみがアクセスできるテキストファイルからパスワードをロボコピーします。

何年も前に、この方法でネットワーク上のすべてのシステムの重要なファイルをバックアップするいくつかの.cmdスクリプトを作成しました。私が使用した唯一の外部プログラムは、CgywinのGrepコマンドと、コマンドプロンプトsmtpメール送信者でした。

システムのネットワークをスキャンするスクリプトを1つ作成しました。すべてのシステム名のテキストファイルを作成し、新しいシステムが見つかった場合は電子メールで通知します。(システムがスキップするために解析する設定ファイルがありました。)新しいシステムごとに、バックアップディレクトリが作成され、そこにバックアップ設定ファイルが配置されました。ユーザーはこのファイルを変更し、バックアップが必要なディレクトリをリストできます。また、彼らがオフィスにいたときに起こらないように、バックアップの時間を指定することもできました。このスクリプトは5分ごとにサーバーで実行しました。処理時間はかからず、新しいシステムがネットワークに接続されたときに警告するセキュリティ機能が気に入っています。

別のスクリプトは、個々のバックアップ構成ファイルをすべて解析し、そのシステムでバックアップを実行するタスクをスケジュールします。これは毎日午前12時1分に実行されました。

最後に、バックアップスクリプトは、スケジューラから渡された構成ファイルを解析し、robocopyを使用してすべてのファイルをコピーします。ユーザーが編集するため、構成ファイルの完全なエラーチェックがあり、問題がある場合はメールが届きます。

ユーザーはバックアップファイルを読み取ることはできましたが、バックアップを削除できませんでした。これにより、不満を抱いている可能性のある従業員からの損害からある程度保護されました。

.vbsやpowershellでもっとエレガントなものを作成できたかもしれませんが、私は実際にはプログラマーではありません。私のプログラミングクラスには、CobalとJCLが含まれていました。去ったときにスクリプトをコピーしたのを覚えていますが、スクリプトがどこにあるかは誰にもわかりません。


1

「ユーザーがログオンしているかどうかに関係なく実行する」オプションを「ユーザーがログオンしているときにのみ実行する」に変更することで問題を克服しました。これを試してみてください。


1
echo Get-Date >> c:\mount_nfs_log.txt
net use X: \\share\folder password /user:domain\user>> c:\mount_nfs_log.txt 2>&1

このPowerShellスクリプトを作成し、ジョブをSYSTEMとしてスケジュールし、再起動時に実行するように設定すると、UNCは他の問題の頭痛のためオプションではないため、スクリプトでドライブ文字を使用できました。


これで問題は解決しました!スクリプトが驚く前に実行する認証でログインするためのこのコマンドを持っています!これにより、堅牢な何かで「ユーザーアカウントをミラーリングする」という頭痛の種が解決されます。
-Tschallacka

1
スタックオーバーフローで誰かを助けたのは初めてでした。また、以前に持っていたものの代わりに「echo Get-Date」を使用します。
ライアンマクグラス

ロギングは必要なかったのでcmd /c net use、タスクのコピージョブエントリの前にジョブエントリを追加しただけで、問題が修正されました。あなたの投稿は、簡単な解決策を提供する提案されたミラーアカウントに4時間遭遇した後、最初でした。良い仕事を続けてください!
-Tschallacka

このスクリプトでUNCパスを維持しているので、わかります。ドライブ文字をUNCパスに割り当て、そのドライブ文字を参照しているという理由だけ\\ServerName\ShareNameで、この種のロジックを維持する必要があります。さらに、これは必ずしもNET USEバッチ経由で実行されるため、PowerShellである必要はありません。SYSTEMアカウントとしてタスクスケジューラを使用してスケジュールする限り、タスクを介して実行するようにスケジュールするスクリプト、ロジックなどの種類に関係なく実行できますスケジューラ。
ポン引きジュースIT

さらに明確にするためにNET USE \\<ServerName>\<ShareName> <password> /user:<domain>\<username>、実際のドライブ文字ではなく共有に対する認証のみが必要な場合は、そのように使用することもでき、ドライブ文字をまったく指定する必要がないことに注意してください。
ポン引きジュースIT

0

「開始」場所を「c:\」に変更してみてください。これは私にとってそれを修正するように思えたので、おそらくシステムがcmd.exeをセキュリティ機能としてデフォルトの\ windows \ system32 \から実行することを妨げていたのかもしれません。


0

Windowsタスクスケジューラからスクリプトを呼び出すときに、Windowsマップドライブr:\ server \ shareでr:/xxxfilename.txtにアクセスしようとすると、同じ問題が発生しました。//server/share/xxxfilename.txt

を使用して解決しまし た。バックスラッシュがスラッシュに変換されていることに注意してください。 これで、bash cygwinスクリプトがWindowsタスクスケジューラとcygwinシェルで実行されます。注:net use」コマンドはシェルのマップドライブにアクセスできますが、Windowsタスクスケジューラでこのコマンドを実行すると「使用不可R:」が表示されます。



スーパーユーザーへようこそ!質問を注意深く読んでください。あなたの答えは元の質問には答えませ。OPはCygwinまたはbashの使用については言及していません。
DavidPostill

0

別のユーザーが指摘したように、「ユーザーがログオンしているかどうかに関係なく実行する」オプションを「ユーザーがログオンしているときのみ実行する」に設定すると機能するようです。次に、マップされたパス(Z:など)またはサーバーパス(\\ ServerName \ Pathなど)を使用できます。

もちろん、このオプションを使用する場合は、指示どおりに実行し、関連するドライブへのアクセス権を持つユーザーとしてサーバーにログインしていることを確認する必要があります。私はこのような多くの仕事の設定がある古い会社にいたことを覚えています。ある日、誰かがメインのJob Serverから「サインアウト」しました。マシンをシャットダウンしなかったため、それが何らかの影響を与えるとは思っていませんでした。

また、最近では、Windowsは多くの自己起動システムリブートを実行することを好みます。したがって、このソリューションは自己責任で使用してください。


0

また、スクリプトでマッピングを作成し、パスワードに%が含まれている場合、スクリプトがtaskschedulerからは動作するが%はcommandpromptからは動作するために、%%と記述する必要があることに注意してください。


0

次のコマンドを使用して、バッチスクリプト自体に追加し、Windowsスケジュールタスクからバッチスクリプトを実行して、Windowsスケジュールタスクを使用してローカルシステムにコピーされたdir、fileを取得できます。ネット使用Y: "\\ xxx \ xxx \ xxx cd / d Y:ネットユーザー/ d Y:/ Y


-2

おかげで、「c:\で開始」を使用することで問題が解決したと思います。この問題を追跡して解決されたことを確認します。

私は同じ問題を抱えていましたが、バッチで直接クリックした場合、問題なく実行されましたが、スケジュールされたタスクではありませんでした。


これは著者の質問には答えません。コメントを答えとして残さないでください。
ラムハウンド

回答として「ありがとう」を追加しないでください。サイトにしばらく時間をかけると、あなたが好きな答えを投票するのに十分な特権が得られます。これは、スーパーユーザーの感謝の言葉です。
DavidPostill
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.