Powershell 使用Select对象从导入的服务器列表中设置变量

Powershell 使用Select对象从导入的服务器列表中设置变量,powershell,foreach,select-object,Powershell,Foreach,Select Object,目前,我有下面的脚本可以运行,但是我有30多台服务器,它们经常发生变化,因此我想知道是否有更简单的方法可以使用来自每个服务器的导入数据更新$ServerList变量。服务器路径相同,我可以维护一个包含所有服务器名称的server.txt文件。关于如何简化此操作以使用更大的服务器列表(我可以在需要时进行更新,而无需向powershell脚本添加行)的想法 $Headers = "Extension","Server IP","Comment" $1 = Import-Csv "\\Server1\

目前,我有下面的脚本可以运行,但是我有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
可以,您可以使用cmdlet获取服务器列表(必须首先创建
Server.txt
)。然后,您可以使用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}}
}

我会用一种方法来处理类似的事情,就是为它创建一个函数。下面是一些未经测试的示例代码

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

在第一个代码段中不需要format运算符。你甚至在第二天就把它拿走了。