none
リモートでバッチ起動したときファイルコピーが失敗する RRS feed

  • 質問

  • いつもお世話になっております。

    サーバ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 にコピーできます。

    何が問題なのでしょうか?

    2014年3月18日 2:45

回答

  • まさにパスワード不一致が原因ですね。

    よって、バッチファイルでサーバーBのファイルをサーバーCにコピーする時、サーバーCにログオンするための資格情報をどうにかして入れる必要があります。

    バッチファイルだと、

    net use X: \\computer\share /user:ユーザー名 パスワード

    のようにまずコピー先の共有フォルダをネットワークドライブとして割り当て(ここではX:ドライブ)、

    COPY D:\WORKFILE.DAT X:\folder\  >%LOGF%

    のようにネットワークドライブ宛てにファイルコピーし、最後に

    net use X: /delete

    でネットワークドライブを削除する、という方法があります。

    ちなみに、サーバーB上でログオンユーザーが直接バッチファイルを実行した時にはちゃんとサーバーCにファイルコピーが行われる理由は、以前に共有フォルダにアクセスする際入力した資格情報が「Windows資格情報」として保存されており、それが適用されているためだと思われます。

    2014年3月18日 10:34
    モデレータ
  • チャブーンです。

    横から失礼します。

    ただ、Net use で既にD$を追加しているので、フォルダ単位でNET USE しなおすのが無駄なように思います。

    作法的にわかりやすいので問題はないと思うのですが、できるだけコード省略がしたい、というのであれば、net use で IPC$ を認証することで同じようにできると思います。この場合 net use /deleteは不要になります。

    http://itpro.nikkeibp.co.jp/article/COLUMN/20060725/244265/

    Windows資格情報も設定しているので、それを使って出来ないものでしょうか?

    (ローカル)ログオンユーザに紐づいているので、(リモート上で)ローカルログオンしていない状況ではムリだと思います。

    2014年3月19日 3:01

すべての返信

  • 補足ですが、サーバCのフォルダのアクセス権にはEvryoneにフルアクセスを設定しています。
    2014年3月18日 2:47
  • とりあえずはエラー内容を調査するため、バッチファイルを

    COPY D:\WORKFILE.DAT サーバCのフォルダ名  >%LOGF% 2>&1

    としてエラー出力もログファイルに出力してみてはいかがでしょうか。

    2014年3月18日 5:29
    モデレータ
  • 牟田口様

    ログオン失敗: ユーザー名を認識できないか、またはパスワードが間違っています。
            0 個のファイルをコピーしました。

    となっていました。

    サーバは全てワークグループ運用で、サーバA、サーバB、サーバC共にAdministratorのパスワードが違うのですが、

    それが原因でしょうか?

    WHOAMIで見たところ、サーバ名\administraorになっていましたがサーバ名がつくのが問題なのでしょうか?

    よろしくお願いいたします。

    2014年3月18日 6:27
  • まさにパスワード不一致が原因ですね。

    よって、バッチファイルでサーバーBのファイルをサーバーCにコピーする時、サーバーCにログオンするための資格情報をどうにかして入れる必要があります。

    バッチファイルだと、

    net use X: \\computer\share /user:ユーザー名 パスワード

    のようにまずコピー先の共有フォルダをネットワークドライブとして割り当て(ここではX:ドライブ)、

    COPY D:\WORKFILE.DAT X:\folder\  >%LOGF%

    のようにネットワークドライブ宛てにファイルコピーし、最後に

    net use X: /delete

    でネットワークドライブを削除する、という方法があります。

    ちなみに、サーバーB上でログオンユーザーが直接バッチファイルを実行した時にはちゃんとサーバーCにファイルコピーが行われる理由は、以前に共有フォルダにアクセスする際入力した資格情報が「Windows資格情報」として保存されており、それが適用されているためだと思われます。

    2014年3月18日 10:34
    モデレータ
  • 牟田口様

    Net use で解決しました。

    ただ、Net use で既にD$を追加しているので、フォルダ単位でNET USE しなおすのが
    無駄なように思います。

    あと、Windows資格情報も設定しているので、それを使って出来ないものでしょうか?

    2014年3月19日 2:42
  • チャブーンです。

    横から失礼します。

    ただ、Net use で既にD$を追加しているので、フォルダ単位でNET USE しなおすのが無駄なように思います。

    作法的にわかりやすいので問題はないと思うのですが、できるだけコード省略がしたい、というのであれば、net use で IPC$ を認証することで同じようにできると思います。この場合 net use /deleteは不要になります。

    http://itpro.nikkeibp.co.jp/article/COLUMN/20060725/244265/

    Windows資格情報も設定しているので、それを使って出来ないものでしょうか?

    (ローカル)ログオンユーザに紐づいているので、(リモート上で)ローカルログオンしていない状況ではムリだと思います。

    2014年3月19日 3:01
  • チャブーン様

    IPC$の設定で試した見たいと思います。

    ありがとうございました。

    2014年3月20日 0:23