Robocopyを別のユーザー権限で実行して別PCからデータコピーする
パソコンのデータ移行などで別のPCからデータをコピーしたいことが時々ありますが、USBメモリや外付けHDDに一度コピーしていると2回、データのコピーをしなければならず時間がかかってしまいます。
そこで今回は、Robocopyコマンドを別のユーザー権限で実行することで別のPCから直接別のPCへデータをコピーする方法を紹介します。
前提条件
移行元PCと移行先PCがActive Directoryドメインに参加済みであることがおすすめです。
ドメインに参加していない場合は移行元PCにレジストリを追加してUACリモート制限を無効にしておいてください。
https://learn.microsoft.com/ja-jp/troubleshoot/windows-server/windows-security/user-account-control-and-remote-restriction
ドメインアカウントの場合はUACリモート制限はありませんので対応不要です。
なお、このレジストリはセキュリティの観点から作業後に削除することをおすすめします。
続いて移行元PCの管理共有にアクセスできることを事前に確認しておいてください。
確認方法はエクスプローラを開いてアドレスバーに”\\移行元PCのIPアドレスまたはPC名\c$”と入力します。
ユーザー入力画面が表示されたら移行元PCの管理者権限があるユーザー情報を入力します。
移行元PCのCドライブが表示されれば管理共有へのアクセスはOKです。
PowerShellコマンド
まとめると下記のようなPowerShellコマンドを順番に実行します。下記の例では移行元PCのデスクトップにあるデータを新しいPC(コマンドを実行しているPC)のデスクトップにコピーします。
$Cred = Get-Credential
New-PSDrive -Name DataMove -PSProvider FileSystem -Root "\\<移行元PCのIPアドレスまたはPC名>\c$" -Credential $cred
cd DataMove:\
Robocopy Users\<ユーザー名>\desktop C:\Users\<ユーザー名>\desktop /MIR /W:1 /R:1
cd C:\
Remove-PSDrive -Name DataMove
コマンドの解説
最初のGet-Credentialで移行元PCのユーザーアカウント情報を入力します。移行元PCで管理者権限のあるユーザーIDを指定してください。
2行目のNew-PSDriveで移行元PCに接続して新しいドライブをマウントします。ドライブのマウントと言ってもイメージ的にはネットワークドライブの追加に近い感じです。
接続に成功すると下記のように表示されます。
マウントに成功するとネットワークドライブに移動するようにディレクトリを移動できるようになります。次の行のcdコマンドでDataMove:\(実体はRootのパス)にディレクトリ移動します。
ディレクトリ移動した後に試しにdirコマンドを実行してみると、移行元PCのCドライブに保存されているファイルの一覧が表示されると思います。
後は通常のRobocopyコマンドを実行します。
最後にPSDriveから自分のPCにディレクトリ移動して、最後にRemove-PSDriveでドライブのマウントを解除します。イメージ的にはネットワークドライブの切断に近いです。
まとめ
ドメイン環境かつ移行元PCと移行先PCで同じユーザーアカウントを使っていれば移行元PCの管理共有にはほぼ無条件でアクセスできますが、そうではない場合はRobocopyコマンドを違うユーザーアカウントで実行する必要があります。
今回はPSDriveを経由することで疑似的にRobocopyコマンドを別アカウントで実行しました。
また、管理共有にアクセスできない場合はドメイン参加状況、権限のあるユーザーアカウントかどうか、ファイアウォールが通信を拒否していないかなどをご確認ください。