radical-pluto’s golf diary

主にGolfの事について。まれにソフト開発/設計のメモ代わりとして。

Yahoo!ボックスのPCアプリのデータフォルダ指定変更スクリプト

Yahoo!ボックス(http://box.yahoo.co.jp/)を利用し始めました。プレミアム会員なので50GBが使えるという事で、どのように運用していこうか現在模索している段階です。さて、Yahoo!ボックスのパソコン用アプリではインストール後にファイルの保存先フォルダを指定する必要がありますが、ソフトの仕様上、そのままではCドライブ内のフォルダしか保存先として指定できないというクソして寝るぜ的な仕様になっています。
この制限を回避する方法について色々な方々が書かれているので、紹介しておきます。

これらを踏まえて、上記で書かれているレジストリ等の変更作業を一括して処理するスクリプトを作成しました。WindowsPowerShellで動作するスクリプトファイルです。このスクリプトレジストリを変更するものです。作業前に復元ポイントを作成するなどの対策をとってください。また、自己責任でお願いします。
ソースコードは下記の通りです。
いきなり実行してシステムが壊れちゃったぜ!という事態を防ぐため、レジストリの変更処理及びファイルコピーコマンドレットに-whatifオプションをつけてあります。-WhatIf付きで実行結果を確認してから、それで間違いがなければ、-WhatIfオプションをはずして再実行してください。

#Yahoo!ボックスの保存先変更用スクリプト by PowerShell            
#使い方:スクリプトの引数として、新たな保存先パスを指定する
# e.g. .\ybox_save_change.ps1 -NewSavePath "D:\yahoobox"
#想定実行タイミング : Yahoo!ボックスのソフトウェアをインストールし、いったんCドライブのフォルダを保存先として指定した後。

<# 処理シーケンス
Stop-Processでyahoodesktop.exeを終了する。
Yahoo!ボックスのソフトウェアがインストールされているか確認する。
指定ディレクトリが存在しているか確認する 存在していなければ、ディレクトリを作成する。
現在のCドライブ内のYahoo!ボックス保存先フォルダのファイル及びディレクトリを保存先パスにコピーする。
レジストリを指定パスに書き換える。
PCを再起動する。再起動確認する。
#>


#******************** Start ************************
Param([string] $NewSaveDir)
#Yahoo Desktop.exeを終了する
Get-Process | where {$_.ProcessName -eq "YahooDesktop"} | kill
$installed = Test-Path "HKCU:\Software\Yahoo!J\Desktop\Storage"
if( $installed -eq $false){
Write-Host "Yahoo!ボックスのPC用ソフトがインストールされていません。処理を終了します。"
exit
}

#スクリプトのパラメータを取得
$new_savedir = $NewSaveDir.TrimEnd("\")

if($new_savedir -eq $null){
Write-Host "スクリプトのパラメータとして保存先ディレクトリが指定されていません。処理を終了します。"
exit
}else{

$res = Test-Path $new_savedir
#保存先ディレクトリが存在しない場合はディレクトリを作成する
if ($res -eq $false) {
$Is_makedir = read-host "指定された新たな保存先ディレクトリが存在しません。ディレクトリを作成しますか? (y/n) "
if ( $Is_makedir -match "[Yy]" ) {
New-Item $new_savedir -ItemType Directory -WhatIf
Write-Host "ディレクトリを作成しました。"
}else{
Write-Host "保存先ディレクトリが存在しないので処理を終了します。"
exit
}
}

}


#Yahoo!ボックスのレジストリエントリからAccountの値を取得する
$account = Get-ItemProperty HKCU:\Software\Yahoo!J\Desktop\Storage | select -Property Account
$accountname = $account.Account
$path = "HKCU:\Software\Yahoo!J\Desktop\Storage\$accountname"
$item = Get-ItemProperty $path
$old_savedir = $item.BoxFolder+"\*"

#既存の保存先から新しい保存先ディレクトリへフォルダとファイルをコピーする
cp -Path $old_savedir -Destination $new_savedir -Recurse -WhatIf

#レジストリを指定パスに書き換える。
Set-ItemProperty $path -Name "BoxFolder" -Value $new_savedir -WhatIf
Set-ItemProperty $path -Name "BoxFriendFolder" -Value $new_savedir+"\友だちから共有されているフォルダー" -WhatIf
Set-ItemProperty $path -Name "BoxDocumentFolder" -Value $new_savedir+"\書類" -WhatIf
Set-ItemProperty $path -Name "BoxPictureFolder" -Value $new_savedir+"\写真" -WhatIf
Set-ItemProperty $path -Name "BoxServiceFolder" -Value $new_savedir+"\連携サービス" -WhatIf
Set-ItemProperty $path -Name "BoxShareFolder" -Value $new_savedir+"\共有" -WhatIf
Set-ItemProperty $path -Name "BoxTrashFolder" -Value $new_savedir+"\ゴミ箱" -WhatIf

#PC再起動確認
$reboot = Read-Host "操作が完了しました。PCを再起動する必要があります。今すぐ再起動しますか? (y/n)"
if($reboot -match "[yY]"){
Restart-Computer -WhatIf
}else{
exit
}

exit