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

时间:2014-02-19 14:15:52

标签: powershell powershell-v2.0 powershell-v3.0 powershell-remoting

Powershell专家 ,你能用一个有趣的脚本来帮助我吗? :)

我公司有5台服务器,都有相同的目录结构。我有一个文件, servers.txt ,包含2个字段。第一,服务器的名称,第二,是否应该为此次运行部署。例如....

MyServer1 Yes
MyServer2 No
MyServer3 No
MyServer4 Yes
MyServer5 Yes

第二个文件 files.txt 包含将部署到“是”服务器的文件的名称,复制到服务器上的相应目录,dirs是离开“根”。 (服务器的根目录是\ SERVER_NAME \ Projects \ MyProject)files.txt的示例

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

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

我正在尝试编写一个脚本来执行此部署,读取这两个文件并执行复制。任何可以提供帮助的powershell大师?我非常感激!

1 个答案:

答案 0 :(得分:0)

这是未经测试的,但看看它是否有效。它假定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);
        }
    }
}