When working with new storage devices in Windows, PowerShell provides robust cmdlets to handle the entire disk setup process. Whether you're setting up a fresh SSD, HDD, or virtual disk, the process involves three key operations: initialization, partitioning, and formatting.
Before beginning, ensure you:
- Run PowerShell as Administrator
- Have the disk physically connected or mounted
- Back up any existing data (operations are destructive)
First, list all available disks to identify your target:
Get-Disk | Format-Table -AutoSize
This returns output like:
Number Friendly Name Serial Number HealthStatus OperationalStatus Total Size Partition Style
------ ------------ ------------ ------------ ----------------- ---------- ---------------
0 Samsung SSD S3J1NX0K123456 Healthy Online 476.94 GB GPT
1 Unknown WD-WX12A3456789 Unknown Offline 931.51 GB RAW
Note the disk number of your target (e.g., Disk 1 in this case).
Initialize the disk with either MBR (for legacy systems) or GPT (modern systems):
Initialize-Disk -Number 1 -PartitionStyle GPT
For MBR instead:
Initialize-Disk -Number 1 -PartitionStyle MBR
Create a single partition using the entire disk space:
New-Partition -DiskNumber 1 -UseMaximumSize -AssignDriveLetter
For multiple partitions (e.g., 200GB and remaining space):
$part1 = New-Partition -DiskNumber 1 -Size 200GB -AssignDriveLetter
$part2 = New-Partition -DiskNumber 1 -UseMaximumSize -AssignDriveLetter
Format with NTFS (standard for Windows) and set a volume label:
Format-Volume -DriveLetter D -FileSystem NTFS -NewFileSystemLabel "DataDrive" -Confirm:$false
For ReFS (resilient file system):
Format-Volume -DriveLetter E -FileSystem ReFS -NewFileSystemLabel "Backups" -Confirm:$false
For scripting scenarios, consider these parameters:
-AllocationUnitSize 4096
for 4K sector alignment-Force
to suppress confirmation prompts-Full
for thorough formatting (slower)
Here's a full automation example:
# Identify new raw disk
$newDisk = Get-Disk | Where-Object {$_.PartitionStyle -eq "RAW"} | Select-Object -First 1
if ($newDisk) {
# Initialize as GPT
Initialize-Disk -Number $newDisk.Number -PartitionStyle GPT
# Create and format partition
$partition = New-Partition -DiskNumber $newDisk.Number -UseMaximumSize -AssignDriveLetter
Format-Volume -DriveLetter $partition.DriveLetter -FileSystem NTFS
-NewFileSystemLabel "NewVolume" -AllocationUnitSize 4096 -Confirm:$false
Write-Output "Successfully prepared disk $($newDisk.Number) as $($partition.DriveLetter):"
}
else {
Write-Output "No uninitialized disks found"
}
Working with raw disks in Windows requires three key steps: initializing the disk, creating partitions, and formatting them with a filesystem. PowerShell provides cmdlets to automate this entire process without GUI tools like Disk Management.
Before proceeding, ensure:
- You're running PowerShell as Administrator
- The target disk is physically connected
- You have identified the correct disk number (use
Get-Disk
)
First, list all disks to identify the target:
# List all disks
Get-Disk | Select-Object Number, FriendlyName, Size, PartitionStyle, OperationalStatus
For a new disk, initialization is required before partitioning:
# Initialize disk (replace X with your disk number)
Initialize-Disk -Number X -PartitionStyle GPT
PartitionStyle can be either GPT (recommended for modern systems) or MBR (for legacy compatibility).
Create a primary partition using the entire disk space:
# Create partition using all available space
New-Partition -DiskNumber X -UseMaximumSize -AssignDriveLetter
For advanced scenarios, you can specify size with -Size
parameter (e.g., -Size 50GB
).
Format the newly created partition with NTFS filesystem:
# Format partition (Y is the assigned drive letter)
Format-Volume -DriveLetter Y -FileSystem NTFS -NewFileSystemLabel "DataDrive" -Confirm:$false
Alternative filesystems include ReFS or FAT32 (for compatibility).
Here's a full script automating the entire process:
$diskNumber = 1 # Change this to your target disk
# Initialize disk
Initialize-Disk -Number $diskNumber -PartitionStyle GPT
# Create partition
$partition = New-Partition -DiskNumber $diskNumber -UseMaximumSize -AssignDriveLetter
# Format volume
Format-Volume -DriveLetter $partition.DriveLetter -FileSystem NTFS -NewFileSystemLabel "Storage" -Confirm:$false
For complex setups like multiple partitions:
# Create system partition (100MB)
New-Partition -DiskNumber X -Size 100MB -DriveLetter S
# Create data partition with remaining space
New-Partition -DiskNumber X -UseMaximumSize -DriveLetter D
# Format both partitions
Format-Volume -DriveLetter S -FileSystem NTFS -NewFileSystemLabel "System"
Format-Volume -DriveLetter D -FileSystem NTFS -NewFileSystemLabel "Data"
- Access denied errors: Always run PowerShell as Administrator
- Disk not showing: Check physical connections and storage controllers
- PartitionStyle conflicts: Use
Clear-Disk
to wipe existing partitions if needed