2016-04-19 3 views
1

Derzeit habe ich das unten Skript, das funktioniert aber ich habe über 30 Server und sie oft ändern, so war ich neugierig, wenn es einen einfacheren Weg, um die $ServerList Variable aktualisiert bekommen würde mit den Importdaten von jedem meiner Server. Der Serverpfad ist der gleiche und ich könnte eine Server.txt Datei mit allen Servernamen verwalten. Irgendwelche Ideen, wie man dies vereinfachen kann, um mit einer größeren Liste von Servern zu arbeiten, die ich bei Bedarf aktualisieren kann, ohne dem Powershell-Skript Zeilen hinzufügen zu müssen?Setzen Sie eine Variable aus einer importierten Liste von Servern mit Select-Object

$Headers = "Extension","Server IP","Comment" 
$1 = Import-Csv "\\Server1\app\test\Stations.txt" -Header $Headers | Select-Object *, @{n='Server Name';e={'Server1'}} 
$2 = Import-Csv "\\Server2\app\test\Stations.txt" -Header $Headers | Select-Object *, @{n='Server Name';e={'Server2'}} 
$3 = Import-Csv "\\Server3\app\test\Stations.txt" -Header $Headers | Select-Object *, @{n='Server Name';e={'Server3'}} 
$4 = Import-Csv "\\Server4\app\test\Stations.txt" -Header $Headers | Select-Object *, @{n='Server Name';e={'Server4'}} 

$ServerList = $1,$2,$3,$4 

Antwort

1

Ja, Sie Get-Content, um eine Liste von Servern zu bekommen verwenden können (Sie haben die Server.txt zuerst erstellen). Dann können Sie das Foreach-Object Cmdlets (alias %) verwenden, um über sie zu durchlaufen und die aktuellen Server verwenden:

$Headers = "Extension","Server IP","Comment" 
$servers = Get-Content 'Your_path_to_server.txt' 
$ServerList = $servers | 
    % { $server = $_; Import-Csv ("\\{0}\app\test\Stations.txt" -f $server) -Header $Headers | 
    Select-Object *, @{n='Server Name';e={$server}} } 

Jetzt brauchen Sie nicht alles auf dem Skript zu ändern, wenn Sie einen Server hinzufügen. Hier ist das gleiche Skript, aber vielleicht ein wenig besser für Sie zu verstehen:

$Headers = "Extension","Server IP","Comment" 
$serverNames = Get-Content 'Your_path_to_server.txt' 

$ServerList = @() 

foreach ($serverName in $serverNames) 
{ 
    $ServerList += Import-Csv "\\$serverName\app\test\Stations.txt" -Header "Extension","Server IP","Comment" | 
    Select-Object *, @{n='Server Name';e={$serverName}} 
} 
+0

Der Format-Operator ist in Ihrem ersten Code-Snippet überflüssig. Sie haben es sogar am zweiten entfernt. – Matt

0

Eine Methode, die ich für so etwas wie diese verwenden würde wäre eine Funktion für sie zu machen. Hier ist ein nicht getesteter Beispielcode.

Function Import-ServerListCSV($serverName){ 
    $Headers = "Extension","Server IP","Comment" 
    Import-Csv "\\$serverName\app\test\Stations.txt" -Header $Headers | Select-Object *, @{n='Server Name';e={$serverName}} 
} 

$ServerList = "Server1","Server2","Server3","Server4" | % {Import-ServerListCSV $_} 
Verwandte Themen