Spinner vidare på Drakfots guide om initiering, partionering samt formatering av disk på virtuell server.
Har skapat ett script som jobbat mot Hyper-V i Windows Server 2012 (ej R2).
Kommer anpassa scriptet för Hyper-V i 2012 R2 när jag hunnit få upp en sådan maskin.
Stora förändringen mellan Hyper-V i 2012 och 2012 R2 är att du kan utföra allt i drift. I 2012 behöver den virtuella servern stängas ner för att koppla disken osv.
Scriptet tar bara hänsyn till lokala diskar som finns kopplade på Hyper-V-servern.
Har inte lagt in så mycket felhantering utan mer fokuserat på att få upp funktionen.
Krav före exekvering:
1) En fungerande inloggningsmiljö
2) Kontot du exekverar koden med måste vara administratör på Hyper-V-servern samt den virtuella servern du vill installera disken på.
3) Namnet på den virtuella maskinen i Hyper-V måste vara samma som DNS-namnet för att Powershell remoting ska fungera.
Då kör vi. 🙂
# Skapat av Qraze, https://www.qraze.se # Kommandon som exekveras på den virtuella maskinen är hämtat från http://sleepdontexist.com. # Scriptnamn: Add_Disk_to_VM.ps1 # Skapat: 2013-12-28 # Exekveras på Hyper-V-servern. # Hämtar samtliga lokala diskar på Hyper-V-servern. Har filtrerat ut C: och System Reserved då dessa inte ska användas till virtuella maskiner. # Välj den disk du vill skapa VHDX-filen på. $selectedPhysicalDisk = Get-Volume | where { $_.DriveLetter -ne "C" -and $_.FileSystemLabel -ne "System Reserved" } | select DriveLetter,@{Name=”Free Space (GB)”;Expression={“{0:N1}” -f($_.SizeRemaining/1gb)}} | Out-GridView -PassThru # Placerar data från selectedPhysicalDisk i separata variabler för enklare hantering. $PhysicalDriveLetter = "$($selectedPhysicalDisk.DriveLetter):" $PhysicalDiskFreeSpace = $selectedPhysicalDisk.'Free Space (GB)' if (!(Test-Path "$($PhysicalDriveLetter)AutoDisk")){ New-Item -ItemType Directory -Name AutoDisk -Path $PhysicalDriveLetter } # Hämtar samtliga virtuella maskiner. # Välj den maskin du vill koppla den nya disken till. $selectedVirtualMachine = Get-VM | Out-GridView -PassThru $VmName = $selectedVirtualMachine.Name # Hämtar antal filer för löpnummer [int]$count = (Get-ChildItem "$($PhysicalDriveLetter)AutoDisk").count $count++ $count.ToString() $VHDName = "$($VMname)_disk$($count).vhdx" $VHDFullPath = "$($PhysicalDriveLetter)AutoDisk$($VHDName)" # Ange önskad diskstorlek [int]$diskSize = Read-Host "Ange önskad diskstorlek i GB (Max $($PhysicalDiskFreeSpace)GB) (Ex: 40)" $diskSizeBytes = $diskSize * 1073741824 New-VHD -Dynamic -Path "$($PhysicalDriveLetter)AutoDisk$($VHDName)" -SizeBytes $diskSizeBytes # Kontrollerar om den virtuella maskinen är igång, i så fall stängs den av nu. $VmState = (Get-Vm -Name $VmName).State if ($VmState -eq "Running"){ $state = "Running" Stop-Computer -ComputerName $VmName -Force While ($state -eq "Running"){ Write-Host "Väntar på att den virtuella maskinen stängs ner." $VmState = (Get-Vm -Name $VmName).State if ($VmState -eq "Running"){ Start-Sleep -Seconds 5 } else{ $state = "Stopped" Write-Host "Maskinen har stoppats." } } } Write-Host "Lägger till disken på den virtuella maskinen." # Kopplar den nya disken till den virtuella maskinen på IDE-port. ADD-VMHardDiskDrive -VMName $VmName -Path $VHDFullPath # Startar den virtuella maskinen Write-Host "Startar den virtuella maskinen" Start-VM -VMName $VmName # Väntar 30 sekunder på att maskinen startar och svarar på ping. Write-Host "Väntar 30 sekunder på att den virtuella maskinen svarar på ping" Start-sleep -Seconds 30 if (Test-Connection -ComputerName $VmName){ Write-Host "Maskinen svarar på ping. Exekverar kod remote på maskinen" # Kör Powershell remote på den virtuella maskinen för att aktivera den nya disken och formatera den samt generera en ledig enhetsbokstav. Invoke-Command -ComputerName $VmName -ScriptBlock { # Detta körs inne på den virtuella maskinen. Get-Disk | where { $_.PartitionStyle -eq "RAW" } | Initialize-Disk -PartitionStyle GPT -PassThru | New-Partition -AssignDriveLetter -UseMaximumSize | Format-Volume -Confirm:$False } }