ここまで悩んだ甲斐があった。linkstationのサルベージに成功した。しっかり日中は仕事をしつつ、PC2台ほどデータ移行させられた。つっかれた。
Windows PowerShellの注意点
PowerShell2.0。Windows7のデフォルトがこのバージョン。
自宅にはXPしかないので、実機で少し試した結果をフィードバックしておく。
- "ドライブレター"も英字もパスは大文字小文字を区別する
- Copy-Itemの"-Recurse"オプションはファイルが対象でも問題ない
- オプション"-Path"は、あってもなくても動く
- リダイレクト">"や">>"はUnicodeで出力するので、Get-Dateの出力形式で2バイト文字は避けたい
- リダイレクト先のパスは変数ではダメで、ドライブレターから始まる絶対パスを明示しないとカレントディレクトリが混ざったおかしなパスになる
- 共有フォルダへのアクセスは、net useでドライブレターを割り当ててパスを入れる
- ゲストフルアクセスの場合はユーザ名等の指定は不要
- 共有フォルダのドライブレターは、一度、cdで共有フォルダに移動しないと、何故かファイルをコピーできない。
うーむ、マニュアルにない変な癖があって、使いづらいなぁ。結局、共有フォルダ内のファイルはその日によってTest-Pathの答えが異なるので諦めた。
# ready for diskcopy # 移行対象のフォルダリストを作り、1つずつコピーする net use Z: ¥¥192.168.1.10 net use Y: ¥¥192.168.1.12 cd Z: Test-Path "Z:¥share¥hoge" cd Y: Test-Path "Y:¥share¥hoge" cd C:¥test¥script Get-ChildItem -Path Z:¥share | Add-Content C:¥test¥dir.log -Encoding Unicode # PS1実行スクリプトの許可 Set-ExecutionPolicy RemoteSigned .¥dataMigrate.ps1 # "dataMigrate.ps1" # powershell for diskcopy # 開始終了とエラーをログに出力して、コピー完了の確認をできるようにする # Line1 Write-Output "StartCopy" >> C:¥test¥copy.log Get-Date -Format G >> C:¥test¥copy.log Copy-Item -Path "Z:¥share¥hogefile" "Y:¥share" -Recurse 2>> C:¥test¥copy.log Get-Date -Format G >> C:¥test¥copy.log Write-Output "EndCopy" >> C:¥test¥copy.log
">>"のエンコードを気にするのであればその代わりに、パイプでつないでAdd-Contentを使うといいかも。Asciiらしい。
Write-Output "あいうえお" | Add-Content out.txt -Encoding Ascii Write-Output "かきくけこ" | Add-Content out.txt -Encoding Unicode