I 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:
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:
För att importera listan på servrar i PowerShell skriv import-csv servers.txt
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:
1 |
$ServerList = Import-CSV Servers.txt |
Nästa steg blir for loopen:
1 2 3 |
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:
1 2 3 4 |
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.
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.
1 2 3 4 5 6 |
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.
1 2 3 4 5 6 7 8 9 10 11 |
#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.
Intressant? Dela på:


Leave a Reply