Public/Functions/OSDCloudRE/New-OSDCloudREVolume.ps1
function New-OSDCloudREVolume { <# .SYNOPSIS OSDCloudRE: Gets the OSDCloudRE Partition object .DESCRIPTION OSDCloudRE: Gets the OSDCloudRE Partition object .EXAMPLE New-OSDCloudREVolume .LINK https://github.com/OSDeploy/OSD/tree/master/Docs #> [CmdletBinding()] [OutputType([Microsoft.Management.Infrastructure.CimInstance])] [OutputType('Microsoft.Management.Infrastructure.CimInstance#ROOT/Microsoft/Windows/Storage/MSFT_Volume')] param () Write-Verbose $MyInvocation.MyCommand Block-StandardUser $WindowsPartition = Get-Partition | Where-Object {$env:SystemDrive -match $_.DriveLetter} $WindowsDiskNumber = $WindowsPartition.DiskNumber $WindowsSizeMax = $WindowsPartition | Get-PartitionSupportedSize | Select-Object -ExpandProperty SizeMax $WindowsShrinkSize = $WindowsSizeMax - 990MB $OSDCloudREVolume = Get-OSDCloudREVolume #============================================ # Test WindowsPartition #============================================ if ($WindowsPartition) { #============================================ # Test UEFI #============================================ if ((Get-OSDGather -Property IsUEFI)) { #============================================ # Test if OSDCloudRE already exists #============================================ if (! $OSDCloudREVolume) { #============================================ # Shrink Windows Partition #============================================ Write-Verbose "$((Get-Date).ToString('yyyy-MM-dd-HHmmss')) Shrinking Windows partition 990MB" $WindowsPartition | Resize-Partition -Size $WindowsShrinkSize #============================================ # Test WindowsPartition # Get Results #============================================ if ($WindowsPartition) { #============================================ # Create NewPartition #============================================ Write-Verbose "$((Get-Date).ToString('yyyy-MM-dd-HHmmss')) Creating OSDCloudRE Partition" $NewPartition = New-Partition -DiskNumber $WindowsDiskNumber -GptType '{de94bba4-06d1-4d40-a16a-bfd50179d6ac}' -UseMaximumSize #============================================ # Test NewPartition #============================================ if ($NewPartition) { #============================================ # Test NewPartitionNumber #============================================ $NewPartitionNumber = $NewPartition.PartitionNumber #============================================ # Format Partition #============================================ if ($NewPartitionNumber) { Write-Verbose "$((Get-Date).ToString('yyyy-MM-dd-HHmmss')) select disk $WindowsDiskNumber" Write-Verbose "$((Get-Date).ToString('yyyy-MM-dd-HHmmss')) select partition $NewPartitionNumber" Write-Verbose "$((Get-Date).ToString('yyyy-MM-dd-HHmmss')) format fs=ntfs quick label=`"OSDCloudRE`"" Write-Verbose "$((Get-Date).ToString('yyyy-MM-dd-HHmmss')) assign letter=o" Write-Verbose "$((Get-Date).ToString('yyyy-MM-dd-HHmmss')) rescan" Write-Verbose "$((Get-Date).ToString('yyyy-MM-dd-HHmmss')) exit" $null = @" select disk $WindowsDiskNumber select partition $NewPartitionNumber format fs=ntfs quick label="OSDCloudRE" assign letter=o rescan exit "@ | diskpart.exe Write-Host -ForegroundColor DarkGray "$((Get-Date).ToString('yyyy-MM-dd-HHmmss')) Testing OSDCloudRE Volume" #============================================ # Return Results #============================================ if (Get-OSDCloudREVolume) { Get-OSDCloudREVolume } else { Write-Error "$((Get-Date).ToString('yyyy-MM-dd-HHmmss')) Could not create OSDCloudRE volume" } } else { Write-Error "$((Get-Date).ToString('yyyy-MM-dd-HHmmss')) Unable to get OSDCloudRE partition DiskNumber" } } else { Write-Error "$((Get-Date).ToString('yyyy-MM-dd-HHmmss')) Unable to create an OSDCloudRE partition" } } else { Write-Error "$((Get-Date).ToString('yyyy-MM-dd-HHmmss')) Unable to shink Windows partition" } } else { Write-Error "$((Get-Date).ToString('yyyy-MM-dd-HHmmss')) Cannot create a second OSDCloudRE instance" } } else { Write-Error "$((Get-Date).ToString('yyyy-MM-dd-HHmmss')) OSDCloudRE requires UEFI" } } else { Write-Error "$((Get-Date).ToString('yyyy-MM-dd-HHmmss')) Unable to find the Windows Partition" } } |