使用PowerShell仅复制同一文件中每组的最后一个文件

时间:2018-08-08 13:52:18

标签: powershell grouping bamboo get-childitem select-object

在构建遗留应用程序的Bamboo部署时遇到了一个问题。该应用程序具有相同DLL的多个版本,因此在部署过程中将它们复制为工件时,它们会不必要地相互覆盖,从而为部署增加了15分钟的时间。

这是我选择和复制所需DLL的原始方法:

Get-ChildItem $sourcePath -Include $includedDlls -Recurse | 
Copy-Item -Destination $applicationDestinationRoot -Force

1 个答案:

答案 0 :(得分:1)

花了数小时研究和拼凑不同的PS脚本后,我组装了一个解决方案:

Get-ChildItem $sourcePath -Include $includedDlls -Recurse | 
Group-Object BaseName | 
ForEach-Object {$_.Group[-1] | Copy-Item -Destination $applicationDestinationRoot -Force}

首先,我必须按文件的BaseName对文件进行分组。然后获取每个DLL的分组对象。最后,仅选择每个DLL的最后一个FullName路径,然后将其复制到远程服务器目标位置。

随后,如果要获取第一个文件而不是最后一个文件,只需将$_.Group[-1]替换为$_.Group[0]

编辑:我已经使用@Ansgar Wiechers的较短代码版本更新了答案。