しばたテックブログ

PowerShellを中心に気分で書いている技術ブログです。

保護されているパーティションをPowerShellで削除する

小ネタおよび備忘録です。

手持ちのESXiをインストールしたUSBメモリをフォーマットし直そうとした際に、GUIからだと先頭のブートパーティションが削除できなかったのが発端です。

Diskpartで削除する

最初に参考情報としてDiskpartで削除する手順を紹介します。

nasunoblog.blogspot.com

Insider MVPの那須さんのブログに手順が詳しく記載されています。

こちらのケースではEFIシステムパーティションですが、保護されているパーティションを削除する場合はDiskpartコマンドを起動して該当のパーティションを選択したのち、

delete partition override

overrideを付けてdelete partitionしてやればOKです。

PowerShellで削除する

ここからが本題です。

PowerShellでこの様なパーティションを削除する場合はRemove-Partitionを使います。
先述のoverrideパラメーターの様な特殊なパラメーター指定は必要ありません。

実例

今回は下図のディスクを例に挙げます。

f:id:stknohg:20180803111030p:plain

図のディスク2がESXiをインストールしていたUSBメモリで、先頭4MBがブートパーティションでGUIからは削除することができません。
(他にもいくつかパーティションがあったのですが、この図ではすでに削除済みです)

この4MBのパーティションをPowerShellを使って削除します。

1. 削除対象パーティンションの確認

はじめに管理者としてPowerShellを起動します。
Get-Diskコマンドを実行すると、システムから見えるディスクの一覧を取得できます。

Get-Disk

Get-Partitionコマンドでディスクにあるパーティションを取得できます。

Get-Partition -DiskNumber [該当ディスク番号]

f:id:stknohg:20180803111047p:plain

この例だと、DiskNumber = 2PartitionNumber = 1が対象のパーティションとなります。

2. パーティンションの削除

Get-Partitionコマンドの結果はWMIのMSFT_Partition*1クラスのオブジェクトであり、このオブジェクトをRemove-Partitionコマンドに引き渡すことでパーティションの削除ができます。

以下の様にパイプラインでつなげてやればOKです。

Get-Partition -DiskNumber [該当ディスク番号] -PartitionNumber [該当パーティション番号] | Remove-Partition

f:id:stknohg:20180803111059p:plain

パイプラインを使わず直接DiskNumber、PartitionNumberを指定しても構いません。

Remove-Partition -DiskNumber [該当ディスク番号] -PartitionNumber [該当パーティション番号]

3. 結果の確認

これで保護されているパーティションを削除できます。

f:id:stknohg:20180803111116p:plain

GUIから見ても確かに消えていることが確認できました。

*1:PowerShell上は Microsoft.Management.Infrastructure.CimInstance#ROOT/Microsoft/Windows/Storage/MSFT_Partition 型で表現される