← Tillbaka till arkivet
Arkiverat från ITYogi Blogg · 2013-11-27
it

Installera serverroller från xml del 2

del 1 visade jag hur man använder en xml fil för att installera en roll via powershell, men om man vill installera samma roll på flera servrar då? En snabb get-help Install-WindowsFeature kanske kan ge en ledtråd:

gethelpwindowsfeature

Så som enklast använd ComputerName växeln och sedan exekvera kommandot flera gånger, men det är ju inte speciellt automatiserat eller speciellt snyggt. För att automatisera processen behövs en lista på servrar från någon källa. Ett av de smidigaste sätten i PowerShell är csv filer. En CSV-fil är en vanlig textfil där alla värden är separerade av ett komma (Comma Separated Values). Nu behöver vi ju bara ett värde, nämligen datornamn, så bara öppna notepad och mata in datornamnen, som det ska installeras roller på, enligt följande bild:

notepadserverlist

För att importera listan på servrar i PowerShell skriv import-csv servers.txt

ImportServers

  Nu är det dags att skriva lite kod, nämligen en for-loop. Den behövs för att exekvera ett kommando för varje rad i en lista. Så först behövs listan läggas in i en variabel:

$ServerList = Import-CSV Servers.txt

Nästa steg blir for loopen:

foreach ($Server in $ServerList)
{
}

På ren svenska, för varje server i listan med servrar utför  något, och något ska vara mellan måsvingarna. Och det som ska utföras är att installera en serverroll:

foreach ($Server in $Serverlist)
{
Install-WindowsFeature -ComputerName $Server -ConfigurationFilePath “c:\configfiles\DeploymentConfigTemplate.xml”
}

Enkelt eller hur? Men då frågar sig vän av ordning, om jag vill ha olika roller på olika servrar då? Ja då är det bara att lägga in den informationen i CSV-filen.

notepadserverlistxml

 För att använda flera parametrar från CSV filen ange bara kolumnnamnet efter variabeln. Så nedan översatt från Powershell till svenska är alltså: För varje rad i listan med servrar stoppa in servernamnet i variabeln server och stoppa in XML filen i variabeln ConfigFile.

foreach ($Row in $Serverlist)
{
$Server = $Row.ServerName
$ConfigFile = $Row.XML
Install-WindowsFeature -ComputerName $Server -ConfigurationFilePath $ConfigFile
}

Ett lite mer komplett skript med en variabel för sökvägen till konfigurationsfilerna.

#Path to Role Configuration XML:s
$Path = "C:\ConfigFiles\"

$ServerList = Import-CSV Servers.txt

foreach ($Row in $Serverlist)
{
$Server = $Row.ServerName
$ConfigFile = $Path + $Row.XML
Install-WindowsFeature -ComputerName $Server -ConfigurationFilePath $ConfigFile
}

Skriptet ovan är en grund för att egentligen göra vad som helst med parametrar från en textfil, bara ersätt Install-WindowsFeature med ett annat PowerShellkommando och kör. Ett exempel är mitt skript för att installera websiter från CSV.