【问题标题】:Copying Only The Last File Of Each Group Of The Same File Using PowerShell使用 PowerShell 仅复制同一文件的每组的最后一个文件
【发布时间】:2018-08-08 13:52:17
【问题描述】:

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

这是我最初选择和复制所需 DLL 的方法:

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

【问题讨论】:

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


    【解决方案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 的代码更短版本更新了我的答案。

    【讨论】:

    • ... | Group-Object BaseName | ForEach-Object {$_.Group[-1] | Copy-Item -Destination $applicationDestinationRoot -Force} 就足够了。
    • 这看起来很有希望,但它会抛出一个错误:“复制项:输入对象不能绑定到命令的任何参数,因为命令不接受管道输入或输入及其属性不匹配任何接受管道输入的参数。"
    • 没关系,我犯了错误。谢谢@AnsgarWiechers!这有效并缩小了我的代码。我已更新我的答案以包含您的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-30
    • 2011-05-19
    相关资源
    最近更新 更多