トップ回答者
リモートでバッチ起動したときファイルコピーが失敗する

質問
-
いつもお世話になっております。
サーバA から サーバB のバッチをリモートで起動し、サーバB のバッチで作成されたファイルを サーバC へファイルコピーするような
処理を組んだのですが、ファイルコピーができません。
リモートでバッチを起動するPowerShell
*-------------------------------------------------------------------------*
$password = ConvertTo-SecureString "Password" -asplaintext -force
$cred = New-Object System.Management.Automation.PsCredential "UserID",$password
$exitcode = invoke-command -ComputerName サーバBのIPアドレス -Credential $cred -authentication CredSSP -scriptblock {
$p=start-process cmd -ArgumentList "/c D:TEST.BAT" -PassThru
$p | Wait-Process
$p.ExitCode
}Test.batの中身(サーバB)
SET LOGF=D:\LOGFILE.LOG
COPY D:\WORKFILE.DAT サーバCのフォルダ名 >%LOGF%実行後のLOGFILE.LOGの中身
0 個のファイルをコピーしました。
このバッチを、サーバB で実行すれば問題なくサーバC にコピーできます。
何が問題なのでしょうか?
回答
-
まさにパスワード不一致が原因ですね。
よって、バッチファイルでサーバーBのファイルをサーバーCにコピーする時、サーバーCにログオンするための資格情報をどうにかして入れる必要があります。
バッチファイルだと、
net use X: \\computer\share /user:ユーザー名 パスワード
のようにまずコピー先の共有フォルダをネットワークドライブとして割り当て(ここではX:ドライブ)、
COPY D:\WORKFILE.DAT X:\folder\ >%LOGF%
のようにネットワークドライブ宛てにファイルコピーし、最後に
net use X: /delete
でネットワークドライブを削除する、という方法があります。
ちなみに、サーバーB上でログオンユーザーが直接バッチファイルを実行した時にはちゃんとサーバーCにファイルコピーが行われる理由は、以前に共有フォルダにアクセスする際入力した資格情報が「Windows資格情報」として保存されており、それが適用されているためだと思われます。
-
チャブーンです。
横から失礼します。
ただ、Net use で既にD$を追加しているので、フォルダ単位でNET USE しなおすのが無駄なように思います。
作法的にわかりやすいので問題はないと思うのですが、できるだけコード省略がしたい、というのであれば、net use で IPC$ を認証することで同じようにできると思います。この場合 net use /deleteは不要になります。
http://itpro.nikkeibp.co.jp/article/COLUMN/20060725/244265/
Windows資格情報も設定しているので、それを使って出来ないものでしょうか?
(ローカル)ログオンユーザに紐づいているので、(リモート上で)ローカルログオンしていない状況ではムリだと思います。
- 回答の候補に設定 牟田口大介Moderator 2014年3月20日 7:41
- 回答としてマーク qoo_man 2014年4月4日 1:43
すべての返信
-
まさにパスワード不一致が原因ですね。
よって、バッチファイルでサーバーBのファイルをサーバーCにコピーする時、サーバーCにログオンするための資格情報をどうにかして入れる必要があります。
バッチファイルだと、
net use X: \\computer\share /user:ユーザー名 パスワード
のようにまずコピー先の共有フォルダをネットワークドライブとして割り当て(ここではX:ドライブ)、
COPY D:\WORKFILE.DAT X:\folder\ >%LOGF%
のようにネットワークドライブ宛てにファイルコピーし、最後に
net use X: /delete
でネットワークドライブを削除する、という方法があります。
ちなみに、サーバーB上でログオンユーザーが直接バッチファイルを実行した時にはちゃんとサーバーCにファイルコピーが行われる理由は、以前に共有フォルダにアクセスする際入力した資格情報が「Windows資格情報」として保存されており、それが適用されているためだと思われます。
-
チャブーンです。
横から失礼します。
ただ、Net use で既にD$を追加しているので、フォルダ単位でNET USE しなおすのが無駄なように思います。
作法的にわかりやすいので問題はないと思うのですが、できるだけコード省略がしたい、というのであれば、net use で IPC$ を認証することで同じようにできると思います。この場合 net use /deleteは不要になります。
http://itpro.nikkeibp.co.jp/article/COLUMN/20060725/244265/
Windows資格情報も設定しているので、それを使って出来ないものでしょうか?
(ローカル)ログオンユーザに紐づいているので、(リモート上で)ローカルログオンしていない状況ではムリだと思います。
- 回答の候補に設定 牟田口大介Moderator 2014年3月20日 7:41
- 回答としてマーク qoo_man 2014年4月4日 1:43