Home > Windows にまつわる e.t.c.

DiskPart を PowerShell から使う


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 でレジストリ追加/更新」を参考にしてください。

 

余談ですが、ヒア文字列は改行だけの行は詰められる仕様になっています。(改行だけの行は削除されます)

 

back.gif (1980 バイト)

home.gif (1907 バイト)

Copyright © MURA All rights reserved.