Learn about Windows PowerShell
Summary: Microsoft Scripting Guy, Ed Wilson, talks about using Windows PowerShell to initialize raw disks and to partition and format volumes.
Microsoft Scripting Guy, Ed Wilson, is here. In yesterday’s post, Use PowerShell to Add VHDs and Configure New Virtual Machines, I was able to create and add new VHDs to previously existing virtual machines. However, when the virtual machine comes online, there is a bit of work to do to make the drive accessible from within the operating system. For example, the drive needs to be initialized. This occurs, typically when I open the Disk Management utility and a message states that a new drive is detected and must be initialized. This is typically a one-time operation, and it does not take very long to accomplish. Next, the drive must be partitioned and formatted before it is usable. Formatting a new drive can take a bit of time depending on the size of the drive and the type of format being performed.
Luckily, with Windows PowerShell 3.0 in Windows 8 or Windows Server 2012, I can perform all of these operations via Windows PowerShell functions from the Storage module. The process is the same as I would do via the Disk Management tool. The steps are:
The following script accomplishes these four tasks:
Where partitionstyle -eq 'raw' |
Initialize-Disk -PartitionStyle MBR -PassThru |
New-Partition -AssignDriveLetter -UseMaximumSize |
Format-Volume -FileSystem NTFS -NewFileSystemLabel "disk2" -Confirm:$false
The first thing I do is get all disks that have a raw partition style. To do this I use the Get-Disk function, and I use the Where-Object cmdlet to limit the results to those with a ‘Raw’ partition style. This portion of the script is shown here.
Now I use the Initialize-Disk function to initialize the raw disk. I specify that I want to use an MBR style of partition, and I use the PassThru switch to pass the returned disk object down the pipeline to the next command. This portion of the script is shown here.
Because the disk is now initialized, I can create a new partition for the drive. To do this, I use the New-Partition function, and I allow the operating system to assign a new drive letter to the drive. I also tell the operating system to create the largest partition size that the disk will support. I then pipe the newly created partition to the next command. This command is shown here.
The last thing to do is to format the volume. To do this, I use the Format-Volume function, and I specify that I want to format the volume by using NTFS. Because this is my second disk for each of my virtual machines, I specify the disk label as “disk 2”, and I suppress the confirmation prompt. This command is shown here.
When I run the script, the script initializes the raw disk, partitions the disk, and formats the newly created volume while adding my specified volume label. I am using the script on a bunch of virtual machines that I created, but the script also works on physical computers. This script is one that I copied to the system volume when I mounted the volumes and copied files to them prior to bringing the virtual machines online.
That is all there is to using Windows PowerShell to initialize raw disks and to partition and format a new volume. Join me tomorrow when I will talk about Event 6 in the 2013 Scripting Games.
I invite you to follow me on Twitter and Facebook. If you have any questions, send email to me at email@example.com, or post your questions on the Official Scripting Guys Forum. See you tomorrow. Until then, peace.
Ed Wilson, Microsoft Scripting Guy
awesome, no mucking around with diskpart!
Get-Disk is not working on Windows 2008 R2 , Ive tried upgrading to Powershell 3.0 as well . still no joy . Does anyone have idea , do I need to add a specific snapin ?
get-disk and get-partition don't work if disk type dynamical.
I am pretty new to powershell. Why must you use -Confirm:$false instead just -Confirm? The documentation says that false is the default for confirm. -Confirm $false also fails. What does the : do?