PSDrive を使って自分の権限がついていないファイルやフォルダーをコピーする

メモ:  Category:powershell

AD のドメイン引っ越しという貴重な経験をしているのですが、引っ越し元の共有フォルダーに引っ越し先アカウントの権限を設定せずにコピーできないものかと考えておりました。 また、引っ越し元と引っ越し先では完全に異なるアカウントになり、引っ越し元のドメインは消滅することから所有者も何とかしたいとも・・・

そこで、コピー先の端末でコピー元の認証情報を使ってマウントし、 robocopy でコピーしてみました。

移行元と移行先が Active Directory ドメインに参加していない環境の場合、UAC リモート制限に引っかかるためレジストリを修正して UAC リモート制限を無効にする必要があります。

PowerShell で移行元共有フォルダーをマウントしコピーする

実行するコマンド、次のようになります。

PS C:\> $Cred = Get-Credential
PS C:\> New-PSDrive -Name SrcData -PSProvider FileSystem -Root "\\移行元PCのIPアドレスまたはPC名\共有フォルダー" -Credential $cred
PS C:\> cd SrcData:\
PS C:\> Robocopy コピー元フォルダー D:\Shared /E /DCOPY:DAT /COPY:DATS
PS C:\> cd C:\
PS C:\> Remove-PSDrive -Name SrcData

以上で、移行元の認証情報で共有フォルダーをマウントし、移行先へデータの移行ができます。

それでは、各コマンドが何をしているのか見ていきます。

Get-Credential コマンドレットで表示されたダイアログにユーザー名とパスワードを入力し認証情報を保持します。Get-Credential コマンドレットを使うと入力したパスワードは、[System.Security.SecureString] として暗号化され再利用可能になるそうです。

Get-Credential コマンドレット

New-PSDrive コマンドレットで移行元のフォルダーを新しいドライブとしてマウントします。

PS C:\> New-PSDrive -Name SrcData -PSProvider FileSystem -Root "\\192.168.x.x\Shared" -Credential $Cred

Name    Used (GB) Free (GB) Provider   Root              CurrentLocation
----    --------- --------- --------   ----              ---------------
SrcData                     FileSystem \\192.168.x.x\Shared

マウントに成功するとドライブのように扱えるので、移行元へ移動します。 あとは、 robocopy でコピーします。

PS C:\> cd SrcData:\
PS C:\> Robocopy コピー元フォルダー D:\Shared /E /DCOPY:DAT /COPY:DATS

コピーが終わったら、マウントを解除する必要があるので移行先のドライブへ移動しマウントを解除します。

PS C:\> cd C:\
PS C:\> Remove-PSDrive -Name SrcData

おまけ

マウントされているドライブを確認するには、 Get-PSDrive コマンドレットを使います。

Get-PSDrive コマンドレットは、一般的なディスクドライブだけでなく「レジストリ」や「証明書ストア」などもドライブとして列挙されます。「レジストリ」や「証明書ストア」もファイルシステムと同じように Set-Location コマンドレットでディレクトリを移動することができたりします。

PS C:\> Get-PSDrive

Name     Used (GB) Free (GB) Provider      Root
----     --------- --------- --------      ----
Alias                        Alias
C           282.87    638.61 FileSystem    C:\
Cert                         Certificate   \
D           597.22    332.89 FileSystem    D:\
E                            FileSystem    E:\
Env                          Environment
Function                     Function
HKCU                         Registry      HKEY_CURRENT_USER
HKLM                         Registry      HKEY_LOCAL_MACHINE
SrcData                      FileSystem    \\192.168.x.x\c$
Variable                     Variable
WSMan                        WSMan

bluenote by BBB