DiskPart は対話式で操作するか、スクリプトファイルを読ませるしかない頑固者です。
でも PowerShell ならスクリプトファイルを簡単にハンドリング出来るので、頑固な DiskPart もエレガントに扱う事が出来ます。
こんな感じ
$VHDFileName = "C:\VHD\TestData.vhdx" $TmpFile = $env:temp + "\diskpart-"+(Get-Date).ToFileTime()+".txt" @" select vdisk file="$VHDFileName" attach vdisk exit "@ | set-content $TmpFile diskpart /s $TmpFile del $TmpFile |
ミソはヒア文字列でに変数を含んだスクリプトファイルを作る点です。
DiskPart はこれで良いのですが、regedit とか改行コードが
CRLF(`r`n)になっていないと正しく処理してくれないプログラムもあります。
ヒア文字列の改行コードは LF(`n) なので、こんな感じで CRLF に置き換えます。(改行コードが CRLF
に仕様が変わった場合も考慮して置き換えしています)
$Data = @" Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\*\shell\sakuraeditor] @="SAKURAで開く(&E)" [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\*\shell\sakuraeditor\command] @="\"C:\\Program Files (x86)\\sakura\\sakura.exe\" \"%1\"" "@ # 改行コードを CRLF にする $Data = $Data -replace "`r","" $Data = $Data -replace "`n","`r`n" $TmpFile = $env:temp + "\regupdate-"+(Get-Date).ToFileTime()+".reg" $Data | set-content $TmpFile regedit /s $TmpFile sleep 1 del $TmpFile |
「○○で開く」のように、レジストリに *
が含まれている場合は、通常のレジストリハンドリングができないのでこのような手が有効です。
* などの特殊文字を含まない通常のレジストリ操作は「PowerShell
でレジストリ追加/更新」を参考にしてください。
余談ですが、ヒア文字列は改行だけの行は詰められる仕様になっています。(改行だけの行は削除されます)
Copyright © MURA All rights reserved.