使用包含路径\文件和有效目标的文本文件部署到多个服务器

问题描述:

Powershell大师,你能帮助我一个有趣的脚本吗? :)使用包含路径文件和有效目标的文本文件部署到多个服务器

有在我公司服务器5台,全部采用相同的目录结构。我有一个文件,servers.txt,布置2个字段。首先是服务器的名称,其次是是否应该部署到此次运行。例如....

MyServer1 Yes 
MyServer2 No 
MyServer3 No 
MyServer4 Yes 
MyServer5 Yes 

第二个文件,files.txt,包含将被部署到“是”服务器上的文件(S)的名称,复制到在适当的目录服务器,远离“根”的dirs。 (对于服务器的根是\ SERVER_NAME \项目\ MyProject的)实施例用于files.txt

file1.aspx 
bin\myproject.dll 
css\style1.css 
secure\file2.aspx 
secure\file3.aspx 

因此,例如,BIN \ myproject.dll将被复制到\ MYSERVER1 \项目\ MyProject的\ BIN \ myproject的.dll,但仅适用于servers.txt中标记为“是”的服务器。

我想写一个脚本来做这个部署,阅读这两个文件和做副本。任何可以协助的PowerShell大师?我将非常感激!

这是未经测试,但看看它是否工作。它假定files.txtservers.txt和所有源文件与脚本文件本身位于同一目录中。

$ServerList = Import-Csv -Path $PSScriptRoot\servers.txt -Delimiter ' ' -Header 'Name', 'CopyFiles'; 
$FileList = Get-Content -Path $PSScriptRoot\files.txt; 

foreach ($Server in $ServerList) { 
    if ($Server.CopyFiles -eq 'Yes') { 
     foreach ($File in $FileList) { 
      Copy-Item -Path "$PSScriptRoot\$File" -Destination ('\\{0}\Projects\MyProject\{1}' -f $Server.Name, $File); 
     } 
    } 
} 
+0

谢谢!但该脚本将位于不同的“c:\ scripts \”目录中。但是,源文件的“根”将始终位于“C:\ work \ project \”中。如何进行调整? – WebDevGuy