
Kann Festplatte mit dem Dateisystem NTFS nicht über Powershell formatiert werden?
Der folgende Code funktioniert bis zum Formatierungsversuch. Das Skript wird als Administrator ausgeführt. Das Dateisystem ist NTFS. Die Blockgröße ist die Standardgröße für die Festplatte und NTFS. Beim Formatierungsversuch wird mir immer der Zugriff verweigert. Die Umgebung ist Windows 11, vollständig gepatcht/aktualisiert zum Datum dieses Beitrags.
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
Beispiel...
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
Wenn ich das Dateisystem beispielsweise auf FAT32 ändere, funktioniert der Formatierungsbefehl. Das ergibt für mich keinen Sinn. Wenn das Skript als Administrator ausgeführt wird.
Beispiel mit Verwendung eines anderen Dateisystems ...
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
Wenn ich die exakt gleichen Schritte über die Benutzeroberfläche oder die Eingabeaufforderung ausführe diskpart
, tritt kein Fehler auf. Alle Vorschläge sind willkommen.
Antwort1
Tatsächlich stellte sich dies als ziemlich verzwicktes Szenario heraus. Nach einigen umfangreichen Tests konnte ich die Benutzeroberfläche (Datenträgerverwaltung) tatsächlich in den Explorer (Dateiverwaltung) übertragen, um die Zugriffsverweigerungsfehler zu reproduzieren. Es schien, dass PowerShell das Problem schneller und einfacher auslösen kann. Im Hintergrund versuchte ein Prozess, die alleinige Kontrolle über die betreffende Festplatte zu übernehmen. Also deaktivierte ich Defender, MalwareBytes und alle Backup-Anwendungen und stellte sogar sicher, dass kein Wiederherstellungspunkt-Erfassungsprozess ausgeführt wurde, und das Problem mit dem verweigerten Zugriff verschwand irgendwann. Das Einzige, was ich nicht versucht habe, war ein vollständiger Neustart.
Zuvor hatte ich die vollständige Kontrolle über die betreffende Festplatte übernommen, oder das dachte ich zumindest, hatte beim Testen alle Sicherheitsberechtigungen vollständig ersetzt, die volle Kontrolle übernommen usw., aber das Problem mit dem verweigerten Zugriff bestand immer noch. Ich muss immer noch den spezifischen Prozess aufspüren, der die ausschließliche Kontrolle über die Festplatte übernommen hat. Aber zumindest scheint es sich um ein Umgebungsproblem zu handeln und nicht um ein Codeproblem mit Powershell oder dem Speichermodul.
Ich habe noch ein weiteres merkwürdiges Problem gefunden: Bei einigen USB-basierten Speichern schlägt Initialize-Disk fehl und es wird der Fehler „…bereits initialisiert…“ angezeigt. Dies ist an verschiedenen Stellen dokumentiert. Die normalerweise empfohlene Lösung, einen Reset über Reset-PhysicalDisk durchzuführen, scheint jedoch unter Windows 11 bei einigen USB-Speichergeräten nicht durchgängig zu funktionieren. Anscheinend verhalten sich einige USB-Speichergeräte einfach anders, was wohl keine Überraschung ist.
Was zumindest mit den etwa 15 USB-Speichergeräten, die ich habe, und verschiedenen Marken und Modellen von SSD- und HDD-Geräten, die über eSATA, SATA usw. angeschlossen sind, zu funktionieren scheint, ist Folgendes:
#
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
Die Verwendung der Option „SilentlyContinue“ ist ein bisschen ein Hack, aber ich habe noch keine Möglichkeit gefunden, zu testen, ob eine bestimmte Festplatte initialisiert, aber noch nicht formatiert ist. Der Test auf „RAW“ ist unzureichend. Unter den richtigen Umständen kann eine Festplatte online, aber nicht initialisiert sein, also nicht RAW.
Wenn jemand über einen PowerShell-Codeausschnitt verfügt, um explizit einen Test für eine Festplatte durchzuführen, die quasi initialisiert ist, sich aber nicht im RAW-Zustand befindet, könnte es sinnvoll sein, ihn hier zu teilen.