1

目前我有下面的脚本可以工作,但是我有超过 30 台服务器并且它们经常更改,所以我很好奇是否有更简单的方法可以$ServerList使用我的每台服务器的导入数据更新变量。服务器路径是相同的,我可以维护一个Server.txt包含所有服务器名称的文件。关于如何简化它以使用更大的服务器列表的任何想法,我可以在需要时更新而无需向 powershell 脚本添加行?

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

2 回答 2

1

是的,您可以使用Get-Content cmdlet 来获取服务器列表(您必须创建第Server.txt一个)。然后,您可以使用Foreach-Object cmdlet(别名%)对其进行迭代并使用当前服务器:

$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}}
}
于 2016-04-19T16:57:24.593 回答
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 $_}
于 2016-04-19T20:52:06.943 回答