2016-04-19 2 views
1

В настоящее время у меня есть сценарий ниже, который работает, но у меня есть более 30 серверов, и они часто меняются, поэтому мне было любопытно, был ли более простой способ получить переменную $ServerList с данными импорта с каждого из моих серверов. Путь сервера тот же, и я мог бы поддерживать файл Server.txt со всеми именами серверов. Любые идеи о том, как упростить это для работы с большим списком серверов, которые я могу обновить, когда это необходимо, без добавления строк в сценарий powershell?Установите переменную из импортированного списка серверов с помощью 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 

ответ

1

Да, вы можете использовать Get-Content командлет, чтобы получить список серверов (вы должны создать Server.txt первый). Затем вы можете использовать Foreach-Object Командлет (псевдоним %) перебрать его и использовать текущий сервер:

$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}} } 

Теперь вам не нужно ничего менять на сценарий, если добавить сервер. Вот тот же сценарий, но, возможно, немного лучше понять для вас:

$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

Оператор формата бесполезен в вашем первом фрагменте кода. Вы даже удалили его на второй. – Matt

0

метод я хотел бы использовать что-то вроде этого было бы сделать функцию для него. Вот несколько непроверенных примеров кода.

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 $_} 
Смежные вопросы