1

$ServerList現在、動作する以下のスクリプトがありますが、30 を超えるサーバーがあり、頻繁に変更されるため、各サーバーからのインポート データで変数を更新する簡単な方法があるかどうかを知りたいと思いました。サーバー パスは同じで、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コマンドレットを使用してサーバーの一覧を取得できます (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}}
}
于 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 に答える