torstai 1. syyskuuta 2016

Hyper-V virtuaalikoneiden luominen Powershellin avulla

 

Hyper-V:ä

Hyper-V on mainio ympäristö paitsi tuotantokäytössä, myös testiympäristönä, esimerkiksi asennusjärjestelmiä ja asennuksia testattaessa. Hyper-V ympäristössä olevien virtuaalikoneiden avulla on helppo testata ja opetella uusia tuotteita ja ominaisuuksia. Virtuaalikoneissa olevat järjestelmät eivät sotke tuotantoympäristöä (olettaen että virtuaalikoneiden asetukset verkkoyhteyden osalta ovat private tai internal) ja tarkistuspisteiden avulla on helppo “nollata” ei toivotut muutokset ja virheet.

Opetuskäytössä Client Hyper-V on helppo ottaa käyttöön koska ominaisuus on integroituna suoraan Windows 10 käyttöjärjestelmään. On tosin huomattava että kaikki Windows 10 versiot eivät ko. ominaisuutta sisällä. Ainoastaan Enterprise, Professional ja Education versiot Windows 10 tarjoavat mahdollisuuden Client Hyper-V ominaisuuden käyttöön ottoon. Winodws 8 ja 8.1 versioista ominaisuus on käytettävissä Pro, Enterprise versioissa. Tarvittaessa voidaan tietenkin käyttää jotain muuta virtualisointijärjestelmää, esim. VirtualBoxia.

Client Hyper-V ominaisuuden asentaminen käyttöön edellyttää “isäntäkoneelta” 64-bittistä suoritinta joka tukee Second Level Address Translation (SLAT) sekä VM Monitor Mode Extension ominaisuuksia(VT-C Intel suorittimissa). Lisäksi työmuistia tulee olla vähintään 4 Gt…tämä on minimivaatimus ja käytännössä työmuistia tulisi olla enemmän.

systeminfo_upd

Laitteistovaatimukset voi tarkastaa esim. järjestelmänvalvojan komentokehotteesta käsin systeminfo.exe komennolla tai Sysinternalsin Coreinfo ohjelmalla (coreinfo.exe –v)

Hyper-v

(Esimerkkinä kirjoittajan Hyper-V ympäristö)

Hyper-V virtuaalikoneiden luominen PowerShellin avulla

Jos kysymys on yksittäisistä virtuaalikoneista, voidaan ne helposti luoda helposti käsin Hyper-V konsolista käsin. Jos virtuaalikoneita täytyy luoda enemmän, käy manuaalinen tapa työlääksi. Onneksi PowerShell tarjoaa hyvät työkalut virtuaalikoneiden luomiseen.

Virtuaalikone luodaan PowerShellistä New-VM komennolla. Esim. komento New-VM –Name "new 1" –MemoryStartupBytes 2048MB luo uuden virtuaalikoneen Hyper-V:n asetuksissa määritettyyn oletussijaintiin. Virtuaalikoneen työmuistin määräksi on määritetty 2 Gt.

Usein kuitenkin on tarpeen määritellä virtuaalikoneelle asetukset tarkemmin.

New-VM -Name VM-PC01 –path “F:\Hyper-Vkoneet” -MemoryStartupBytes 2048MB -Generation 1 -BootDevice CD –SwitchName Internal -NewVHDPath "F:\Hyper-Vkoneet\VM-PC01Virtual Hard Disks\HD01.vhdx" -NewVHDSizeBytes 40GB

Komento luo uuden ensimmäisen sukupolven virtuaalikoneen nimeltä VM-PC01 sijaintiin F:\Hyper-Vkoneet\VM-PC01. Virtuaalikoneen ensimmäiseksi käynnistyväksi laitteeksi on määritetty CD-asema ja se on kytketty Sisäinen nimiseen virtuaalikytkimeen. Virtuaalikoneen HD01.vhdx kiintolevy on tallennettu F:\Hyper-Vkoneet\VM-PC01Virtual Hard Disks\ kansioon.

Alla näkyvä PowerShell skripti luo Windows 10 DEMO nimisen virtuaalikoneen ja luo siihen kaksi kiintolevyä. Ensimmäiseksi käynnistyväksi laitteeksi asetataan CD-asema. Virtuaalikoneen CD-asemaan asetetaan lisäksi Set-VMDvdDrive komennon .ISO päätteinen tiedosto.

(Skripti1: Luo uuden virtuaalisen Hyper-V tietokoneen)


# ASETETAAN TARVITTAVAT MUUTTUJAT
$Nimi = "Windows10 DEMO"
$Polku = "D:\Hyper-V"
$Ram = 2048MB
$Kytkin = "Internal"
$HD01koko = 40GB
$HD02koko = 10GB

# LUODAAN UUSI HYPER-V VIRTUAALIKONE
New-VM -Name $Nimi -path $Polku\$Nimi -MemoryStartupBytes $Ram -Generation 1 -BootDevice CD -SwitchName $Kytkin -NewVHDPath "$Polku\$Nimi\Virtual Hard Disks\HD01.vhdx" -NewVHDSizeBytes $HD01koko

# LUODAAN UUSI .VHDX YLIMÄÄRÄINEN KIINTOLEVY
# New-VHD -Path "$Polku\$Nimi\Virtual Hard Disks\HD02.vhdx" -SizeBytes $HD02koko -Dynamic

# LISÄTÄÄN YLIMÄÄRÄINEN KIINTOLEVY (.VHDX) VIRTUAALIKONEESEEN
# Add-VMHardDiskDrive -VMName $Nimi -Path "$Polku\$Nimi\Virtual Hard Disks\HD02.vhdx"

# MÄÄRITETÄÄN DVD-ASEMA KÄYTTÖÖN
Set-VMDvdDrive -VMName $Nimi -ControllerNumber 1 -Path "D:\Imaget\Win10.ISO\Windows10_ENT_EVAL_X64FRE_EN-US.ISO"


Hyper-v.1JPG

PowerShell skriptien salliminen työasemassa

On huomattava että oletusarvoisesti Powershell skriptien ajaminen on estetty. Jotta esim. edellä esitetty skripti voidaan suorittaa täytyy asetusta muuttaa. Järjestelmänvalvojana avatussa Powershell-konsolissa annettu komento Get-ExecutionPolicy palauttaa järjestelmän tämän hetkisen asetuksen skirptien ajamisen suhteen. Oletus on Restricted joka kieltää kaikkien Powershell skriptien ajamisen.

Asetus voidaan muuttaa Set-ExecutionPolicy komennolla esim. RemoteSigned asetukseen jolloin ainoastaan internetistä ladatuilta skirpteiltä vaaditaan luotetun varmenne luotetulta varmenteen julkaisijalta. Itse tehdyt skriptit siis ajetaan.

Annetaan siis komento Set-ExecutionPolicy Rermotsigned kaikissa niissä työasemissa joissa skriptiä halutaan ajaa.

Asetusta voidaan muuttaa myös käyttäen ryhmäkäytäntöjä (Administrative Templates\Windows Components\Windows PowerShell - Turn on Script Execution)

Hyper-v.3JPG

PowerShell skriptin suorittaminen useammassa työasemaan etäyhteyden avulla

Usein skripti halutaan ajaa useammassa työasemassa (ja usein etänä). Vaivattominta olisi että skripti suoritettaisiin kerralla kaikissa halutuissa etätyöasemissa. PowerShell tarjoaa etäkäyttöön kaksi erilaista lähestymistapaa. Komennot Enter-PSSession ja Invoke-Command, tarjoavat molemmat tavan suorittaa skriptejä ja komentoja etänä.  Näistä Enter-PSSession käyttö ei tässä tilanteessa ole optimaalista koska kysymyksessä on ns. one-one yhteys jossa yhteys muodostetaan ainoastaan yhteen etäkoneeseen kerrallaan. Invoke-Command komento tarjoaa siis tässä tilanteessa paljon paremman lähestymistavan.

Kuten edellä on mainittu, tulee skriptien suorittaminen on ensin sallittua (Set-ExecutionPolicy RemoteSigned).

Lisäksi PowerShellin etäkomentojen käyttö edellyttää että PowerShellin etäkäyttö on sallittu. Tämä voidaan sallia antamalla Enable-PSRemoting -SkipNetworkProfileCheck –Force komento Järjestelmänvalvojan PowerShell konsolista.

PowerShellin etäkäytön sallimisen jälkeen skriptien suorittaminen voidaan toteuttaa vaikkapa skriptin avulla. Skriptissä käytetään komentoa Invoke-Command joka kohdentaa Set-ExecutionPolicy Remotesigned useampaan työasemaan kerralla.

(Skripti2: Asettaa PowerShell skriptien ajoasetuksen tilaan RemoteSigned)


# MUUTETAAN KOHTEENA OLEVIEN TYÖASEMIEN ASETUSTA TILAAN RemoteSigned

# SKRIPTIN KOHTEENA OLEVAT TYÖASEMAT VOIDAAN HAKEA TEKSTIEDOSTOSTA
# $Targets = Get-Content "F:\Temp\Skriptit\Aseta Exection Policy RemoteSigned\luokka1.txt"

# TAI ANTAMALLA KOHDETYÖASEMIEN NIMET MUUTTUJAAN ITSE SKRIPTISSÄ
$KohdekoneetL = @("WKS-1","WKS-2","WKS-3","WKS-4")

# VAIHDETAAN POWERSHEL-SKRIPTIEN AJOASETUSTA JA HAETAAN UUSI ASETUS NÄKYVILLE
Invoke-Command -ComputerName $KohdekoneetL1 -Credential wksadmin@domain.local -ScriptBlock {Set-ExecutionPolicy Remotesigned -force;Get-ExecutionPolicy}


Skripti1 voidaan kohdentaa Invoke-Command komennon avulla etätietokoneisiin kun ensin on asetettu skriptien suorittaminen etätietokoneissa sallituksi.

Alla oleva skripti ajaa Hyper-V virtuaalikoneen luovan skriptin (Skripti1) etätyöasemissa.

(Skripti3: Suorittaa Skriptin1 etätyöasemissa)


# MIHIN TYÖASEMIIN SKRIPTI KOHDENNETAAN
$Kohdekoneet = @("WKS-1","WKS-2","WKS-3","WKS-4")

# MINNE VIRTUAALIKONEET KUTSUTTAVA SKRIPTI TALLENNETTU
$Skriptipolku = "F:\SKRIPTIT\Luo-Hyper-V-kone.ps1"

# KUTSUTAAN VIRTUAALIKONEET LUOVAA SKRIPTIÄ INVOKE-COMMAND KOMENNOLLA
invoke-command -ComputerName $Kohdekoneet -Credential wksadmin@domain.local -FilePath $Skriptipolku


Lopputulemana pitäisi siis olla uusi Windows10 DEMO niminen Hyper-V työasema kaikissa neljässä kohdetyöasemissa (WKS-1 , WKS-2, WKS-3 ja WKS-4)