mirror of
https://github.com/microsoft/vcpkg.git
synced 2024-12-21 07:55:32 +08:00
61 lines
2.1 KiB
PowerShell
61 lines
2.1 KiB
PowerShell
|
# Copyright (c) Microsoft Corporation.
|
||
|
# SPDX-License-Identifier: MIT
|
||
|
|
||
|
# REPLACE WITH UTILITY-PREFIX.ps1
|
||
|
|
||
|
<#
|
||
|
.SYNOPSIS
|
||
|
Partitions a new physical disk.
|
||
|
.DESCRIPTION
|
||
|
Takes the disk $DiskNumber, turns it on, then partitions it for use with label
|
||
|
$Label and drive letter $Letter.
|
||
|
.PARAMETER DiskNumber
|
||
|
The number of the disk to set up.
|
||
|
.PARAMETER Letter
|
||
|
The drive letter at which to mount the disk.
|
||
|
.PARAMETER Label
|
||
|
The label to give the disk.
|
||
|
#>
|
||
|
Function New-PhysicalDisk {
|
||
|
Param(
|
||
|
[int]$DiskNumber,
|
||
|
[string]$Letter,
|
||
|
[string]$Label
|
||
|
)
|
||
|
if ($Letter.Length -ne 1) {
|
||
|
throw "Bad drive letter $Letter, expected only one letter. (Did you accidentially add a : ?)"
|
||
|
}
|
||
|
|
||
|
try {
|
||
|
Write-Host "Attempting to online physical disk $DiskNumber"
|
||
|
[string]$diskpartScriptPath = Get-TempFilePath -Extension 'txt'
|
||
|
[string]$diskpartScriptContent =
|
||
|
"SELECT DISK $DiskNumber`r`n" +
|
||
|
"ONLINE DISK`r`n"
|
||
|
|
||
|
Write-Host "Writing diskpart script to $diskpartScriptPath with content:"
|
||
|
Write-Host $diskpartScriptContent
|
||
|
Set-Content -Path $diskpartScriptPath -Value $diskpartScriptContent
|
||
|
Write-Host 'Invoking DISKPART...'
|
||
|
& diskpart.exe /s $diskpartScriptPath
|
||
|
|
||
|
Write-Host "Provisioning physical disk $DiskNumber as drive $Letter"
|
||
|
[string]$diskpartScriptContent =
|
||
|
"SELECT DISK $DiskNumber`r`n" +
|
||
|
"ATTRIBUTES DISK CLEAR READONLY`r`n" +
|
||
|
"CREATE PARTITION PRIMARY`r`n" +
|
||
|
"FORMAT FS=NTFS LABEL=`"$Label`" QUICK`r`n" +
|
||
|
"ASSIGN LETTER=$Letter`r`n"
|
||
|
Write-Host "Writing diskpart script to $diskpartScriptPath with content:"
|
||
|
Write-Host $diskpartScriptContent
|
||
|
Set-Content -Path $diskpartScriptPath -Value $diskpartScriptContent
|
||
|
Write-Host 'Invoking DISKPART...'
|
||
|
& diskpart.exe /s $diskpartScriptPath
|
||
|
}
|
||
|
catch {
|
||
|
Write-Error "Failed to provision physical disk $DiskNumber as drive $Letter! $($_.Exception.Message)"
|
||
|
}
|
||
|
}
|
||
|
|
||
|
New-PhysicalDisk -DiskNumber 1 -Letter 'E' -Label 'install disk'
|