Powershell 経由でファイルシステム NTFS でディスクをフォーマットできませんか?

Powershell 経由でファイルシステム NTFS でディスクをフォーマットできませんか?

Powershell 経由でファイルシステム NTFS でディスクをフォーマットできませんか?

次のコードは、フォーマットを試行するまで機能します。スクリプトは管理者として実行されます。ファイル システムは NTFS ではありません。ブロック サイズは、ディスクと NTFS のデフォルトです。フォーマットを試行すると、常にアクセスが拒否されます。環境は、この投稿の日付時点で完全にパッチ/更新された Windows 11 です。

    Clear-Disk -Number 6 -RemoveData -Confirm:$false
    Initialize-Disk -Number 6 -PartitionStyle GPT -Confirm:$false
    New-Partition -DiskNumber 6 -UseMaximumSize -DriveLetter 'T'
    Format-Volume -DriveLetter 'T' -FileSystem NTFS -NewFileSystemLabel 'Test' -AllocationUnitSize 4096

例...

PS C:\WINDOWS\system32> Clear-Disk -Number 6 -RemoveData -Confirm:$false
PS C:\WINDOWS\system32> Initialize-Disk -Number 6 -PartitionStyle GPT -Confirm:$false
PS C:\WINDOWS\system32> New-Partition -DiskNumber 6 -UseMaximumSize -DriveLetter 'T'
   DiskPath: \\?\usbstor#disk&ven_hitachi_&prod_dk23aa-60&rev_0000#000000000000&0#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}
PartitionNumber  DriveLetter Offset                                                                                                                 Size Type                                                                                                            
---------------  ----------- ------                                                                                                                 ---- ----                                                                                                            
2                T           16777216                                                                                                            5.58 GB Basic                                                                                                           


PS C:\WINDOWS\system32> Format-Volume -DriveLetter 'T' -FileSystem NTFS -NewFileSystemLabel 'Test' -AllocationUnitSize 4096
Format-Volume : Access Denied
Activity ID: {adc29ae6-3193-0002-4318-dbb09331d901}
At line:1 char:1
+ Format-Volume -DriveLetter 'T' -FileSystem NTFS -NewFileSystemLabel ' ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : PermissionDenied: (StorageWMI:ROOT/Microsoft/...age/MSFT_Volume) [Format-Volume], CimException
    + FullyQualifiedErrorId : StorageWMI 40001,Format-Volume

ファイル システムを FAT32 などに変更すると、フォーマット コマンドが機能します。これは意味がありません。スクリプトを管理者として実行すると。

他のファイル システムを使用する例...

PS C:\WINDOWS\system32> Format-Volume -DriveLetter 'T' -FileSystem FAT32 -NewFileSystemLabel 'Test' -AllocationUnitSize 4096

DriveLetter FriendlyName FileSystemType DriveType HealthStatus OperationalStatus SizeRemaining    Size
----------- ------------ -------------- --------- ------------ ----------------- -------------    ----
T           TEST         FAT32          Fixed     Healthy      OK                      5.57 GB 5.57 GB

UI またはコマンド プロンプト経由でまったく同じ手順を実行するとdiskpart、エラーは発生しません。 ご提案があれば、ぜひお知らせください。

答え1

実際には、これはかなり複雑なシナリオであることが判明しました。いくつかの徹底的なテストの後、実際に UI (ディスク マネージャー) からエクスプローラー (ファイル マネージャー) に移動して、アクセス拒否エラーを再現しました。PowerShell を使用すると、問題をより迅速かつ簡単に引き起こすことができるようです。何らかのプロセスが、バックグラウンドで問題のディスクを排他的に制御しようとしていました。そこで、Defender、MalwareBytes、すべてのバックアップ アプリケーションを無効にし、復元ポイント キャプチャ プロセスが実行されていないことを確認したところ、アクセス拒否の問題はいつの間にか消えました。試さなかった唯一のことは、完全な再起動です。

以前、問題のディスクを完全に制御した、またはそう思っていたため、テストですべてのセキュリティ権限を完全に置き換え、完全な所有権などを取得しましたが、それでもアクセス拒否の問題はありました。ディスクを排他的に制御していた特定のプロセスを追跡する必要があります。しかし、少なくともこれは Powershell またはストレージ モジュールのコードの問題ではなく、環境の問題であるようです。

他にも奇妙な問題が 1 つ見つかりました。USB ベースのストレージで、Initialize-Disk が失敗し、「...すでに初期化されています...」というエラーが表示されるというものです。これはさまざまな場所で文書化されています。ただし、Reset-PhysicalDisk によるリセットを実行するという一般的な推奨修正方法は、一部の USB ストレージ デバイスでは Windows 11 で一貫して機能しないようです。一部の USB ストレージ デバイスは同じように動作しないようですが、驚くことではありません。

少なくとも、私が所有する 15 台以上の USB ストレージ デバイスと、eSATA、SATA などを介して接続されたさまざまなメーカーおよびモデルの SSD および HDD デバイスでは、次の方法が機能しているようです。

    #
    Clear-Disk -Number $theNumber -RemoveData -Confirm:$false

    # Documentation Suggests Reset, However Seems To Do Nothing On Some USB Storage Types...
    Reset-PhysicalDisk -FriendlyName (Get-PhysicalDisk -DeviceNumber $theNumber).FriendlyName 

    # Initalize-Disk Fails On Some USB Storage Types, Returns Initialization Is Already Complete...
    Initialize-Disk -Number $theNumber -PartitionStyle GPT -Confirm:$false -ErrorAction SilentlyContinue

    #
    New-Partition -DiskNumber $theNumber -UseMaximumSize -DriveLetter $theDrive | Out-Null

    #
    Format-Volume -DriveLetter $theDrive -FileSystem $theFileSystem -NewFileSystemLabel $theVolume -AllocationUnitSize $theSize -Force | Out-Null

silentlycontinue オプションを使用するのはちょっとしたハックですが、特定のディスクが初期化されているがまだフォーマットされていないかどうかをテストする方法はまだ見つかっていません。 「RAW」のテストだけでは不十分です。適切な状況では、ディスクがオンラインであっても初期化されていない、つまり RAW ではない場合があります。

疑似初期化されているが RAW 状態ではないディスクを明示的にテストするための PowerShell コード スニペットをお持ちの方がいらっしゃいましたら、ここで共有する価値があるかもしれません。

関連情報