透過 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 或命令提示字元執行完全相同的步驟 via diskpart,則不會出現錯誤。歡迎任何建議。

答案1

事實上,這是一個相當扭曲的場景。經過一些廣泛的測試。實際上,我將 UI(磁碟管理器)連接到資源管理器(檔案管理器)來複製拒絕存取錯誤。看起來 PowerShell 能夠更快、更輕鬆地觸發問題。某些進程試圖在後台獨佔控制有問題的磁碟。因此,我禁用了 Defender、MalwareBytes、所有備份應用程序,甚至確保沒有運行還原點捕獲進程,並且訪問被拒絕的問題在某個時候消失了。我唯一沒有嘗試的是完全重新啟動。

以前,我在測試中已經完全控制了有問題的磁碟,或者我認為,完全替換了所有安全權限,取得了完全所有權等,但仍然存在訪問被拒絕的問題。我仍然需要追蹤獨佔磁碟控制的特定進程。但至少這似乎是一個環境問題,而不是 Powershell 或儲存模組的程式碼問題。

我確實發現了另一個奇怪的問題,一些基於 USB 的存儲,初始化磁碟失敗,並出現“...已經初始化...”錯誤。這在不同的地方都有記錄。然而,對於某些 USB 儲存設備,透過 Reset-PhysicalDisk 進行重置的典型建議修復似乎在 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

使用靜默繼續選項有點麻煩,但我還沒有找到一種方法來測試給定磁碟是否已初始化但尚未格式化。對“RAW”的測試是不夠的。在適當的情況下,您可以擁有一個線上磁碟,但未初始化,即不是 RAW。

如果有人有一個 PowerShell 程式碼片段來明確測試處於準初始化狀態但未處於 RAW 狀態的磁碟,可能值得在此分享。

相關內容