Vagrantin shell-provisioner tukee suoraan Powershell-skriptejä. Toisin sanoen Windows-virtuaalikoneen asetuksia voi muokata Powershellillä ilman, että tarvitsee rakentaa uusi virtuaalikonekuva. Tyypillinen esimerkki on Windows liittäminen konfiguraationhallintajärjestelmään kuten Puppetiin.
Vagrantin dokumentaatiossa mainitaan, että Powershell-skriptille voi välittää parametreja powershell_args -valinnalla joko merkkijonona (string) tai listana (array). Esimerkkejä etenkin Powershell-provisioinnista on kuitenkin heikosti, mistä syystä tämäkin blogipostaus on kirjoitettu. Otetaan esimerkkinä skripti bootstrap_windows.ps1, joka liittää Windows-virtuaalikoneen olemassa olevaan Puppetserveriin. Sitä käytetään käsin Powershellistä seuraavasti:
> .bootstrap_windows.ps1 -certName win2012r2.local -ServerName puppet.local -puppetServerAddress 192.168.137.10
Rivinvaihdot on lisätty selvyyden vuoksi.
Jos bootstrap_windows.ps1 skripti halutaan ajaa suoraan Vagrantissa, tehdään se seuraavasti:
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
config.vm.define "win2012r2" do |box|
box.vm.box = "mwrock/Windows2012R2"
box.vm.box_version = "0.6.1"
box.vm.hostname = "windows2012r2a"
box.vm.network "private_network", ip: "192.168.31.101"
box.vm.provider "virtualbox" do |vb|
vb.gui = false
vb.memory = 2048
end
box.vm.provision "shell" do |s|
s.path = "bootstrap_windows.ps1"
s.args = ["-certName", "win2012r2.local",
"-ServerName", "puppet.local",
"-puppetServerAddress", "192.168.31.1"]
end
end
end
Huomaa, miten kukin parametri ja parametrin arvo on lisätty listaan erillisenä merkkijonona; syystä tai toisesta esimerkiksi "-certName win2012r2.local" ei toimi.



